pl@nereida:~/Lperltesting$ cat calc510withactions.pl #!/usr/local/lib/perl/5.10.1/bin//perl5.10.1 use v5.10; # Infix to postfix translator using 5.10 regexp # original grammar: # exp -> exp '-' digits # | digits # # Applying left-recursion elimination we have: # exp -> digits rest # rest -> '-' rest # | # empty # my @stack; my $regexp = qr{ (?&exp) (?(DEFINE) (? (?&digits) \s* (?&rest) ) (? \s* - (?&digits) \s* (?{ push @stack, '-' }) (?&rest) | # empty ) (? \s* (\d+) (?{ push @stack, $^N }) ) ) }xms; my $input = <>; chomp($input); if ($input =~ $regexp) { say "matches: $&\nStack=(@stack)"; } else { say "does not match"; }