[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