anchor.diff:      | typedMethodOrGetterArgument
       ;
       
  -    /*'assign' memberName block
  -    -> ^(ATTRIBUTE_SETTER memberName block)*/
  -
   objectArgument
       : 'object' parameterName extendedType? satisfiedTypes? classBody
       -> parameterName ^(OBJECT_ARG parameterName extendedType? satisfiedTypes? classBody)
  
positive.code:     ;
  
  nameAndTypeArguments
      : typeNameAndTypeArguments 
      | memberNameAndTypeArguments 
      | 'subtype' 
      | 'outer'
      ;
  
  typeNameAndTypeArguments
      : typeName ( (typeArguments) => typeArguments )?
        //('[]' | ('?') => '?' )*
      ;
  
  memberNameAndTypeArguments
      : memberName ( (typeArguments) => typeArguments )?
      ;
  
  elementSelector
      : ('?[' | '[') elementsSpec ']'
      -> ^(SUBSCRIPT_EXPR '?['? elementsSpec)
      ;
  
  /*selectorStart
      : '?[' | '['
      | '('
      | '{'
      | memberOperator
      | postfixOperator
      ;*/
  
  elementsSpec
      : additiveExpression ( '...' | '..' additiveExpression )?
  
negative.code:     ;
  
  staticType
      : typeNameWithArguments ('.' typeNameWithArguments)* typeAbbreviation*
      -> ^(TYPE typeNameWithArguments+ typeAbbreviation*)
      ;
  
  runtimeType
      : 'subtype' typeAbbreviation*
      -> ^(TYPE 'subtype' typeAbbreviation*)
      /*| parameterName '.' 'subtype' abbreviation*
      -> ^(TYPE parameterName 'subtype' abbreviation*)*/
      ;
  
  typeAbbreviation
      : '?' | '[]' //| '[' dimension ']'
      ;
  
  typeNameWithArguments
      : typeName typeArguments?
  