private ConditionalExpression Consume_ConditionalExpression() { Token token = currentToken; switch (token.Type) { case TokenType.CONDITION: Consume(TokenType.CONDITION); return(ExpressionFactory.CreateConditionalExpression(Consume_ConditionBlock(), Consume_ConditionalExpression(), currentToken)); case TokenType.ELSEIF: Consume(TokenType.ELSEIF); ConditionBlock block = Consume_ConditionBlock(); if (currentToken.Type == TokenType.END) { Consume(TokenType.END); return(ExpressionFactory.CreateConditionalExpression(block, null, currentToken)); } else { return(ExpressionFactory.CreateConditionalExpression(block, Consume_ConditionalExpression(), currentToken)); } case TokenType.ELSE: Consume(TokenType.ELSE); ConditionBlock elseBlock = ExpressionFactory.CreateConditionalBlock(2, new TRUE_Expression(), Consume_BlockStatement(), currentToken); ConditionalExpression expr = ExpressionFactory.CreateConditionalExpression(elseBlock, null, currentToken); Consume(TokenType.END); return(expr); } throw RaiseError(ScriptErrorCode.UNEXPECTED_TOKEN, token); }