| # Note: The Term and Factor rules are right recursive. They are actually |
| # supposed to be left recursive, but we don't support that yet. |
| Start : Expr !.; |
| Expr : Term; |
| Term : $Add(Factor PLUS Term) |
| | $Sub(Factor MINUS Term) |
| | Factor; |
| Factor : $Mul(Primary TIMES Factor) |
| | $Div(Primary SLASH Factor) |
| | Primary; |
| Primary : $Ident(ID) |
| | $Integer(INT) |
| | OPEN Expr CLOSE; |
| PLUS : "+" Spacing; |
| MINUS : "-" Spacing; |
| TIMES : "*" Spacing; |
| SLASH : "/" Spacing; |
| OPEN : "(" Spacing; |
| CLOSE : ")" Spacing; |
| ID : $([a-zA-Z_] [a-zA-Z_0-9]*) Spacing; |
| INT : $([1-9] [0-9]*) Spacing; |
| Spacing : $((" " | "\t" | "\r" | "\n")*); |