From f2927c7fe39cf17af5be77598c082c41da4239fc Mon Sep 17 00:00:00 2001 From: darkf Date: Fri, 1 Nov 2013 21:22:24 -0700 Subject: [PATCH] parser2: add if, and logical operators --- parser2.hs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/parser2.hs b/parser2.hs index e6bb30c..42c54d2 100644 --- a/parser2.hs +++ b/parser2.hs @@ -69,11 +69,18 @@ lambda :: AST def :: AST = pattern "=" expr { Def $1 $2 } +ifcond :: AST + = "if" expr "then" expr "else" expr { IfExpr $1 $2 $3 } + expr :: AST = 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 } + / expr "!=" fact { NotEquals $1 $2 } + / expr "<" fact { LessThan $1 $2 } + / expr ">" fact { GreaterThan $1 $2 } / def / lambda / identifier "(" funpattern ")" "->" expr { Defun $1 (Lambda [($2, $3)]) } @@ -88,6 +95,7 @@ term :: AST = tuple / "(" expr ")" / "[" listseq "]" + / ifcond / doblock / stringlit { StrConst $1 } / integer { IntConst $1 }