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


This script here:

# BEGIN SCRIPT
my grammar PgTokenizer {
     token double_quote_normal { <-[\\"]>+ }
     token double_quote_escape { [\\ . ]+ }
     token double_quote {
         \"
         [
             | <.double_quote_normal>
             | <.double_quote_escape>
         ]*
         \"
     }
     token single_quote_normal { <-['\\]>+ }
     token single_quote_escape { [ \'\' || \\ . ]+ }
     token single_quote {
         \'
         [
             | <.single_quote_normal>
             | <.single_quote_escape>
         ]*
         \'
     }
     token placeholder { '?' }
     token normal { <-[?"']>+ }

     token TOP {
         ^
         (
             | <normal>
             | <placeholder>
             | <single_quote>
             | <double_quote>
         )*
         $
     }
}

say PgTokenizer.parse(q['a\.b''cd?', "\"?", ?])
# END SCRIPT

use to match successfully (and presumably did with 2015.06, otherwise 
we'd have had rakudo star test failures), but doesn't match anymore with 
rakudo 2015.07.

If one changes the || to | in single_quote_escape, it matches again.

I think this is a bug, because the two alternatives are mutually 
exclusive, and thus | vs || shouldn't matter.

Reply via email to