add simple Peggy expression parser
This commit is contained in:
parent
582895005a
commit
bfceb2adda
|
@ -0,0 +1,28 @@
|
|||
{-# Language TemplateHaskell, QuasiQuotes, FlexibleContexts #-}
|
||||
|
||||
import Text.Peggy
|
||||
import AST
|
||||
|
||||
[peggy|
|
||||
top :: AST = expr !.
|
||||
|
||||
expr :: AST
|
||||
= expr "+" fact { Add $1 $2 }
|
||||
/ expr "-" fact { Sub $1 $2 }
|
||||
/ fact
|
||||
|
||||
fact :: AST
|
||||
= fact "*" term { Mul $1 $2 }
|
||||
/ fact "/" term { Div $1 $2 }
|
||||
/ term
|
||||
|
||||
term :: AST
|
||||
= "(" expr ")"
|
||||
/ number
|
||||
|
||||
number ::: AST
|
||||
= [1-9] [0-9]* { IntConst $ read ($1 : $2) }
|
||||
|]
|
||||
|
||||
main :: IO ()
|
||||
main = print . parseString top "<stdin>" =<< getContents
|
Loading…
Reference in New Issue