[antlr-interest] Two More Bugs in ANTLRv4
Jan Finis
finis at in.tum.de
Wed Feb 29 10:06:31 PST 2012
Of course the grammar is ambiguous, but there are conventions to resolve
this: Without specification, any operation is left-associative, so x x x
should parse as ((x x) x). I see that there is no way of specifying
right associativity in this case, but this is rather a problem of the
grammar specification language than of the top down parser generator.
Your suggestion from github:
|exprs
: expr+
;
expr
: 'x'
;
|
works for this example, but this is only a small example for showing the
issue. In the real application, there are more left recursive
alternatives in expr. Thus, your suggestion would produce a mutual left
recursion between exprs and expr. For example, consider this grammar for
matching regular expressions
expr :
| ID
| expr ('?' | '*' | '+')
| expr expr
| expr '|' expr
Of course, this grammar can be transformed into one that has no double
left recursion, but the resulting grammar would look a lot more ugly.
Regards,
Jan
On 02/29/2012 06:43 PM, Sam Harwell wrote:
> The ambiguity in these rules lies in the shape of the parse tree as opposed
> to the actual set of inputs which can be matched. I gave a more detailed
> explanation and possible solutions as comments on the issue at github:
>
> https://github.com/antlr/antlr4/issues/26
>
> --
> Sam Harwell
> Owner, Lead Developer
> http://tunnelvisionlabs.com
>
>
> -----Original Message-----
> From: Jan Finis [mailto:finis at in.tum.de]
> Sent: Wednesday, February 29, 2012 11:13 AM
> To: Ron Burk
> Cc: antlr-interest at antlr.org
> Subject: Re: [antlr-interest] Two More Bugs in ANTLRv4
>
> The funny thing is that Honey Badger DID support this kind of grammar (see
> my earlier mail with a running example). Maybe due to a bug, but that shows
> that it must be somehow possible in a top-down manner.
>
>
More information about the antlr-interest
mailing list