[antlr-interest] very simple doubt about EXPR grammar
Leonardo K. Shikida
shikida at gmail.com
Thu Oct 14 05:31:19 PDT 2010
Hi Kevin
You´re right. So I´ve changed the grammar to include a stopword (semicolon).
Still the same problem.
1-1+1; generates a NoViableAltException
while
1+1-1; does not
This is very strange because according to the rule
expr
: e=multExpr
( '+' multExpr
| '-' multExpr
| '*' multExpr
| '/' multExpr
)*
;
it does not matter what symbol comes. In fact, for all other
combinations of symbols in the same expression, only those starting
with 1-1 throws the exception.
1*1-1; OK
1*1/1; OK
1-1-1; NOT OK
1*1+1; OK
and so on...
Can anyone help me? Is it an ANTLR bug or am I missing something here
in this grammar?
Thanks in advance
Leo.
>>>>>>>>>>>>>>>>>
grammar Expr;
@header {
}
@members {
}
stat: comp ';'
;
comp
: e=expr
( '>' expr
| '<' expr
| '=' expr
)*
;
expr
: e=multExpr
( '+' multExpr
| '-' multExpr
| '*' multExpr
| '/' multExpr
)*
;
multExpr
: atom
( atom
)*
;
atom
: INT
| ID
| '(' comp ')'
;
ID : ('a'..'z'|'_')+ ;
INT : '0'..'9'+ ;
WS : (' '|'\t')+ ;
[]
Leonardo K. Shikida
On Wed, Oct 13, 2010 at 3:14 PM, Kevin J. Cummings
<cummings at kjchome.homeip.net> wrote:
> On 10/13/2010 01:29 PM, Leonardo K. Shikida wrote:
>> Hi
>>
>> This is something stupid, I guess. I have a grammar like this below
>> and I would like to know why
>>
>> "1+1-1" works
>>
>> and
>>
>> "1-1+1" does not work (NoViableAltException)
>
> NoViableAltException is thrown in your stat rule when it can't predict
> an INT, ID, (, or NEWLINE in the lookahead. Does your test case end in
> a NEWLINE?
>
>> Thanks
>>
>> Leo K.
>
> --
> 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)
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>
More information about the antlr-interest
mailing list