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
[email protected]
[email protected]
[email protected]
Registered Linux User #1232 (http://counter.li.org)

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

-- 
You received this message because you are subscribed to the Google Groups 
"il-antlr-interest" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/il-antlr-interest?hl=en.

Reply via email to