[antlr-interest] Alternative(s) 2 were disabled for that input

jack zhang jackgzhang2 at yahoo.com
Fri Sep 19 12:32:54 PDT 2008


Thanks. Now the warnings are cleared.  The only issue I had is that for the following invalid inputs, it won't report error. Here is the grammar.  
1) AND
2) OR
3) AND a
4) OR a

----------------------- CUT -------------------
grammar Query;

//=== Parser Option ===//
options {
  output = AST;
  k=*;
}




//=== Lexer ===//

LEFT_PAREN: '(';
NOT: 'NOT';
AND: 'AND';
OR: 'OR';
WORD: ('a'..'z' | 'A'..'Z' | '.' | ',' | '0'..'9')+ | '"'.+'"';
RIGHT_PAREN: ')';
WHITESPACE: (' ' | '\t' | '\r' | '\n') { $channel = HIDDEN; } ;



//=== Parser ===//
expr: orexpression*;

orexpression
    :   andexpression (OR andexpression)*
    ;

andexpression
    : notexpression (AND notexpression)*
    ;

notexpression
    : (NOT)? atom
    ;

atom
    : WORD+ 
    | LEFT_PAREN! expr RIGHT_PAREN!
    ;


--------------------------------------








Thanks !


--- On Fri, 9/19/08, Markus <grey_earl at web.de> wrote:
From: Markus <grey_earl at web.de>
Subject: Re: [antlr-interest] Alternative(s) 2 were disabled for that input
To: antlr-interest at antlr.org
Date: Friday, September 19, 2008, 4:49 AM

----------------------- CUT -------------------
>
> //=== Parser ===//
> expr: orexpression*;
> orexpression
>  
>      :   andexpression (OR orexpression)*
>     ;
>
> andexpression
>     : notexpression (AND andexpression)*
>     ;
>
> notexpression
>     : (NOT)? atom
>     ;
>
> atom
>     : WORD+
>     | LEFT_PAREN! expr RIGHT_PAREN!
>     ;
>
> --- On Thu, 9/18/08, jack zhang <jackgzhang2 at yahoo.com> wrote:
> From: jack zhang <jackgzhang2 at yahoo.com>
> Subject: Alternative(s) 2 were disabled for that input
> To: antlr-interest at antlr.org
> Date: Thursday, September 18, 2008, 4:46 PM
>
> Hi,
>   I keep getting following errors:
>
> warning(138): Query.g:0:0: grammar Query: no start rule (no rule can
> obviously be followed by EOF) warning(200): Query.g:27:40: Decision can
> match input such as "OR" using multiple alternatives: 1, 2 As a
result,
> alternative(s) 2 were disabled for that input
> warning(200): Query.g:31:39: Decision can match input such as
"AND" using
> multiple alternatives: 1, 2 As a result, alternative(s) 2 were disabled
for
> that input
> warning(200): Query.g:39:7: Decision can match input such as
"WORD" using
> multiple alternatives: 1, 2 As a result, alternative(s) 2 were disabled
for
> that input
>
------------------------- CUT --------------------
The parser complains because it can match a OR b OR c in two ways, one by 
using the kleene star * in or_expression twice and so matching two ORs with 
their corresponding expressions reduced to atoms, and the other one by using 
the kleene star * in or_expression once, and matching b OR c with another 
or_expression. You want to change or_expression (and similar and_expression) 
to
or_expression
 : and_expression (OR and_expression)*
 ;
so it always has to match the kleene star * twice and the parser won't 
complain about this anymore. I know the error messages can be sometimes quite 
confusing, and the best way to deal with this is to make a copy of your 
grammar and remove one rule at a time to see which one really causes the 
error. Then at least you know which rule to fix.

Markus


List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe:
http://www.antlr.org/mailman/options/antlr-interest/your-email-address




      
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20080919/73d5466d/attachment.html 


More information about the antlr-interest mailing list