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