#!/usr/bin/env perl
my
(
$parser
) = Regexp::Parsertron -> new;
my
(
@test
) =
(
{
item
=> 1,
expected
=>
''
,
re
=>
qr/(A(*COMMIT)|B)(A|B)D/
,
},
{
item
=> 2,
expected
=>
''
,
re
=>
qr/(A|B)(A(*COMMIT)|B)D/
,
},
{
item
=> 3,
expected
=>
''
,
re
=>
qr/(a(*COMMIT)b){0}a(?1)|aac/
,
},
{
item
=> 4,
expected
=>
''
,
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)
{
$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"
;
}
$parser
->
reset
;
}