-- ParserExpr.y -- -- Turning this file into ParserExpr.hs: -- happy ParserExpr.y -i -- The above also creates an ParserExpr.info file, which is -- useful for debugging. -- -- To generate a parser that prints debugging information to stderr -- use the following command: -- happy ParserExpr.y -i -a -d { module ParserExpr where import LexerExpr } %name parser %tokentype { Token } %error { parseError } %token '+' { TokenPlus } '*' { TokenMult } '-' { TokenMinus } and { TokenAnd } '!' { TokenNot } int { TokenNUM $$ } %left '+' '-' %left '*' %left NEG %% Expr : Expr '+' Expr { Plus $1 $3 } | Expr '*' Expr { Mult $1 $3 } | Expr '-' Expr { Minus $1 $3 } | '-' Expr %prec NEG { Neg $2 } | int { Num $1 } { data AST = Plus AST AST | Mult AST AST | Minus AST AST | Neg AST | Num Int deriving Show parseError :: [Token] -> a parseError _ = error "Parse error" }