summaryrefslogtreecommitdiffstats
path: root/parser.sml
diff options
context:
space:
mode:
Diffstat (limited to 'parser.sml')
-rw-r--r--parser.sml5
1 files changed, 4 insertions, 1 deletions
diff --git a/parser.sml b/parser.sml
index cfc6563..7d4d9c2 100644
--- a/parser.sml
+++ b/parser.sml
@@ -428,7 +428,10 @@ struct
bind orelseExpr (fn e2 =>
const (Syntax.EOrElse (e1, e2))))
<|> const e1) st
- and expr : Syntax.expr parser = fn st => typedExp st
+ and handleExpr : Syntax.expr parser = fn st => orelseExpr st
+ and raiseExpr : Syntax.expr parser = fn st => handleExpr st
+ and fnExpr : Syntax.expr parser = fn st => ((reserved "fn" >> reserved "_" >> reserved "=>" >> Syntax.ELambda <$> expr) <|> raiseExpr) st
+ and expr : Syntax.expr parser = fn st => fnExpr st
and dec : Syntax.dec parser = fn st => (reserved "val" >> reserved "_" >> reserved "=" >> Syntax.DVal <$> expr) st
val program : Syntax.expr parser = (fn decs => Syntax.ELet (decs, Syntax.EInt 0)) <$> many dec