let echo_val = let print_bool = function | true -> print_string "true" | false -> print_string "false" in function | ECST s -> print_string s | BCST b -> print_bool b | NCST n -> print_int n;; let rec print_expr = let print_bin_expr e1 e2 s = print_string "("; print_expr e1; print_string s; print_expr e2; print_string ")" in function | CST s -> print_string s | VAR v -> print_string v | ADD (e1,e2) -> print_bin_expr e1 e2 "+" | SUB (e1,e2) -> print_bin_expr e1 e2 "-" | MULT (e1,e2) -> print_bin_expr e1 e2 "*" | DIV (e1,e2) -> print_bin_expr e1 e2 "/" | LESS (e1,e2) -> print_bin_expr e1 e2 "<" | EQUAL (e1,e2) -> print_bin_expr e1 e2 "=" | NOT e -> print_string "not ";print_expr e | AND (e1,e2) -> print_bin_expr e1 e2 "&" | IF (e1,(e2,e3)) -> print_string "if "; print_expr e1; print_string " then "; print_expr e2; print_string " else "; print_expr e3; print_string " fi " | CALL (s,l) -> print_string (s^"("); print_expr_list l; print_string ")" and print_expr_list = function | [] -> () | t::[] -> print_expr t | t::q -> print_expr t; print_string ","; print_expr_list q and print_parval = function VALUE v -> echo_val v | NDYN e -> print_expr e | NSTAT (e,r) -> print_string "("; print_expr e; print_newline (); print_environnement r; print_string ")\n" and (print_parameter_binding : parameter_binding -> unit) = function s,p -> print_string (s ^ " : "); print_parval p and print_bindings = function | [] -> () | t::[] -> print_parameter_binding t | t::q -> print_parameter_binding t; print_string ", "; print_bindings q and (print_activation : activation -> unit) = function s,p -> print_string ("Activation de "^s^" :: "); print_bindings p and (print_environnement : environment -> unit) = function | [] -> () | t::q -> print_activation t; print_newline (); print_environnement q;; let print_expr_env = function e,env -> print_expr e; print_newline (); print_environnement env;; let print_reseval = function env,v -> print_environnement env; echo_val v;;