Oups, duplicate: https://lists.csail.mit.edu/pipermail/peg/2010-November/000319.html You may remove my thread.
2018-03-26 8:42 GMT+02:00 Johan Thiborg-Ericson < johan.thiborg.eric...@gmail.com>: > Hello everyone, > > As you know, one of the greatest benefits of PEGs over CFGs is that the > former is deterministic. This means that even if two alternatives could > recognize the same string (or even the same language), one can rely on that > the parser will always choose the alternative you have specified first. > > start <- A B / C > A <- a > B <- b > C <- ab > > will always return an AST of a sequence of an A and a B node, never a C > node with the value "ab". > > There are a number of algorithms that extends PEGs to support left > recursion, but do they agree on how ordered choice should be interpreted if > one of the alternatives is left recursive? The situation I am thinking of: > > A <- A a / a A / empty > > While the first and second alternative describe the same language, a > sequence of zero or more a:s, we would expect it to return a parse tree > with left associativity, that is > > (((...((a)a)...)a)a) > > and not > > (a(a(...(a(a))...))) > > as suggested by the second alternative, since intiutively, a PEG should > prefer the first alternative of an ordered choice, even if the first choice > is defined in a left recursive way. > > However, packrat parsers implementing left recursion through "growing a > seed parse", in the style of Warth et. al.:s algorithm, would skip the left > recursive first choice in wait for a seed parse. Then the right recursive > second alternative would consume all the a:s, skipping the left recursive > case at each position. On the way back up the stack, each left > recursive case would be tried, parsing all the a:s as a seed parse and > failing to parse one more, getting a memoized value of equal length for the > second alternative. It won't be reparsed since it is only part of left > recursive definitions at later positions. And then empty will be ignored > since it consumes less positions. > > So all left recursions will fail, since their seed parse, the right > recursion, have already consumed all the a:s, leaving no trailing a for the > left recursive alternative to succeed on. That way we end up with an > unintuitive right-associative AST, although the left recursive alternative > was clearly the prioritized option. > > Clearly, this example would not cause much trouble in practice, but are > there any languages that would? > Is there any algorithm that "solves" this situation? > Is there any research regarding the interpretation of ordered choice in > PEGs with left recursive definitions? > > Sincerely, Johan Thiborg-Ericson > > P. S. > I'm new in this mailing list and to mailing lists as a concept. If I am > doing anything wrong, please tell me :) > D. S. >
_______________________________________________ PEG mailing list PEG@lists.csail.mit.edu https://lists.csail.mit.edu/mailman/listinfo/peg