int logical_or_expression(void) { if( logical_and_expression() ) { } else if( logical_or_expression() ) { match(OR_OP); logical_and_expression(); } }
// Parse a logical-or expression. // // logical-or-expression: // logical-and-expression // logical-or-expression '||' logical-and-expression Expr& Parser::logical_or_expression() { Expr* e1 = &logical_and_expression(); while (true) { if (Token tok = match_if(tk::bar_bar_tok)) { Expr& e2 = logical_and_expression(); e1 = &on_logical_or_expression(tok, *e1, e2); } else { break; } } return *e1; }
int logical_and_expression(void) { if( inclusive_or_expression() ) { } else if( logical_and_expression() ) { match(AND_OP); inclusive_or_expression(); } }
struct Symbol* logical_or_expression(struct LogicalOrExpression* node) { if (node->type == 0) return logical_and_expression(node->logicalAndExpression); struct Symbol* symbol1 = load_symbol(logical_or_expression(node->logicalOrExpression)); struct Symbol* symbol2 = load_symbol(logical_and_expression(node->logicalAndExpression)); struct Symbol* symbol3 = test_calculable2(&symbol1, &symbol2, 'a'); if (symbol3) return symbol3; symbol3 = new_symbol("0", 0, 2, 16, 0, 2, 0); symbol3 = equality_symbol(symbol1, symbol3, 2, 1); ADDSTRING(" br i1 "); code_gen_symbol('%', symbol3); struct Symbol* label1 = new_symbol("", 0, 0, 0, 0, 0, 0); struct Symbol* label2 = new_symbol("", 0, 0, 0, 0, 0, 0); ADDSTRING(", label "); char *ch = g_ptr; ADDSTRING(" "); ADDSTRING(", label "); code_gen_symbol('%', label1); ADDSTRING("\n; <label>:"); code_gen_symbol(0, label1); ADDSTRING("\n"); symbol1 = equality_symbol(symbol2, symbol3, 2, 1); ADDSTRING(" br label "); code_gen_symbol('%', label2); ADDSTRING("\n; <label>:"); code_gen_symbol(0, label2); ADDSTRING("\n"); ADDSTRING(" "); symbol2 = new_symbol("", 0, 2, 2, 0, 0, 0); code_gen_symbol('%', symbol2); ADDSTRING(" = phi i1 [ true, %0 ], [ "); code_gen_symbol('%', symbol1); ADDSTRING(", "); code_gen_symbol('%', label2); ADDSTRING(" ]\n"); push_buffer(ch); code_gen_symbol('%', label2); *g_ptr = ' '; pop_buffer(); return symbol2; }
static struct block *logical_or_expression(struct block *block) { struct block *right; block = logical_and_expression(block); if (peek().token == LOGICAL_OR) { consume(LOGICAL_OR); right = cfg_block_init(); block = eval_logical_or(block, right, logical_or_expression(right)); } return block; }
/* * Production: Logical OR Expression (P) * FIRST set: { ., e } */ void logical_or_expression_p(void) { switch (lookahead.code) { case LOG_OP_T: /* The token attribute must be OR. */ if (lookahead.attribute.log_op == OR) { match(LOG_OP_T, OR); logical_and_expression(); logical_or_expression_p(); gen_incode("PLATY: Logical OR expression parsed"); return; } return; default: return; } }
/* * Production: Logical OR Expression * FIRST set: { AVID_T, FPL_T, INL_T, SVID_T, STR_T } */ void logical_or_expression(void) { logical_and_expression(); logical_or_expression_p(); }