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(";", @$_) . ")";
    }.