Mercurial > urweb
diff src/source_print.sml @ 8:a455a9f85cc3
Parsing basic expressions
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Sat, 26 Jan 2008 17:10:26 -0500 |
parents | 5c3cc348e9e6 |
children | d89477f07c1e |
line wrap: on
line diff
--- a/src/source_print.sml Sat Jan 26 16:51:39 2008 -0500 +++ b/src/source_print.sml Sat Jan 26 17:10:26 2008 -0500 @@ -91,17 +91,17 @@ | CApp (c1, c2) => parenIf par (box [p_con c1, space, p_con' true c2]) - | CAbs (e, x, k, c) => parenIf par (box [string "fn", - space, - string x, - space, - p_explicitness e, - space, - p_kind k, - space, - string "=>", - space, - p_con c]) + | CAbs (x, k, c) => parenIf par (box [string "fn", + space, + string x, + space, + string "::", + space, + p_kind k, + space, + string "=>", + space, + p_con c]) | CName s => box [string "#", string s] @@ -121,6 +121,57 @@ and p_con c = p_con' false c +fun p_exp' par (e, _) = + case e of + EAnnot (e, t) => box [string "(", + p_exp e, + space, + string ":", + space, + p_con t, + string ")"] + + | EVar s => string s + | EApp (e1, e2) => parenIf par (box [p_exp e1, + space, + p_exp' true e2]) + | EAbs (x, NONE, e) => parenIf par (box [string "fn", + space, + string x, + space, + string "=>", + space, + p_exp e]) + | EAbs (x, SOME t, e) => parenIf par (box [string "fn", + space, + string x, + space, + string ":", + space, + p_con t, + space, + string "=>", + space, + p_exp e]) + | ECApp (e, c) => parenIf par (box [p_exp e, + space, + string "[", + p_con c, + string "]"]) + | ECAbs (exp, x, k, e) => parenIf par (box [string "fn", + space, + string x, + space, + p_explicitness exp, + space, + p_kind k, + space, + string "=>", + space, + p_exp e]) + +and p_exp e = p_exp' false e + fun p_decl ((d, _) : decl) = case d of DCon (x, NONE, c) => box [string "con", @@ -141,6 +192,24 @@ string "=", space, p_con c] + | DVal (x, NONE, e) => box [string "val", + space, + string x, + space, + string "=", + space, + p_exp e] + | DVal (x, SOME t, e) => box [string "val", + space, + string x, + space, + string ":", + space, + p_con t, + space, + string "=", + space, + p_exp e] val p_file = p_list_sep newline p_decl