public Node IfStatement() { var if_node = new If_Statement() { AnchorToken = Expect(TokenCategory.IF) }; if_node.Add(Expression()); Expect(TokenCategory.THEN); if_node.Add(new Statement_List(){ ZeroOrMore(firstOfStatement, Statement) }); if (Has(TokenCategory.ELSEIF)) { if_node.Add(new Condition_List(){ ZeroOrMore(TokenCategory.ELSEIF, () => { return ElifStatement(); }) }); } if (Has(TokenCategory.ELSE)) { if_node.Add(ElseStatement()); } Expect(TokenCategory.END); Expect(TokenCategory.SEMICOLON); return if_node; }
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); }