78 lines
1.9 KiB
OCaml
78 lines
1.9 KiB
OCaml
open Expr
|
|
|
|
let rec affiche_val v = match v with
|
|
| VInt k -> print_int k
|
|
| VBool b -> print_string (if b then "Vrai" else "Faux")
|
|
| VFunc (v,e) -> print_string "Fun(";print_string v;print_string " -> ";affiche_expr e;print_string ")"
|
|
|
|
(* fonction d'affichage *)
|
|
and affiche_expr e =
|
|
let aff_aux s a b =
|
|
begin
|
|
print_string s;
|
|
affiche_expr a;
|
|
print_string ", ";
|
|
affiche_expr b;
|
|
print_string ")"
|
|
end
|
|
in
|
|
match e with
|
|
| Const k -> print_int k
|
|
| BConst b -> affiche_val (VBool b)
|
|
| Add(e1,e2) -> aff_aux "Add(" e1 e2
|
|
| Mul(e1,e2) -> aff_aux "Mul(" e1 e2
|
|
| Min(e1,e2) -> aff_aux "Min(" e1 e2
|
|
| Eq(e1,e2) -> aff_aux "Eq(" e1 e2
|
|
| Gt(e1,e2) -> aff_aux "Gt(" e1 e2
|
|
| Lt(e1,e2) -> aff_aux "Lt(" e1 e2
|
|
| Gte(e1,e2) -> aff_aux "Gte(" e1 e2
|
|
| Lte(e1,e2) -> aff_aux "Lte(" e1 e2
|
|
| Band(e1,e2) -> aff_aux "BooleanAnd(" e1 e2
|
|
| Bor(e1,e2) -> aff_aux "BooleanOr(" e1 e2
|
|
| ITE(ec,e1,e2) ->
|
|
begin print_string "IF(";
|
|
affiche_expr ec;
|
|
print_string ", ";
|
|
affiche_expr e1;
|
|
print_string ", ";
|
|
affiche_expr e2;
|
|
print_string ")"
|
|
end
|
|
| PrInt(e1) -> print_string "PrInt(";affiche_expr e1;print_string ")"
|
|
| Var(x) -> print_string "Var(";print_string x;print_string ")"
|
|
| LetIn(x,e0,e1) -> print_string "LetIn(";print_string x;print_string ",";affiche_expr e0;print_string ",";affiche_expr e1;print_string ")"
|
|
| Fun(v,e) -> affiche_val (VFunc(v,e))
|
|
| App(e1,e2) -> aff_aux "App(" e1 e2
|
|
|
|
let dump_env_line x =
|
|
let (e,v) = x in
|
|
begin
|
|
print_string e;
|
|
print_string " -> ";
|
|
affiche_val v
|
|
end
|
|
|
|
let dump_env env =
|
|
begin
|
|
print_string "[";
|
|
let rec aux l =
|
|
begin
|
|
match l with
|
|
| [] -> ()
|
|
| [e] -> dump_env_line e
|
|
| e::t ->
|
|
begin
|
|
dump_env_line e;
|
|
print_string ";";
|
|
aux t
|
|
end
|
|
end
|
|
in aux env;
|
|
print_string "]"
|
|
end
|
|
|
|
|
|
|
|
|
|
|