2010/11/12 Peter Cashin <cashin.pe...@gmail.com>

> Hi Alex:
>
> I think a PEG grammar should not match this as (a|b)+ since the first
> choice excludes the second so a prefix a+ will be matched, and stop when
> seeing a b. I just tried in out on my implementation of left recursion and
> it acted as I expected.
>
>
That seems rather unintuitive to me ... For the grammar I provided, if you
consider the input "aba", you wouldn't match the 'b' in it, since the first
match of an 'a' restricts the ordered choice ?
Then what about "bab" ? Should it be parsed completely ? 'B' being the
second choice for rule S, What should the parser do when he entered a B
evaluation ? restricts the choice to S <- B only, or still allow for S <- A
/ B ?



> I would be keen to talk to you about examples of strange behaviour.  I have
> some too, including a tricky grammar example that was contributed to an
> earlier discussion by another PEG member (sorry I forget who, but I will dig
> it out).
>

I would be interested in seeing this example of tricky grammar. My main goal
here is to understand what vision you guys have about left-recursion and the
ordered choice thing.

>
>

>
Cheers,
> Peter.
>
>
>
> On Fri, Nov 12, 2010 at 12:33 PM, Repain Alex <alex.rep...@gmail.com>wrote:
>
>> Hi PEG list,
>>
>> As an intern, I worked this summer in a japanese laboratory, on
>> left-recursion support for packrat parsers. One of the questions we had a
>> hard time dealing with was the following :
>>
>> Since the original definition of PEG grammars doesn't take in account the
>> grammars with left-recursive rules (directly or indirectly), what is the
>> behaviour we expect from a PEG parser, when dealing with those grammars ?
>>
>> The first and intuitive solution is to avoid these rules, but a lot of
>> work has been produced on the subject, including Wrath *et al.*'s paper*[1]
>> * (which might be the most acknowledged), and today it seems we want to
>> be able to handle left-recursive grammars. But this can reveal itself quite
>> tricky. Take for instance the following grammar :
>>
>> S <- A | B
>> A <- S a | a
>> B <- S b | b
>>
>> which is an indirectly left-recursive grammar. In a CFG context, this
>> grammar would represent the langage (a|b)+ . What about this in the PEG
>> context ?
>>
>> My guess is that, despites the fact that PEGs impose the concept of
>> ordered choice, the expected behaviour of this grammar is to recognize the
>> very same (a|b)+ langage, through a PEG parser - say for instance a packrat
>> parser. Still, I would like to be sure of it, and if anybody has a CLEAR
>> idea of what SHOULD happen with a correct support for left-recursion, I'm
>> eager to hear about it. Is there only a real convention for a correct
>> behaviour ?
>>
>> My actual situation is the following : during my internship this summer, I
>> started to doubt about the capacity for Wrath et al.'s algorithm to handle
>> every type of left-recursive grammars. For instance, the above grammar, when
>> passed to a Packrat parser with Wrath et al.'s  enhancement, doesn't
>> recognize (a|b)+, but only a subset of this langage. That is not the
>> behaviour I expected, and thus I started working on a new algorithm able to
>> take into account complex left-recursion cases. Yet, if my vision of how a
>> parser behaves "correctly" is altered in some way, my work here could be
>> just good for the trash bin.
>>
>> Thanks for your help.
>> Alex
>>
>> P.S. : if someone is interested in my work, or in examples of strange
>> behaviour with Wrath et al.'s, I can provide them, one-to-one (to avoid
>> attached files on the mailing lists).
>>
>> *[1]* *Packrat Parsers Can Support Left Recursion*, Alessandro Warth,
>> James R. Douglass, and Todd Millstein (2008)
>>
>>
>> _______________________________________________
>> PEG mailing list
>> PEG@lists.csail.mit.edu
>> https://lists.csail.mit.edu/mailman/listinfo/peg
>>
>>
>
_______________________________________________
PEG mailing list
PEG@lists.csail.mit.edu
https://lists.csail.mit.edu/mailman/listinfo/peg

Reply via email to