%derive<Show> Token
%derive<Show> ParseError
%position<Int>
%start start
%token EOF
%token<Int> NUMBER
%token PLUS "+"
%token MINUS "-"
%token STAR "*"
%token SLASH "/"
%token LPAREN "("
%token RPAREN ")"
%type<Int> start
%type<Int> add
%type<Int> factor
%type<Int> term
%%
start
: add EOF { $1 }
;
add
: lhs=add "+" rhs=factor { lhs + rhs }
| lhs=add "-" rhs=factor { lhs - rhs }
| factor { $1 }
;
factor