#!/usr/bin/env perl # # See https://www.nntp.perl.org/group/perl.perl5.porters/2018/07/msg251463.html # and https://www.nntp.perl.org/group/perl.perl5.porters/2018/07/msg251492.html. use strict; use warnings; use Regexp::Parsertron; # ------------------------------------------------ my($parser) = Regexp::Parsertron -> new; my(@test) = ( { item => 1, expected => '', # This is a placeholder since I don't know the answer. re => qr/(A(*COMMIT)|B)(A|B)D/, }, { item => 2, expected => '', # This is a placeholder since I don't know the answer. re => qr/(A|B)(A(*COMMIT)|B)D/, }, { item => 3, expected => '', # This is a placeholder since I don't know the answer. re => qr/(a(*COMMIT)b){0}a(?1)|aac/, }, { item => 4, expected => '', # This is a placeholder since I don't know the answer. re => qr/(??{""})(a(*COMMIT)b){0}a(?1)|aac/, }, ); my($expected); my($got); my($message); my($result); for my $test (@test) { $result = $parser -> parse(re => $$test{re}, verbose => 1); if (! defined $result) { print "Parse is ambiguous. \n"; } elsif ($result == 0) # 0 is success. { $got = $parser -> as_string; $expected = $$test{expected}; $message = "$$test{item}: re: $$test{re}. got: $got"; $message .= ' (After calling append(...) )' if ($$test{item} == 12); print "got: $got. expected: $expected. message: $message. \n"; } else { print "Case $$test{item} failed to return 0 (== success) from parse(). \n"; } # Reset for next test. $parser -> reset; }