%token Num = /[0-9]+/ # foo %token Var = /[A-Za-z]+/ # bar %right '=' %left '-' '+' %left '*' '/' %{ use Data::Dumper; %} %% gram: lines { print Dumper($_[1])} ; lines: lines exp { push @{$_[1]}, $_[2]; return $_[1] } | exp { return [ $_[1]] } ; exp: exp '+' exp { return ['Plus', $_[1], $_[3]] } | exp '-' exp { return ['Minus', $_[1], $_[3]] } | exp '/' exp { return ['Slash', $_[1], $_[3]] } | exp '*' exp { return ['Star', $_[1], $_[3]] } | '(' exp ')' { return ['Parenthesis', $_[2]] } | Num { return ['Num', $_[1]] } | Var { return ['Var', $_[1]] } | Var '=' exp { return ['Atrib', $_[1], $_[3]]} ; %%