#%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 ; %%