From 4b4b32b9dda21c97923d52d07c14f3dfd2b8b67a Mon Sep 17 00:00:00 2001 From: darkf Date: Fri, 1 Nov 2013 20:34:46 -0700 Subject: [PATCH] parser2: add do...end blocks --- parser2.hs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/parser2.hs b/parser2.hs index ae21527..a8347f9 100644 --- a/parser2.hs +++ b/parser2.hs @@ -14,6 +14,10 @@ statements :: [AST] = statement+ statement :: AST = expr "." +semistatements :: [AST] + = expr ";" semistatements { $1 : $2 } + / expr { [$1] } + args :: AST = expr ("," expr)+ { TupleConst ($1 : $2) } / expr? { case $1 of @@ -44,6 +48,9 @@ listseq :: AST Just x -> ListConst [x] Nothing -> ListConst [] } +doblock :: AST + = "do" semistatements "end" { Block $1 } + expr :: AST = expr "(" args ")" { Call $1 $2 } / expr "::" expr { Cons $1 $2 } @@ -60,6 +67,7 @@ fact :: AST term :: AST = "(" expr ")" + / doblock / stringlit { StrConst $1 } / integer { IntConst $1 } / identifier { Var $1 }