-- 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 { $1 + $3 } | Expr '*' Expr { $1 * $3 } | Expr '-' Expr { $1 - $3 } | '-' Expr %prec NEG { - $2 } | int { $1 } { parseError :: [Token] -> a parseError _ = error "Parse error" }