public IfNode(List <IfCase> ifCases, ElseCase elseCase) { IfCases = ifCases; ElseCase = elseCase; }
private ParseResult IfExpr() { List <IfCase> cases = new List <IfCase>(); ElseCase elseCase = null; var start = current_token.Pos_Start.Copy(); Advance(); var conditionResult = Expr(); if (conditionResult.HasError()) { return(conditionResult); } if (!current_token.Equals(new Token(TokenType.KEYWORD, "then"))) { return(new InvalidSyntaxError("Expected 'then'", current_token.Pos_Start, current_token.Pos_End)); } Advance(); var ifResult = Expr(); if (ifResult.HasError()) { return(ifResult); } cases.Add(new IfCase(conditionResult.Node, ifResult.Node)); while (current_token.Equals(new Token(TokenType.KEYWORD, "elif"))) { Advance(); var elifConditionResult = Expr(); if (elifConditionResult.HasError()) { return(elifConditionResult); } if (!current_token.Equals(new Token(TokenType.KEYWORD, "then"))) { return(new InvalidSyntaxError("Expected 'then'", current_token.Pos_Start, current_token.Pos_End)); } Advance(); var elifResult = Expr(); if (elifResult.HasError()) { return(elifResult); } cases.Add(new IfCase(elifConditionResult.Node, elifResult.Node)); } if ((current_token.Equals(new Token(TokenType.KEYWORD, "else")))) { Advance(); var elseResult = Expr(); if (elseResult.HasError()) { return(elseResult); } elseCase = new ElseCase(elseResult.Node); } return(new IfNode(cases, elseCase).SetPos(start, elseCase?.Expr.Pos_End ?? cases[cases.Count - 1].Expr.Pos_End)); }