- or download this
expr : bin_op_2 { $item[1] }
...
bin_op_1 : bin_op_1 /[*\\\/%]/ term { [ @item[2, 1, 3] ] }
| term { $item[1] }
- or download this
bin_op_2 : bin_op_1 bin_op_2_(s?)
{ treeify($item[1], map { @$_ } @{$item[2]}); }
...
bin_op_2_ : /[+-]/ bin_op_1 { [ $item[1], $item[2] ] }
bin_op_1_ : /[*\\\/%]/ term { [ $item[1], $item[2] ] }
- or download this
sub treeify {
my $t = shift;
...
while @_;
return $t;
}
- or download this
# Lowest precedence.
bin_op_2 : <leftop: bin_op_1 SUM bin_op_1 >
...
SUM : '+' | '-'
PROD : '*' | '/' | '\\' | '%'
- or download this
use strict;
use warnings;
...
[ $_ ]));
print("\n");
}
- or download this
sub treeify_r {
my $t = pop;
...
{ treeify_r(@{$item[1]}); }
ASSIGN : '='