[antlr-interest] Re: The eternal question: Why is this ANTLR grammar ambiguous??

lgcraymer lgc at mail1.jpl.nasa.gov
Fri Dec 3 13:04:15 PST 2004



There is a rule or subrule option--check the manual or grep through
the examples for "Ambig" (that should catch the full name).

--Loring

--- In antlr-interest at yahoogroups.com, Harald M. Müller
<harald.m.mueller at b...> wrote:
> 
> Now that was a quick answer! - thx.
> 
> Again in my "warning phobia": Is it possible to suppress this 
> concrete warning? - I actually try to avoid ambiguities in grammars, 
> because sometimes I get bitten by cases where actually the "wrong" 
> alternative is selected.
> 
> (I admit that I'm not really good with in-rule options ... so if the 
> answer is in the doc or faq, forgive me).
> 
> Thx
> Harald M.
> 
> --- In antlr-interest at yahoogroups.com, "lgcraymer" <lgc at m...> wrote:
> > 
> > --- In antlr-interest at yahoogroups.com, Harald M. Müller
> > <harald.m.mueller at b...> wrote:
> > > 
> > > 
> > > [I have posted this to the pccts newsgroup; and on the antlr 
> forum 
> > > on jguru - I'm sorry if this is "against the rules", but thos 
> two 
> > > forums seem to have quite low answer rates, and I have found 
> this 
> > > mailing list only now]
> > > 
> > > I have already written a few ANTLR lexers and parsers (for 
> > > productive systems, with sometimes weird grammars) - but the 
> > > following puzzles me: 
> > > Why does the following simple grammar create an ambiguous 
> warning?: 
> > > 
> > > 
> > > class MyLexer extends Lexer;
> > > 
> > > options {
> > > 	charVocabulary = '\3'..'\377';
> > > 	k=3;
> > > 	caseSensitive=false;
> > > }
> > > 
> > > COMMENT_COMMAND
> > >   : '-' '-' '$'
> > >   ;
> > >   
> > > SQL_STATEMENT
> > >   : ( SYMBOL )+ ';'
> > >   ;
> > > 
> > > protected SYMBOL
> > >   : ('-' (~ '-')) => '-'   //1
> > >   | 'a'
> > >   | '"' (~ '"')* '"'       //2
> > >   ;
> > > 
> > > When I remove either of //1 or //2, the ambiguity goes away. 
> > > When I replace //2 with 
> > > 
> > >   | '"' (~ ('"'|'$'))* '"'
> > > 
> > > - i.e., I also exclude $ inside the "string" -, the ambiguity 
> also 
> > > goes away. 
> > > But why would a $ after(!!) a " lead to an ambiguity????? 
> > 
> > This is an approximate LLk issue--there isn't really an ambiguity, 
> but
> > ANTLR sees  --$ as matchable by SYMBOL; SYMBOL is matched as ( 'a' 
> | (
> > ('-' | '"') (~'-' | ~'"') ...
> > 
> > If you take a look at the generated code, it should do the right
> > thing.  Fortunately, Ter is doing full LLk for ANTLR 3 so we don't
> > have to be confused by this sort of thing.
> > 
> > --Loring
> > 
> > > 
> > > Thanks for any help! 
> > > 
> > > Harald M.





 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/antlr-interest/

<*> To unsubscribe from this group, send an email to:
    antlr-interest-unsubscribe at yahoogroups.com

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 





More information about the antlr-interest mailing list