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); }
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); }