diff options
| author | Rose Hogenson <rosehogenson@posteo.net> | 2024-04-27 10:19:54 -0700 |
|---|---|---|
| committer | Rose Hogenson <rosehogenson@posteo.net> | 2024-05-04 15:23:59 -0700 |
| commit | 8ea9fc2536aa0eb45092ed3654dba19b0c8e7c20 (patch) | |
| tree | 4c11670239a6722836891f5750098c7582a44011 /parser.sml | |
| parent | Add case over int. (diff) | |
| download | sml-8ea9fc2536aa0eb45092ed3654dba19b0c8e7c20.tar.zst | |
Implement recursive functions.
Diffstat (limited to 'parser.sml')
| -rw-r--r-- | parser.sml | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -459,10 +459,14 @@ struct <|> orelseExpr) st and dec : Syntax.dec parser = fn st => (reserved "val" >> + bind (true <$ reserved "rec" <|> const false) (fn isRec => bind pat (fn p => reserved "=" >> bind expr (fn e => - const (Syntax.DVal (p, e))))) st + const + (if isRec + then Syntax.DValRec (p, e) + else 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 |
