> 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. :) )

The same as 'S <- f'.


> 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?

The same as 'S <- a'.

> 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?

The same as 'S <- &a'.

> 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?

It consumes just 3 a's.
The general behavior is like this:
  * If the input has 2n a's, then 2n-1 a's are matched.
  * If the input has 2n+1 a's, then 2n+1 a's are matched.

Sérgio

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

Reply via email to