parser2: add identifiers, unit calls
This commit is contained in:
parent
bfceb2adda
commit
e9f4be39f8
21
parser2.hs
21
parser2.hs
|
@ -4,10 +4,17 @@ import Text.Peggy
|
||||||
import AST
|
import AST
|
||||||
|
|
||||||
[peggy|
|
[peggy|
|
||||||
top :: AST = expr !.
|
top :: [AST] = statements !.
|
||||||
|
|
||||||
|
statements :: [AST]
|
||||||
|
= statement+
|
||||||
|
|
||||||
|
statement :: AST
|
||||||
|
= expr "."
|
||||||
|
|
||||||
expr :: AST
|
expr :: AST
|
||||||
= expr "+" fact { Add $1 $2 }
|
= expr "(" ")" { Call $1 UnitConst }
|
||||||
|
/ expr "+" fact { Add $1 $2 }
|
||||||
/ expr "-" fact { Sub $1 $2 }
|
/ expr "-" fact { Sub $1 $2 }
|
||||||
/ fact
|
/ fact
|
||||||
|
|
||||||
|
@ -18,10 +25,14 @@ fact :: AST
|
||||||
|
|
||||||
term :: AST
|
term :: AST
|
||||||
= "(" expr ")"
|
= "(" expr ")"
|
||||||
/ number
|
/ number { IntConst $1 }
|
||||||
|
/ identifier { Var $1 }
|
||||||
|
|
||||||
number ::: AST
|
identifier ::: String
|
||||||
= [1-9] [0-9]* { IntConst $ read ($1 : $2) }
|
= [a-zA-Z_] [a-zA-Z0-9_'?!]* { $1 : $2 }
|
||||||
|
|
||||||
|
number ::: Integer
|
||||||
|
= [1-9] [0-9]* { read ($1 : $2) }
|
||||||
|]
|
|]
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
|
|
Loading…
Reference in New Issue