(* File mosml/examples/pretty/ppexpr.sml * Example demonstrating installable prettyprinters. * * Try it out by running * mosml ppexpr.sml * from the command line. *)val _ = (load "PP"; load "Int");datatype expr = Cst of int | Neg of expr | Plus of expr * exprfun ppexpr pps e0 = let open PP fun ppe (Cst i) = add_string pps (Int.toString i) | ppe (Neg e) = (add_string pps "~"; ppe e) | ppe (Plus(e1, e2)) = (begin_block pps CONSISTENT 0; add_string pps "("; ppe e1; add_string pps " + "; add_break pps (0, 1); ppe e2; add_string pps ")"; end_block pps) in begin_block pps INCONSISTENT 0; ppe e0; end_block pps endval e1 = Cst 1;val e2 = Cst 2;val e3 = Plus(e1, Neg e2);val e4 = Plus(Neg e3, e3);val e5 = Plus(Neg e4, e4);val e6 = Plus(e5, e5);val e7 = Plus(e6, e6);val e8 = Plus(e3, Plus(e3, Plus(e3, Plus(e3, Plus(e3, Plus(e3, e7))))));val _ = installPP ppexpr;val _ = print "\nNow a pretty-printer for arithmetic expressions has been installed.\n\ \To see it in action, evaluate e.g.\n\ \ e1;\n e3;\n Plus(e1,e3);\n e5;\n e6;\n e7;\n";
(* File mosml/examples/pretty/ppexpr.sml
* Example demonstrating installable prettyprinters.
*
* Try it out by running
* mosml ppexpr.sml
* from the command line.
*)
val _ = (load "PP"; load "Int");
datatype expr =
Cst of int
| Neg of expr
| Plus of expr * expr
fun ppexpr pps e0 =
let open PP
fun ppe (Cst i) = add_string pps (Int.toString i)
| ppe (Neg e) = (add_string pps "~"; ppe e)
| ppe (Plus(e1, e2)) = (begin_block pps CONSISTENT 0;
add_string pps "(";
ppe e1;
add_string pps " + ";
add_break pps (0, 1);
ppe e2;
add_string pps ")";
end_block pps)
in
begin_block pps INCONSISTENT 0;
ppe e0;
end_block pps
end
val e1 = Cst 1;
val e2 = Cst 2;
val e3 = Plus(e1, Neg e2);
val e4 = Plus(Neg e3, e3);
val e5 = Plus(Neg e4, e4);
val e6 = Plus(e5, e5);
val e7 = Plus(e6, e6);
val e8 = Plus(e3, Plus(e3, Plus(e3, Plus(e3, Plus(e3, Plus(e3, e7))))));
val _ = installPP ppexpr;
val _ = print
"\nNow a pretty-printer for arithmetic expressions has been installed.\n\
\To see it in action, evaluate e.g.\n\
\ e1;\n e3;\n Plus(e1,e3);\n e5;\n e6;\n e7;\n";