- : expr PLUS fact { $$ = ast_binop($1, plus, $3); }
- | expr MINUS fact { $$ = ast_binop($1, minus, $3); }
- | fact
- ;
-
-fact
- : fact TIMES basic { $$ = ast_binop($1, times, $3); }
- | fact DIVIDE basic { $$ = ast_binop($1, divide, $3); }
- | basic
- ;
-
-basic
- : INTEGER
+ : expr BINOR expr { $$ = ast_binop($1, binor, $3); }
+ | expr BINAND expr { $$ = ast_binop($1, binand, $3); }
+ | expr EQ expr { $$ = ast_binop($1, eq, $3); }
+ | expr NEQ expr { $$ = ast_binop($1, neq, $3); }
+ | expr LEQ expr { $$ = ast_binop($1, leq, $3); }
+ | expr LE expr { $$ = ast_binop($1, le, $3); }
+ | expr GEQ expr { $$ = ast_binop($1, geq, $3); }
+ | expr GE expr { $$ = ast_binop($1, ge, $3); }
+ | expr CONS expr { $$ = ast_binop($1, cons, $3); }
+ | expr PLUS expr { $$ = ast_binop($1, plus, $3); }
+ | expr MINUS expr { $$ = ast_binop($1, minus, $3); }
+ | expr TIMES expr { $$ = ast_binop($1, times, $3); }
+ | expr DIVIDE expr { $$ = ast_binop($1, divide, $3); }
+ | expr MODULO expr { $$ = ast_binop($1, modulo, $3); }
+ | expr POWER expr { $$ = ast_binop($1, power, $3); }
+ | MINUS expr { $$ = ast_unop(negate, $2); }
+ | INVERSE expr { $$ = ast_unop(inverse, $2); }