semantics are perl5. version is 0.207.4.
start symbol is E.
E: E, Op, E.
q{
my ($right_string, $right_value)
= ($_->[2] =~ /^(.*)==(.*)$/);
my ($left_string, $left_value)
= ($_->[0] =~ /^(.*)==(.*)$/);
my $op = $_->[1];
my $value;
if ($op eq "+") {
$value = $left_value + $right_value;
} elsif ($op eq "*") {
$value = $left_value * $right_value;
} elsif ($op eq "-") {
$value = $left_value - $right_value;
} else {
croak("Unknown op: $op");
}
"(" . $left_string . $op . $right_string . ")==" . $value;
}.
E: Number.
q{
my $v0 = pop @$_;
$v0 . "==" . $v0;
}.
Number matches qr/\d+/.
Op matches qr/[-+*]/.
the default action is q{
my $v_count = scalar @$_;
return "" if $v_count <= 0;
return $_->[0] if $v_count == 1;
"(" . join(";", @$_) . ")";
}.