%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 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 '-' exp %prec NEG | '(' exp ')' ; leftvalue: %name VAR VAR ; %%