public Node FunDef() { var n1 = new FunctionDef() { AnchorToken = Expect(TokenCategory.IDENTIFIER) }; Expect(TokenCategory.PARENTHESIS_OPEN); if (CurrentToken == TokenCategory.IDENTIFIER) { n1.Add(IDList(new ParamList())); } else { n1.Add(new ParamList()); } Expect(TokenCategory.PARENTHESIS_CLOSE); Expect(TokenCategory.BRACE_OPEN); while (CurrentToken == TokenCategory.VAR) { n1.Add(VarDef()); } if (firstOfStatement.Contains(CurrentToken)) { var listStmt = new ListStatements(); while (firstOfStatement.Contains(CurrentToken)) { listStmt.Add(Statement()); } n1.Add(listStmt); } Expect(TokenCategory.BRACE_CLOSE); return(n1); }