Ejemplo n.º 1
0
expr_t parse_equal_expr(tokenizer_t t) {
    char * filename = cur_tok(t).filename;
    int line = cur_tok(t).line_num;
    expr_t e = parse_relat_expr(t);
    while((cur_tok(t).kind == TOK_EQ)|(cur_tok(t).kind == TOK_NEQ)) {
        op_kind_t op = parse_equal_oper(t);
        expr_t e0 = parse_relat_expr(t);
        e = mk_expr_bin_op(filename, line, op, e, e0);
    }
    return e;
}
Ejemplo n.º 2
0
expr_t parse_eq_expr(tokenizer_t t){
    expr_t expr_left, expr_right;
    expr_left = parse_relat_expr(t);

    struct token tok = cur_tok(t);
    while(tok.kind == TOK_EQ || tok.kind == TOK_NEQ){
        eat_it(t, TOK_ANY); // なんでも食べる
        expr_right = parse_relat_expr(t);
        expr_left = mk_expr_bin_op(t->filename, t->line, 
          (tok.kind == TOK_EQ) ? op_kind_eq : op_kind_neq   // == , != のどちらかしかない
          , expr_left, expr_right);  // left にたたんでいく
        tok = cur_tok(t);
    }

  return expr_left;
}