Exemplo n.º 1
0
 /// <summary>
 /// この構文木の末尾に構文木を追加する。
 /// </summary>
 /// <param name="tree"></param>
 public void Append(SyntaxTree tree)
 {
     elms.Add(tree);
     tokenizer.PeekToken();
 }
Exemplo n.º 2
0
        public static IEnumerable<string> RangeParameters2Enumerator(SyntaxTree tree)
        {
            for (int i = 0; i < tree.elms.Count;++i )
            {
                var token = tree.elms[i].token;
                switch (token)
                {
                    case Token.IDENT:
                    case Token.STRING:
                        yield return tree.elms[i].ident;
                        break;

                    case Token.NUMBER:
                        var start = tree.elms[i].ident;
                        var end = start;
                        if (i + 2 < tree.elms.Count && tree.elms[i + 1].token == Token.RANGE)
                        {
                            end = tree.elms[i + 2].ident;
                            i += 2; // 解析位置を2つ分、先まで進めておく。
                        }

                        int start0, end0;
                        try
                        {
                            start0 = int.Parse(start);
                            end0 = int.Parse(end);
                        }
                        catch
                        {
                            throw new UnrollerException("RangeParameterで数字が指定されていない。");
                        }
                        for (int j = start0; j <= end0; ++j)
                            yield return j.ToString();

                        break;
                }

            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// この構文木の末尾にtokenとその文字列を追加
        /// TokenのRemoveはしないので要注意。
        /// </summary>
        public void Append(Token token_,string ident_)
        {
            var tree = new SyntaxTree(Syntax.Token , tokenizer){token = token_, ident = ident_};

            elms.Add(tree);
            tokenizer.PeekToken();
        }