[antlr-interest] How to fix the ambiguous grammar

Terence Parr parrt at cs.usfca.edu
Tue Jun 5 09:10:45 PDT 2012


Easiest thing to do is simply reorder those alternatives if you want 'a'  to match A B not A.
T
On Jun 4, 2012, at 10:18 PM, Jie Li wrote:

> Thanks Ter. Do you mean I should turn the backbracking off? If I can't, do
> you have any suggestion?
> 
> Jie
> 
> On Mon, Jun 4, 2012 at 9:57 PM, Terence Parr <parrt at cs.usfca.edu> wrote:
> 
>> It sounds like you have backtracking turned on and that whichever rule
>> calls 'a' has B following the reference to 'a'. When it can't figure out
>> what to do with an ambiguity it picks the 1st match.
>> Ter
>> On Jun 4, 2012, at 9:49 PM, Jie Li wrote:
>> 
>>> Hi all,
>>> 
>>> I'm new to antlr and struggling to fix the grammar like below:
>>> 
>>> a:   A
>>>   | A B ;
>>> 
>>> But this grammar doesn't support "A B" as it complains it expects the end
>>> character after "A". If I switch the order of this grammar, e.g. "A B"
>>> comes before "A", then it doesn't support "A" as it complains it expects
>>> "B" after "A".
>>> 
>>> Then I tried:
>>> 
>>> a:  A
>>>  | A {input.LT(1).getText().equals("B")}? B;
>>> 
>>> It does work for both rules now. But I wonder if there is some more
>> elegant
>>> way?
>>> 
>>> Thanks,
>>> Jie Li
>>> 
>>> List: http://www.antlr.org/mailman/listinfo/antlr-interest
>>> Unsubscribe:
>> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>> 
>> 
> 
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address



More information about the antlr-interest mailing list