Exp: Exp AND Exp {
EXPR_EMPTY(exp, BINOP)
exp->lhs = $1;
exp->oper = AND;
exp->rhs = $3;
$$ = exp;
}
| Exp LESS Exp {
EXPR_EMPTY(exp, BINOP)
exp->lhs = $1;
exp->oper = LESS;
exp->rhs = $3;
$$ = exp;
}
| Exp PLUS Exp {
EXPR_EMPTY(exp, BINOP)
exp->lhs = $1;
exp->oper = PLUS;
exp->rhs = $3;
$$ = exp;
}
| Exp MINUS Exp {
EXPR_EMPTY(exp, BINOP)
exp->lhs = $1;
exp->oper = MINUS;
exp->rhs = $3;
$$ = exp;
}
| Exp MULT Exp {
EXPR_EMPTY(exp, BINOP)
exp->lhs = $1;
exp->oper = MULT;
exp->rhs = $3;
$$ = exp;
}
| Exp LBRACK Exp RBRACK {
EXPR(exp, ARRAY_INDEX, array = $1)
exp->array_index = $3;
$$ = exp;
}
| Exp PERIOD LENGTH {
EXPR(exp, ARRAY_LENGTH, expr = $1)
$$ = exp;
}
| Exp PERIOD id LPAREN ExpList RPAREN {
EXPR_EMPTY(exp, METHOD_CALL)
exp->object = $1;
exp->method = $3;
exp->exp_list = $5;
$$ = exp;
}
| INTEGER {
EXPR(exp, INT_CONST, int_const = $1);
$$ = exp;
}
| TRUE {
EXPR(exp, BOOL_CONST, bool_const = true)
$$ = exp;
}
| FALSE {
EXPR(exp, BOOL_CONST, bool_const = false)
$$ = exp;
}
| id {
EXPR(exp, VARNAME, id = $1);
$$ = exp;
}
| THIS {
EXPR_EMPTY(exp, THIS_PTR)
$$ = exp;
}