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