public Node IfStatement() { var ifNode = new If_Statement() { AnchorToken = Expect(TokenCategory.IF) }; ifNode.Add(Expression()); Expect(TokenCategory.THEN); var stmtList = new Statement_List(); while (firstOfStatement.Contains(CurrentToken)) { stmtList.Add(Statement()); } ifNode.Add(stmtList); while (CurrentToken == TokenCategory.ELSEIF) { var elseIfNode = new ElseIf_Statement() { AnchorToken = Expect(TokenCategory.ELSEIF) }; elseIfNode.Add(Expression()); Expect(TokenCategory.THEN); var stmtListElseIf = new Statement_List(); while (firstOfStatement.Contains(CurrentToken)) { stmtListElseIf.Add(Statement()); } elseIfNode.Add(stmtListElseIf); ifNode.Add(elseIfNode); } while (CurrentToken == TokenCategory.ELSE) { var elseNode = new Else_Statement() { AnchorToken = Expect(TokenCategory.ELSE) }; var stmtListElse = new Statement_List(); while (firstOfStatement.Contains(CurrentToken)) { stmtListElse.Add(Statement()); } elseNode.Add(stmtListElse); ifNode.Add(elseNode); } Expect(TokenCategory.END); Expect(TokenCategory.EOL); return(ifNode); }
public Node ElseStatement() { var else_node = new Else_Statement() { AnchorToken = Expect(TokenCategory.ELSE) }; else_node.Add(ZeroOrMore(firstOfStatement, Statement)); return else_node; }