# File examples/eyapplanguageref/Tree.eyp
# Compile it with:  eyapp -C Tree.eyp
# Execution:        ./Tree.pm -c 'a=2*b'
%{
use Data::Dumper;
$Data::Dumper::Indent = 1;
%}

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

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

%defaultaction {  goto &Parse::Eyapp::Driver::YYBuildAST }

%%
line: exp  { print Dumper($_[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 MINUS    '-' exp %prec NEG 
        |   %name PAREN   '(' exp ')' 
;

%%