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 ")"