[antlr-interest] Problem with grammar

Kevin J. Cummings cummings at kjchome.homeip.net
Sat Mar 19 09:50:55 PDT 2011


On 03/19/2011 08:18 AM, Wojciech Tomasz Cichon wrote:
> i’m struggling with this grammar for a few days now, and nothing really working,
> so i started from beginning and i have :
> grammar myGrammar;
> 
> options {
>   language = Java;
>   k=1;
> }
> 
> rule: term ;
> 
> factor  :  '-'? NUMBER
>        ;
> 
> term  : factor '*'  term   
>       | factor '/'  term
>       | factor '%'  term
>       | factor;

This is the classic case where the following is probably the proper left
factored LL(1) for you:

term : factor ( ( '*' | '/' | '%' ) factor )*
     ;

Now you have a single "factor" that will always match at the beginning
of your term rule, and not have to chose which of the 4 choices to
associate a '-' with without changing to k=2 or k=3, or turning on
backtracking.

> NUMBER :  '0'..'9'+
>     ;
> WS  :   ( ' '
>         | '\t'
>         | '\r'
>         | '\n'
>         ) {$channel=HIDDEN;}
>     ;
> 
> 
> and i got errors:
> warning(200): /ANTLR_TEST/myGrammar.g:13:7: Decision can match input such as "'-'" using multiple alternatives: 1, 2, 3, 4
> As a result, alternative(s) 2,3,4 were disabled for that input
> |---> term  : factor '*'  term

It can't tell which of your 4 term alternatives to choose based on a '-'
look-ahead character....

> warning(200): /ANTLR_TEST/myGrammar.g:13:7: Decision can match input such as "NUMBER" using multiple alternatives: 1, 2, 3, 4
> As a result, alternative(s) 2,3,4 were disabled for that input
> |---> term  : factor '*'  term

The same here, which of the 4 term alternatives does it choose when the
look-ahead character is a NUMBER?

> error(201): /ANTLR_TEST/myGrammar.g:13:7: The following alternatives can never be matched: 2,3,4
> |---> term  : factor '*'  term

Because it "chose" the first alternative for the 2 cases above, it will
never try a division, modulus, or simple factor.

> can anyone tell me what i’m doing wrong

left factor your grammar....

> regards

-- 
Kevin J. Cummings
kjchome at verizon.net
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