From 8ce39fa0e7aabacc2b4c0c188936014c8e3d6bad Mon Sep 17 00:00:00 2001 From: darkf Date: Fri, 8 Nov 2013 00:43:02 -0800 Subject: [PATCH] parser: calls bind less tightly; parse record access syntax (operator '\') --- Parser.hs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Parser.hs b/Parser.hs index 31c08d4..3f012bd 100644 --- a/Parser.hs +++ b/Parser.hs @@ -75,7 +75,8 @@ ifcond :: AST = "if" expr "then" expr "else" expr { IfExpr $1 $2 $3 } expr :: AST - = expr "::" expr { Cons $1 $2 } + = expr "(" args ")" { Call $1 $2 } + / expr "::" expr { Cons $1 $2 } / expr "+" fact { Add $1 $2 } / expr "-" fact { Sub $1 $2 } / expr "==" fact { Equals $1 $2 } @@ -90,11 +91,14 @@ expr :: AST fact :: AST = fact "*" term { Mul $1 $2 } / fact "/" term { Div $1 $2 } + / access + +access :: AST + = access "\\" identifier { Access $1 (Var $2) } / term term :: AST - = term "(" args ")" { Call $1 $2 } - / tuple + = tuple / "(" expr ")" / "[" listseq "]" / ifcond