.blank = [" \t\f\b\v\r\n"] .number :: Int = ['0'..'9']+ expr :: Expr = .. ::= term | Add.. ::= expr '+' term | Sub.. ::= expr '-' term ; term = .. ::= factor | Mul.. ::= term '*' factor | Div.. ::= term '/' factor ; factor = Number.. ::= number | .. ::= '(' expr ')'