open Ast open Printf let rec print_expr = function | Ident s -> print_string s | Int i1 -> print_int i1 | String s -> print_string ("\""^s^"\"") | Quotation (s, t) -> ( match t with | None -> print_string ("<<"^s^">>") | Some t -> print_string ("<"^t^"<"^s^">>") ) | Plus (e1 , e2) -> print_expr e1; print_string " + "; print_expr e2; () | App (e1 , e2) -> print_string "("; print_expr e1; print_string " "; print_expr e2; print_string ")"; () | Value (path, name) -> List.iter (fun s -> print_string (s^".")) path; print_string name; () let print_decl name args e = printf "let %s " name; List.iter (fun s -> print_string (s^" ")) args; printf "= \n "; print_expr e; print_endline "\n;;"; () let print_stm = function | Expr e -> print_expr e; print_endline ";;" | Decl (name, args, e, t) -> print_decl name args e | Quotation_stm (s, t) -> ( match t with | None -> print_string ("<<"^s^">>") | Some t -> print_string ("<"^t^"<"^s^">>") ) let print = List.iter print_stm