Ah woops. I thought I was testing it without grammar tracer as well. Thanks
for clearing that up for me :)

On Tue, Apr 4, 2017 at 10:27 PM Zoffix Znet via RT <
perl6-bugs-follo...@perl.org> wrote:

> On Sun, 02 Apr 2017 19:19:11 -0700, lloyd.fo...@gmail.com wrote:
> > use Grammar::Tracer;
> > grammar G {
> >     token TOP { <first-fail> || <second-succeed> }
> >     token first-fail { <thing> '?' }
> >     token second-succeed { <thing> '!' }
> >     token thing { "foo" }
> > }
> > note G.parse("foo!")
> >
> > #grammar tracer output:
> >
> > TOP
> > |  first-fail
> > |  |  thing
> > |  |  * MATCH "foo"
> > |  * FAIL
> > |  second-succeed
> > |  |  thing
> > |  |  * MATCH "" # it actually matches it but it's an empty string...
> > |  * FAIL
> > * FAIL
> > Nil
> >
> > If you just create an identical second token and use that instead it
> works:
> >
> > grammar G {
> >     token TOP { <first-fail> || <second-succeed> }
> >     token first-fail { <thing> '?' }
> >     token second-succeed { <thing2> '!' }
> >     token thing { "foo" }
> >     token thing2 { "foo" }
> > }
> >
> > note G.parse("foo!")
> >
> > 「foo!」
> >  second-succeed => 「foo!」
> >   thing2 => 「foo」
>
>
> Moved to Grammar::Debugger's ticket queue[^1], since it matches just fine
> when the module isn't used.
> It has a related ticket about `.parse`ing twice.
>
> https://github.com/jnthn/grammar-debugger/issues/33
>

Reply via email to