summaryrefslogtreecommitdiffstats
path: root/parser.sml
diff options
context:
space:
mode:
authorRose Hogenson <rosehogenson@posteo.net>2024-04-07 09:11:28 -0700
committerRose Hogenson <rosehogenson@posteo.net>2024-04-07 09:11:28 -0700
commit278ee46f0fa93a3db4ebdc6878fcd9b1d990094a (patch)
tree85cd7b4703cacea8111ea05766089ca73aac9abb /parser.sml
parentbc2fef3a2ab81270af207568706647ced919bbe6 (diff)
downloadsml-278ee46f0fa93a3db4ebdc6878fcd9b1d990094a.tar.zst
Add tests and fix variables.
Diffstat (limited to 'parser.sml')
-rw-r--r--parser.sml7
1 files changed, 6 insertions, 1 deletions
diff --git a/parser.sml b/parser.sml
index af3dfd7..6efc4aa 100644
--- a/parser.sml
+++ b/parser.sml
@@ -447,7 +447,12 @@ struct
const (Syntax.ELambda (p, e)))))
<|> 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
+ and dec : Syntax.dec parser = fn st =>
+ (reserved "val" >>
+ bind pat (fn p =>
+ reserved "=" >>
+ bind expr (fn e =>
+ const (Syntax.DVal (p, e))))) st
val program : Syntax.expr parser = (fn decs => Syntax.ELet (decs, Syntax.EInt 0)) <$> many dec
fun parse (f : string) : (string, Syntax.expr) Result.either = runParser program f