From 8ea9fc2536aa0eb45092ed3654dba19b0c8e7c20 Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Sat, 27 Apr 2024 10:19:54 -0700 Subject: Implement recursive functions. --- parser.sml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'parser.sml') diff --git a/parser.sml b/parser.sml index 3c044af..e4c7359 100644 --- a/parser.sml +++ b/parser.sml @@ -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 -- cgit v1.3.1