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