%{ %} /* Tokens and types */ %token INT %token IDENT %token EOF ADD SUB MUL EQUAL LPAREN RPAREN /* add precedence directives */ %left ADD SUB /* lowest precedence */ %left MUL /* higher precedence */ %start start %type expr %type start %% start: | expr EOF { $1 } expr: | IDENT { () } | INT { () } | expr ADD expr { () } | expr SUB expr { () } | expr MUL expr { () } | LPAREN expr RPAREN { () }