public static GATNode _varDeclaration(this LL1Processor ll1)
        {
            var node = new GATNode();

            node.generator = varDeclaration;
            var typeSpecifier = ll1._typeSpecifier();
            var id            = WordContainer.Advance(WordType.ID);

            node.AddChild(typeSpecifier);
            node.AddChild(id);

            if (WordContainer.GetWordType() == WordType.SQUARE_BRACKET_L)
            {
                WordContainer.Advance(WordType.SQUARE_BRACKET_L);
                var num = WordContainer.Advance(WordType.NUM);
                WordContainer.Advance(WordType.SQUARE_BRACKET_R);

                node.AddChild(num);
            }
            WordContainer.Advance(WordType.SEMICOLON);
            return(node);
        }
Example #2
0
        public static GATNode _param(this LL1Processor ll1)
        {
            var node = new GATNode();

            node.generator = Param;

            var typeSpecifier = ll1._typeSpecifier();
            var id            = WordContainer.Advance(WordType.ID);

            node.AddChild(typeSpecifier);
            node.AddChild(id);

            var next = WordContainer.GetWordType();

            if (next == WordType.SQUARE_BRACKET_L)
            {
                WordContainer.Advance(WordType.SQUARE_BRACKET_L);
                //TODO:也许要对数组特别处理
                WordContainer.Advance(WordType.SQUARE_BRACKET_R);
            }
            return(node);
        }
        public static GATNode _funDeclaration(this LL1Processor ll1)
        {
            var node          = new GATNode();
            var typeSpecifier = ll1._typeSpecifier();
            var id            = WordContainer.Advance(WordType.ID);

            WordContainer.Advance(WordType.BRACKET_L);
            var param = ll1._params();

            WordContainer.Advance(WordType.BRACKET_R);
            var compoundStmt = ll1._compoundStmt();

            //
            node.name = id.value;
            //
            node.generator = FunDeclaration;
            node.AddChild(typeSpecifier);       //0
            node.AddChild(id);                  //1
            node.AddChild(param);               //2
            node.AddChild(GATNode.LabelNode()); //3
            node.AddChild(compoundStmt);        //4

            return(node);
        }