The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# File PostfixWithActions.eyp
%right  '='
%left   '-' '+'
%left   '*' '/'
%left   NEG

%token NUM = /([0-9]+(?:\.[0-9]+)?)/
%token VAR = /([A-Za-z][A-Za-z0-9_]*)/

%%
line: %name EXP
      $exp  { print "$exp\n" }
;

exp:        %name OPERAND:NUM
            $NUM  
                { $NUM }            
        |   %name OPERAND:VAR
            $VAR  
                { $VAR }            
        |   %name OP:ASSIGN  
              VAR.left '='exp.right         
                { 
                  # & stands for 'address of'
                  "$_[3] &$_[1] ASSIGN"; 
                }
        |   %name OP:PLUS    
              exp.left '+'exp.right         
                { "$_[1] $_[3] PLUS"; }
        |   %name OP:MINUS   
              exp.left '-'exp.right        
                { "$_[1] $_[3] MINUS"; }
        |   %name OP:TIMES   
              exp.left '*'exp.right       
                { "$_[1] $_[3] TIMES"; }
        |   %name OP:DIV    
              exp.left '/'exp.right      
                { "$_[1] $_[3] DIV"; }
        |   %name OP:NEG '-' $exp %prec NEG 
                { "$exp NEG" }
        |   '(' $exp ')' 
                { $exp }      
;

%%