let rec eval_expr_int e =
match e.expr_val with
| Int i -> i
| Plus(e1, e2) -> (eval_expr_int e1) + (eval_expr_int e2)
| Minus(e1, e2) -> (eval_expr_int e1) - (eval_expr_int e2)
| Mult(e1, e2) -> (eval_expr_int e1) * (eval_expr_int e2)
| Div(e1, e2) -> (eval_expr_int e1) / (eval_expr_int e2)
| Mod(e1, e2) -> (eval_expr_int e1) mod (eval_expr_int e2)
| Bool b -> raise (Asm_error "internal error in eval_expr_int function (trying to compute a non-integer expression)")
and eval_expr_bool e =
match e.expr_val with
| Bool b -> b
| Le(e1, e2) -> (eval_expr_int e1) <= (eval_expr_int e2)