pro-fondement/Rendu0/affichage.ml
2022-01-24 23:53:08 +01:00

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