Damian Conway wrote:
>     rule expr1 {
>         <term> { m:cont/@operators/ or fail } <term>
>     }
> 
> Backtracking would just step back over the rule as if it were atomic
> (or followed by a colon).

Ok, thanks. (The "followed by a colon" is just to explain the behavior,
right? It's illegal to follow a code block with a colon, isn't it?)

After talking to Aaron yesterday, I was wondering if sub-rules are
meant to backtrack at all.

Does the following example backtrack into <foo>?

   rule foo { b+ }
   rule bar { a <foo> b }

If it doesn't, I think we're restricted to pure LL(1) grammars.
That would suck. Apoc 5 is so close to ANTLR or precc that it would
be a shame not to be LL(k).

I've been playing around with converting regex operators into
Perl 6 attribute grammars and they look good. If backtracking into
rules doesn't work though, these conversions don't work.

   a ?        rule x { a | <null> }
   a *        rule x { a <x> | <null> }
   a +        rule x($i=0) { a <x($i+1)> | <($i>0)> <null> }
   a {n,m}    rule x($i=0) { <($i<$m)> a <x($i+1)> | <($i>=$n)> <null> }

The non-greedy versions just reverse the productions, so for example

   a *?       rule x { <null> | a <x> }

- Ken

Reply via email to