[antlr-interest] Why is this ambiguous..

Peter Kooiman peter at crispu.com
Thu Apr 7 06:52:20 PDT 2011


Hi Sam 

> Edit: I misread the original email, but I'm still sending this because 
> it resolves the warning given on the rule y. 

;-) Yeah that much is clear, I also fully understand the crazyness of not left-factoring rule "start" into (y C?)+ EOF; 

Just was wondering why the warning on rule "start" as it stands below, I was expecting ANTLR to "auto-left-factor" with the prediction dfa and don´t quite understand why it does not on this occasion. 

Thanks 
Peter 

> Consider the input 'ba', starting with the rule start. It could parse as 
> (y y EOF), with the first y matching B without the A, and the second 
> matching just A. It could also parse as (y EOF), with the first y 
> matching B and the optional A. 

> If you mean for y to always include the A when present, you can use 
> a syntactic predicate, which forces it to choose the second 
> interpretation above: 

> y : B ((A) => A)? | A; 

> Sam 

-----Original Message----- 
From: antlr-interest-bounces at antlr.org 
[mailto:antlr-interest-bounces at antlr.org] On Behalf Of Peter Kooiman 
Sent: Thursday, April 07, 2011 7:50 AM 
To: antlr-interest at antlr.org 
Subject: [antlr-interest] Why is this ambiguous.. 

Hello, 

While working on a grammar I had something that boils down to 

grammar T; 
start: (y | y C)+ EOF; 
y: B (A)? | A; 

A : 'a'; 
B : 'b'; 
C : 'c'; 

This gives an expected warning on rule y, that's fine, ANTLR does the right 
thing and matches A greedily. 
However it also gives a warning on rule start: 

T.g:2:19: Decision can match input such as "B {EOF, B..A}" using multiple 
alternatives: 1, 2 
As a result, alternative(s) 2 were disabled for that input 

I quite understand the need to left factor this, I was just wondering why 
ANTLR gives this warning. It must be staring me in the face but I don't see 
it... 
How is this non-deterministic on input B EOF? Is ANTLR unable to see past 
rule y for some reason? 

Thanks 
Peter 


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