The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#%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
;
%%