%{
=head1 SYNOPSIS

Compile the grammar and tree transformations first:

     $ eyapp Rule5
     $ treereg Shift

Then execute it with:

     $ ./useruleandshift.pl

Try input: 

     a = b * 8

=cut
%}

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

%right  '='
%left   '-' '+'
%left   '*' '/'
%left   NEG
%tree

%%
line: exp { $_[1] } 
;

exp:        %name NUM          NUM 
        |   %name VAR          VAR 
        |   %name ASSIGN       VAR '=' exp 
        |   %name PLUS         exp '+' exp 
        |   %name MINUS        exp '-' exp 
        |   %name TIMES        exp '*' exp 
        |   %name DIV          exp '/' exp 
        |   %name UMINUS       '-' exp %prec NEG 
        |   '(' exp ')'                           { $_[2] } 
;

%%