%incremental lexer 'Try a valid expression like "a = b*2": ' %whites /([ \t]+)/
%token NUM =/([0-9]+(?:\.[0-9]+)?)/
%token VAR =/([A-Za-z][A-Za-z0-9_]*)/
%right '='
%left '-' '+'
%left '*' '/'
%left NEG
%%
input:
| input line
;
line:
'\n'
| exp '\n'
| error '\n'
;
exp:
NUM
| VAR
| VAR '=' exp
| exp '+' exp
| exp '-' exp
| exp '*' exp
| exp '/' exp
| '-' exp %prec NEG
| '(' exp ')' /* Let us simplify a bit the tree */
;
%%