[antlr-interest] NoViableAltException in Grammar

Kevin J. Cummings cummings at kjchome.homeip.net
Fri Oct 22 16:05:36 PDT 2010


On 10/22/2010 06:42 PM, Bhisham Dutt wrote:
> 
>  
> Hi,
>   I have the following grammar,  If i pass the following expression everything looks ok -- formula=-0.79*VAR+45.0  
> But if  formula=-0.79*VAR-45.0   (With Negative operator is passed, I am getting NoViableAltException)
>  
>  
> grammar Sample1;
> 
> options 
> {
> language = Java;
> output = AST;
> }
> 
> rule
> : 'formula' '=' ((DOUBLE | NEGDOUBLE) '*')? 'VAR' (('-' | '+') DOUBLE)? 
> ;
> 
> fragment DIGIT : '0'..'9';
> DOUBLE : (DIGIT)* ('.' (DIGIT)*)?
> ;
> 
> NEGDOUBLE : '-'(DIGIT)* ('.' (DIGIT)*)?
> ;
> 
> WS : (' ' | '\t' | '\n' | '\r' | '\f')+ {$channel = HIDDEN;};
> COMMENT : '//' .* ('\n'|'\r') {$channel = HIDDEN;}; 
>  
> Thanks for your help. 		 	   		  

Yeup,
	the lexer saw your "-45.0" and decided that it was a NEGDOUBLE token,
which is illegal in your grammar.  You need to change your grammar to
fix that.  Either change "('-' | '+') DOUBLE" to
"NEGDOUBLE | '+' DOUBLE" or don't recognize NEGDOUBLE as a token, and
handle the leading '-' in the parser.

> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address


-- 
Kevin J. Cummings
kjchome at rcn.com
cummings at kjchome.homeip.net
cummings at kjc386.framingham.ma.us
Registered Linux User #1232 (http://counter.li.org)


More information about the antlr-interest mailing list