[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