Left recursion in PEGs indeed seems like an interesting can of worms.  For 
those interested, I'm wondering how a few example grammars behave under your 
preferred left-recursive parsing technique, and how you think they should 
behave.

First, a trivially evil left-recursive grammar:

S <- S

For example, does your parser detect and reject this somehow, or does it behave 
the same as 'S <- f'?  (I hope it doesn't result in an infinite loop at runtime 
anyway. :) )

Now a grammar that's weird, not necessarily evil, in a slightly more subtle way:

S <- S / a

Does this behave the same as 'S <- a', or do something else?  How should it 
behave?

Cranking up the evilness factor one notch with a mutually left-recursive 
grammar…

S <- T / a
T <- S / &a

Given the input string "a", does this behave the same as 'S <- a' (succeeding 
and consuming) or the same as 'S <- &a' (succeeding but consuming no input)?  
Do S and T behave the same way or differently?  Should they?

Now, another grammar that's not necessarily evil but strange in a slightly 
different way:

S <- Saa / a /

Given the input string 'aaaa', for example, does/should this grammar consume 
just 3 or all 4 a's, or does it do something else?  What should it do?

Cheers,
Bryan
_______________________________________________
PEG mailing list
PEG@lists.csail.mit.edu
https://lists.csail.mit.edu/mailman/listinfo/peg

Reply via email to