Acme-AlgebraicToRPN
view release on metacpan or search on metacpan
lib/Acme/AlgebraicToRPN.pm view on Meta::CPAN
if ($L =~ /^\w+$/ && $R =~ /$RE{balanced}{-parens=>'()'}/) {
#print "HERE $L\n";
push(@{$.stack}, $L);
}
}
if ($expr =~ /(\w+)($RE{balanced}{-parens=>'()'})(.*)/) {
my $op = $1;
my $p = $2;
my $r = $3;
my $core = substr($p, 1, length($p)-2);
if (defined $.userFunc && defined $.userFunc{$op}) {
# count # of commas in arg list
my $na = $core =~ tr/,/,/;
# bump by one
$na++;
# add # of aguments on
$core = qq($core,$na);
}
./_Eval($core);
push(@{$.stack}, $core)
t/01-test.t view on Meta::CPAN
print STDERR "Shouldn't parse due to 'boo' function, which we don't know\n";
ok(!defined($rpn->rpn('4*boo(a,3,55)')));
#print $rpn->rpn_as_string($expr), "\n";
sub test {
my ($expr, @desired) = @_;
print STDERR "rpn = $expr... ";
my @r = $rpn->rpn($expr);
#print Dumper(\@r);
my $same = $rpn->check(\@desired, @r);
print STDERR "Different lengths\n" unless @r == @desired;
print STDERR $same ? "Ok!\n" : "NOT Ok!\n";
print STDERR "Got: ", Dumper(\@r) unless $same;
print STDERR "Expected: ", Dumper(\@desired) unless $same;
ok($same);
}
( run in 0.764 second using v1.01-cache-2.11-cpan-65fba6d93b7 )