[antlr-interest] very simple doubt about EXPR grammar

Leonardo K. Shikida shikida at gmail.com
Thu Oct 14 17:18:42 PDT 2010


Hi John

here are some screenshots of what I am doing with ANTLR Works.

not ok: http://img833.imageshack.us/img833/7586/noviable.png

ok: http://img194.imageshack.us/img194/7260/viable.png

so strange it only happens to the MINUS sign.

thanks

Leo





On Thu, Oct 14, 2010 at 5:17 PM, John B. Brodie <jbb at acm.org> wrote:
> Greetings!
> On Thu, 2010-10-14 at 09:31 -0300, Leonardo K. Shikida wrote:
>> 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
>
> very strange...
>
>>
>> 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
>
> unable to reproduce. attached please find a complete test grammar
> including a test driver that contains your grammar.
>
> this test grammar parses all four of the above without any problem.
>
> (does your test input happen to (incorrectly) include a blank(s)? your
> lexer accepts white space but your parser does not....)
>
>>
>> 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)
>> >
>
>


More information about the antlr-interest mailing list