[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