[antlr-interest] non-LL(*) error in list rule

Chris Rebert cvrebert at gmail.com
Tue Jul 1 19:29:34 PDT 2008


Dear John,

Thanks a million!

Hoisting the emptyness choice up into the parent rules appears to have
solved the problem!
If only this had been in the ANTLR book...

Anyway, thanks again.

- Chris

On Tue, Jul 1, 2008 at 7:16 PM, John B. Brodie <jbb at acm.org> wrote:
> Chris Rebert wrote:
>>I have a grammar and am getting an error about the rule 'exprlist'
>>being non-LL(*), even after turning on backtracking as suggested by
>>the error:
>>
>>exprlist options {backtrack=true;}: es+=expr? (',' es+=expr)*  -> es;
>>list: '['! exprlist ']'!;
>>
>>And suffice it to say that the rule for 'expr' includes some rules
>>like 'list' as alternatives.
>>...snipped...
>>How do I go about fixing this grammar?
>
> It is hard to say without seeing the entire grammar.
>
> exprList can recognize the empty string (because of the ? on the first expr
> reference).
>
> rules which can match the empty string are always, in my experience,
> problematic.  I always try to hoist the emptyness choice up into parents.
>
> I suspect that somewhere in your grammar there is an instance of exprList
> that is followed by some other possibly empty element which causes an
> ambiguity regarding which empty element is supposed to be matched.
>
>
>
> Or Perhaps Something Else Is Wrong.
>
>
>
> anyway, try to find a way to not have any rules that match the empty string.
>
>
>
> sorry for not being really very helpful.  perhaps you can post a *MINIMAL*
> yet *COMPLETE* grammar that exhibits this same issue for you.  and then we
> can go from there?
>
>   -jbb
>


More information about the antlr-interest mailing list