int PP_Expression::logical_OR_expression() { int value = logical_AND_expression(); if (test(PP_OROR)) return logical_OR_expression() || value; return value; }
Expression *ExpressionBuilder::logical_OR_expression() { Expression *value = logical_AND_expression(); if (test(Token_or)) return createBinaryExpression(Expression::OrOp, value, logical_OR_expression()); return value; }
int PP_Expression::conditional_expression() { int value = logical_OR_expression(); if (test(PP_QUESTION)) { int alt1 = conditional_expression(); int alt2 = test(PP_COLON) ? conditional_expression() : 0; return value ? alt1 : alt2; } return value; }
Expression *ExpressionBuilder::conditional_expression() { Expression *value = logical_OR_expression(); if (test('?')) { Expression *leftExpression = conditional_expression(); Expression *rightExpression; if(test(':')) rightExpression = conditional_expression(); else rightExpression = createIntLiteral(0); return createConditionalExpression(value, leftExpression, rightExpression); } return value; }
/* FIRST(conditional expression)={AVID_T, FPL_T,INL_T,SVID_T, STR_T} <conditional expression> -> <logical OR expression> Author: Kwok Hong Kelvin Chan */ void conditional_expression(void){ logical_OR_expression(); gen_incode("Conditional expression parsed"); }