[antlr-interest] Grammar refuses to compile (Simple ANTLR gotcha)
Ilia Kantor
ilia at obnovlenie.ru
Tue Apr 24 10:48:15 PDT 2007
Thanks, David,
You were right, actually I put predicates one level lower then they should be =)
Works fine with suggested fix.
> On Tue, Apr 24, 2007 at 04:40:51PM +0400, Ilia Kantor wrote:
> > This grammar doesn't compile (ambiguitiy)
> >
> > I want "rule_call" to match "#a.b.c" from arbitrary text
> >
> > Could you please explain what's the reason of error I have here and how to fix it ?
> >
> > warning(200): My.g:8:24: Decision can match input such as "DOT WORD" using multiple alternatives: 1, 2
> > As a result, alternative(s) 2 were disabled for that input
> > warning(200): My.g:8:24: Decision can match input such as "MINUS GT WORD" using multiple alternatives: 1, 2
> > As a result, alternative(s) 2 were disabled for that input
> >
> >
> > -----------------------------------------
> >
> > document:
> > (text | rule_call)+;
> >
> > rule_call:
> > GET_SCOPE_VALUE WORD rule_long_def_part+;
> >
> > rule_long_def_part
> > :
> > (MINUS GT WORD) => MINUS GT WORD |
> > (DOT WORD) => DOT WORD;
> >
> >
> > text:
> > DOT | MINUS | WORD | WS| GT | SPECIAL_CHAR ;
>
> I'd try adding,
>
> ((rule_long_def_part)=> rule_long_def_part)+
>
> to make ANTLR match that content 'now', rather than exiting rule_call
> and matching the tokens with text+ in the document rule. I guess you
> don't need the predicates in rule_long_def_part itself?
>
> [I didn't test that though.]
>
> dave
>
> --
> http://david.holroyd.me.uk/
>
More information about the antlr-interest
mailing list