pro-fondement/Rendu0/affichage.ml
2022-01-24 18:18:27 +01:00

44 lines
1.2 KiB
OCaml

open Expr
let affiche_val v = match v with
| VInt k -> print_int k
| VBool b -> print_string (if b then "Vrai" else "Faux")
(* fonction d'affichage *)
let rec 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 ")"