[antlr-interest] Newbie: NoViableAltException

Buck, Robert rbuck at verisign.com
Tue Jul 24 16:55:03 PDT 2007


Oh, that's really bizzare. Regarding lexical rules, the manual states:

   "The rules are prioritized in the order specified in case an input
construct matches more than a single rule, with the first rule having
the highest priority". 

I don't recall lex/yacc working that way. Can this be changed, or should
I just forego the lexical rules section altogether and put all the
literals directly into the grammar?

It would seem perfectly reasonable to have identifiers be
distinguishable from literal values, where literal values can always be
infered by their context.

-Bob

> -----Original Message-----
> From: antlr-interest-bounces at antlr.org 
> [mailto:antlr-interest-bounces at antlr.org] On Behalf Of Buck, Robert
> Sent: Tuesday, July 24, 2007 7:51 PM
> To: Diehl, Matthew J; antlr-interest at antlr.org
> Subject: Re: [antlr-interest] Newbie: NoViableAltException
> 
> I still don't get it.
> 
> Don't the parser rules indicate what lexer rule to use? If 
> you have the
> following:
> 
> IDENT EQUALS (PCHAR)*
> 
> The IDENT lexer rule would not get called for any tokens to 
> the RHS of the EQUALS sign, right? I declared it only gets 
> called for the LHS.
> 
> The same with my grammar, IDENT is always to the left hand 
> side of an EQUALS and (PCHAR)* can only occur on the right hand side.
> 
> This was the way lex/yacc worked as far as I recall. Doesn't 
> ANTLR work that way too?
> 
> -Bob
> 
> 
> > -----Original Message-----
> > From: antlr-interest-bounces at antlr.org 
> > [mailto:antlr-interest-bounces at antlr.org] On Behalf Of 
> Diehl, Matthew 
> > J
> > Sent: Tuesday, July 24, 2007 7:28 PM
> > To: antlr-interest at antlr.org
> > Subject: Re: [antlr-interest] Newbie: NoViableAltException
> > 
> > > -----Original Message-----
> > > From: Buck, Robert [mailto:rbuck at verisign.com]
> > > Sent: Tuesday, July 24, 2007 4:02 PM
> > > To: Diehl, Matthew J; antlr-interest at antlr.org
> > > Subject: RE: [antlr-interest] Newbie: NoViableAltException
> > > 
> > > I have no clue what you just said below. So let me start from the 
> > > beginning...
> > > 
> > > All I want to do is define a simple recursive grammar for a
> > set-tuple
> > > syntax that has input streams like:
> > > 
> > > (tuple@{(attr1=value1),(attr2=value2)}={(nestedtuple1=value3),
> > > (nestedtup
> > > le2=value4)})
> > > 
> > What I was saying is that whenever there is more than one 
> PCHAR in a 
> > row, they become IDENTs (by your lexer rules).  So both foo and bar 
> > are IDENTs, and not ( PCHAR )*.  So either you will have to 
> change up 
> > tuple_value or your lexer rules:
> > 
> > tuple_value
> >   : IDENT
> >   ;
> > 
> > > 
> > > tuple
> > > 	:	L_PAREN tuple_declaration EQUALS ( tuple_value | set )
> > > R_PAREN
> > > 	;
> > > set
> > > 	:	L_CURLY tuple ( COMMA tuple )*
> > > 	;
> > > tuple_declaration
> > > 	:	tuple_key ( AT_SIGN set )? 
> > > 	;
> > > tuple_key
> > > 	:	IDENT
> > > 	;
> > > tuple_value
> > > 	:	( PCHAR )*
> > > 	;
> > > 
> > > Goal: I need to be able to extract the tuple key-names and
> > the values.
> > > If the value is complex (starts and ends with
> > curly-braces), I need to
> > > handle those differently by constructing references to
> > child nodes in
> > > a tree-structure of sorts. Sets are always on the right hand side.
> > > 
> > > So is this part correct, or not?
> > > 
> > > 
> > > > -----Original Message-----
> > > > From: antlr-interest-bounces at antlr.org 
> > > > [mailto:antlr-interest-bounces at antlr.org] On Behalf Of Diehl, 
> > > > Matthew J
> > > > Sent: Tuesday, July 24, 2007 5:09 PM
> > > > To: antlr-interest at antlr.org
> > > > Subject: Re: [antlr-interest] Newbie: NoViableAltException
> > > > 
> > > > You're mixing your lexer and parser rules.  IDENT is
> > eating up all
> > > > of the UNRESERVED whenever there's more than one, PCHAR
> > if there's
> > > > only one.  Then you're saying that 'bar', which is more 
> than one 
> > > > UNRESERVED, so it is the token IDENT, needs to be a bunch
> > of PCHARs,
> > > > but the PCHARs have already been turned in to the token IDENT.
> > > 
> > > [snip...]
> > > 
> > 
> 


More information about the antlr-interest mailing list