anchor.diff:      ;
   
   abbreviation
  -    : LBRACKET dimension? ']' | '?'
  -    ;
  +    : ARRAY | '?' | LBRACKET dimension ']'
  +    ;
  +
   
   typeNameWithArguments
       : typeName typeArguments?
  
positive.code:     
  fragment SPREAD :;
  fragment LBRACKET :;
  BRACKETS
      : '['
      ( ( { input.LA(1) == ']' && input.LA(2) == '.' }? => '].' { $type = SPREAD; } )
       | { $type = LBRACKET; } )
      ;    
  
  CHARLITERAL
  
negative.code: nameAndTypeArguments
      : ( memberName | typeName | 'subtype' ) 
        ( (typeArguments) => typeArguments )?
        ARRAY*
      ;
  
  elementSelector
  