[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