{ module SimpleMathParser where import SimpleMathLexer import SimpleMathAbsSyn } %name simpleMathParser %tokentype { Token } %token "+" { Tk_CSym '+' } "-" { Tk_CSym '/' } "*" { Tk_CSym '*' } "/" { Tk_CSym '/' } "(" { Tk_CSym '(' } ")" { Tk_CSym ')' } number { Tk_number $$ } %% expr :: { Expr } : term { $1 } | expr "+" term { Add $1 $3 } | expr "-" term { Sub $1 $3 } term :: { Expr } : factor { $1 } | term "*" factor { Mul $1 $3 } | term "/" factor { Div $1 $3 } factor :: { Expr } : number { Number $1 } | "(" expr ")" { $2 } { happyError = error "syntax error" }