# 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 ')'
;
%%