title: ANTLR decision warning
body: <p>I have written the following grammar. I want to write expressions x+2; x/2;...</p>
  
  <pre><code>grammar HASKELL;
  
  options {
    language = Java;
  }
  
  program
      : statment+
      ;
  
  statment
      :declaration
      | expression
      ;
  
  declaration
      : typeDecl
      ;
  
  typeDecl
      :numType 
      |listType
      ;
  
  type
      : 'num'
      | 'list'    
      ;
  
  
  numType
      : type IDENT '=' INTEGER ';' 
      ;
  
  
  listType
      :type IDENT '='  '[' INTEGER* ']'  ';'
      ;   
  
  term                    
      : IDENT
      | '(' expression ')'
      |   INTEGER
      ;
  
  negation
      : 'not'* term
      ;
  
  unary
      :  ('+' | '-')* negation
      ;
  
  mult
      : unary (('*' | '/' | 'mod') unary) *
      ;   
  
  add  
      : mult (('+' | '-') mult)*
      ;
  
  relation        
      : add (('=' |'/='|'&lt;'|'&lt;='|'&gt;'|'&gt;=') add)*
      ;
  
  expression
      :   relation (('and' | 'or') relation)*
      ;
  
  MULTILINE_COMMENT : '/*' .* '*/' {$channel = HIDDEN;} ;
  fragment LETTER : ('a'..'z' | 'A'..'Z') ;
  fragment DIGIT : '0'..'9';
  INTEGER : DIGIT+ ;
  IDENT : LETTER (LETTER | DIGIT)*;
  WS : (' ' | '\t' | '\n' | '\r' | '\f')+ {$channel = HIDDEN;};
  COMMENT : '//' .* ('\n'|'\r') {$channel = HIDDEN;};
  </code></pre>
  
  <p>which produces the following warning:</p>
  
  <pre><code>(200): Decision can match input such as "'+'..'-' IDENT" using multiple 
         alternatives: 1,2 As a result, alternative(s) 2 were disabled for 
         that input   HASKELL.g   Assignment2/src/com/assignment2/antlr3x/first    
         line 59 DLTK Problem
  </code></pre>
  
  <p>I can't see the confusion caused by the add. I tried to remove ('+' | '-')* under unary and it worked. But don't want to exclude stuff like x+(-2). Any ideas how to do it by not removing ('+' | '-')*
  Thanks</p>