# New Ticket Created by  Mitchell N Charity 
# Please include the string:  [perl #36606]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/rt3/Ticket/Display.html?id=36606 >


PGE is currently passing all tests, but failing to run a "large" pugs 
grammar (one for p6 regexps).  So I transliterated part of the grammar 
into a (failing) test.  Attached.  The test can grow into a full regexp 
description, and serves as a way of flagging any apparent pge problems 
encountered along the way.

Thanks for all your work,
Mitchell Charity

diff -urN ./t/p6rules/rx_grammar.t ../deleteme1/t/p6rules/rx_grammar.t
--- ./t/p6rules/rx_grammar.t	1969-12-31 19:00:00.000000000 -0500
+++ ../deleteme1/t/p6rules/rx_grammar.t	2005-07-20 13:01:04.000000000 -0400
@@ -0,0 +1,80 @@
+use strict;
+use warnings;
+use Parrot::Test tests => 1;
+use Parrot::Test::PGE;
+
+=pod
+
+This test is intended to verify that PGE can run a grammar for perl6
+regular expressions.
+
+PGE will never be able to run all expressions which match the grammar.
+PGE should simply be able to run the grammar itself.
+
+Feel free to rephrase the grammar to make it easier for PGE to run.
+
+The grammar is a work in progress, and is currently an incomplete,
+incorrect, and no doubt buggy description of perl6 regexps.
+
+
+Currently the grammar is failing to match "a".  If foo is added to the
+beginning of alternation and repetition, then it works.  This appears
+to be a backtracking problem.
+
+=cut
+
+my @rx_grammar =
+    (
+     [ name => '<ident>'],
+     [ pattern => '<term>+' ],
+     [ term => '<alternation> | <non_alternation>'],
+#     [ alternation => 'foo <non_alternation> \| <pattern>'],
+     [ alternation => '<non_alternation> \| <pattern>'],
+     [ non_alternation => '<repetition> | <alias> | <simple_term>'],
+#     [ repetition => 'foo <simple_term> <quantifier>'],
+     [ repetition => '<simple_term> <quantifier>'],
+     [ quantifier => '<[\?\*\+]>(\??) | \*\*{<[\d\.]>+}(\??)'],
+     [ simple_term => '<null_term>|<assertion>|<subrule>|<subpattern>|<noncapturing_group>|<literal>|<character>'],
+     [ null_term => '\< null \>'],
+     [ assertion => '<anchor>|<lookahead>|<lookbehind>'],
+     [ anchor => '<anchor_bos>|<anchor_eos>|<anchor_bol>|<anchor_eol>|<word_anchor>'],
+     [ anchor_bos => '\^'],
+     [ anchor_eos => '\$'],
+     [ anchor_bol => '\^\^'],
+     [ anchor_eol => '\$\$'],
+     [ lookahead  => '\< (!?) before <ws> <pattern> \>'],
+     [ lookbehind => '\< (!?) after  <ws> <pattern> \>'],
+     [ word_anchor => '\\\\b'],
+     [ subrule => '\< (\??) <name> \>'],
+     [ subpattern => '\( <pattern> \)'],
+     [ noncapturing_group => '\[ <pattern> \]'],
+     [ literal => '\<\' [ <-[\\\\\']> | \\\\ . ]* \'\>'],
+     [ alias => '<named_scalar_alias>|<numbered_scalar_alias>|<array_alias>|<hash_alias>|<external_scalar_alias>|<external_array_alias>|<external_hash_alias>'],
+     [ named_scalar_alias    => ' \$\< <name> \> \:\= <construct> '],
+     [ array_alias           => ' [EMAIL PROTECTED]< <name> \> \:\= <construct> '],
+     [ hash_alias            => ' \%\< <name> \> \:\= <construct> '],
+     [ numbered_scalar_alias => ' \$  <number>   \:\= <construct> '],
+     [ number => '\d+'],
+     [ external_scalar_alias => ' \$<name>       \:\= <construct> '],
+     [ external_array_alias  => ' \@<name>       \:\= <construct> '],
+     [ external_hash_alias   => ' \%<name>       \:\= <construct> '],
+     [ construct => '<subrule>|<subpattern>|<noncapturing_group>|<quantified_construct>'],
+     [ quantified_construct => ' <construct> <quantifier> '],
+     [ character => '<character_class>|<escape_sequence>|<simple_character>'],
+     [ character_class => '<a_dot>|<abbreviated_class>|<explicit_class>'],
+     [ a_dot => '\.'],
+     [ abbreviated_class => '\\\\ <[dswDSWhvHV]>'],
+     [ explicit_class => '\< <character_set>+ \>'],
+     [ character_set => '(\+|-)? \[ [ <-[\\\\\]]> | \\\\ . ]* \]'],
+     [ escape_sequence => '\\\\ <[tnrfeTNRFE]>'],
+     [ simple_character => '<-[\{\}\[\]\(\)\^\$\.\|\*\+\?\\\\]>'],
+    );
+
+p6rule_is  ("a",
+    [
+     @rx_grammar,
+     [ _MASTER => '^<pattern>$' ],
+    ],
+    "matched 'a'");
+
+# Don't forget to change the number of tests :-)

Reply via email to