[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