Пример #1
0
int logical_or_expression(void) {
	if( logical_and_expression() ) {
	} else if( logical_or_expression() ) {
		match(OR_OP);
		logical_and_expression();
	}
}
Пример #2
0
// 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;
}
Пример #3
0
int logical_and_expression(void) {
	if( inclusive_or_expression() ) {
	} else if( logical_and_expression() ) {
		match(AND_OP);
		inclusive_or_expression();
	}
}
Пример #4
0
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;
}
Пример #5
0
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;
}
Пример #6
0
/*
 * 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;
    }
}
Пример #7
0
/*
 * 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();
}