#%semantic token '*' '='
%token NUM = /([0-9]+(?:\.[0-9]+)?)/
%token PRINT = /print\b/
%token VAR = /([A-Za-z_][A-Za-z0-9_]*)/
%right '='
%left '-' '+'
%left '*' '/'
%left NEG
#%tree
%tree bypass
%%
line:
sts <%name EXPS + ';'>
;
sts:
%name PRINT
PRINT leftvalue
| exp
;
exp:
%name NUM
NUM
| %name VAR
VAR
| %name ASSIGN
leftvalue '=' exp
| %name PLUS
exp '+' exp
| %name MINUS
exp '-' exp
| %name TIMES
exp '*' exp
| %name DIV
exp '/' exp
| %no bypass NEG
#| %name NEG
'-' exp %prec NEG
| '(' exp ')'
;
leftvalue : %name VAR VAR
;
%%