From e9f4be39f81a643b97a7cf91139dc5a0084d2375 Mon Sep 17 00:00:00 2001 From: darkf Date: Fri, 1 Nov 2013 19:10:02 -0700 Subject: [PATCH] parser2: add identifiers, unit calls --- parser2.hs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/parser2.hs b/parser2.hs index 9f517cf..052bab6 100644 --- a/parser2.hs +++ b/parser2.hs @@ -4,10 +4,17 @@ import Text.Peggy import AST [peggy| -top :: AST = expr !. +top :: [AST] = statements !. + +statements :: [AST] + = statement+ + +statement :: AST + = expr "." expr :: AST - = expr "+" fact { Add $1 $2 } + = expr "(" ")" { Call $1 UnitConst } + / expr "+" fact { Add $1 $2 } / expr "-" fact { Sub $1 $2 } / fact @@ -18,10 +25,14 @@ fact :: AST term :: AST = "(" expr ")" - / number + / number { IntConst $1 } + / identifier { Var $1 } -number ::: AST - = [1-9] [0-9]* { IntConst $ read ($1 : $2) } +identifier ::: String + = [a-zA-Z_] [a-zA-Z0-9_'?!]* { $1 : $2 } + +number ::: Integer + = [1-9] [0-9]* { read ($1 : $2) } |] main :: IO ()