[antlr-interest] Several questions

David Holroyd dave at badgers-in-foil.co.uk
Mon Jan 1 10:37:23 PST 2007


On Mon, Jan 01, 2007 at 11:58:21AM -0500, Daniel Plaisted wrote:
> 3. If Then Else ambiguity - I have a rule which looks like:
> ifStat : 'if' expr 'then' stat ('else' stat)?;

> ANTLR gives the following warning:
> [15:49:08] warning(200): EasyLanguage.g:111:30: Decision can match
> input such as "'else'" using multiple alternatives: 1, 2
> As a result, alternative(s) 2 were disabled for that input

ANTLR is dealing with the grammar ambiguity by removing it for you.

i.e. given that the grammar gives,
  alternative 1: match the "else" now
  alternative 2: exit the (..)? and match the else in an enclosing
                 recursive invocation

it has disabled the second option, which is probably what you want (i.e.
the "else" binds to the closest if..then).

I got the warning to go away in my grammar by using a predicate to
explicitly request this behaviour,

      :    IF^ condition statement
           ((ELSE)=>ELSE statement)?

Hopefully that's the correct thing to do.



More information about the antlr-interest mailing list