anchor.diff:      | argumentsWithFunctionalArguments
       -> ^(CALL_EXPR argumentsWithFunctionalArguments)
       | elementSelector
  +    -> ^(SUBSCRIPT_EXPR elementSelector)
       | postfixOperator 
       -> ^(POSTFIX_EXPR postfixOperator)
       ;
  
positive.code:     | typedMethodOrGetterArgument
      ;
      
      /*'assign' memberName block
      -> ^(ATTRIBUTE_SETTER memberName block)*/
  
  objectArgument
      : 'object' parameterName extendedType? satisfiedTypes? classBody
      -> parameterName ^(OBJECT_ARG parameterName extendedType? satisfiedTypes? classBody)
  
negative.code:     ;
  
  nameAndTypeArguments
      : (typeName|memberName) ((typeArgumentsStart) => typeArguments)?
      | 'subtype' 
      | 'outer'
      ;
  
  //special rule for syntactic predicate to 
  //determine if we have a < operator, or a
  //type argument list
  typeArgumentsStart
      : '<' 
        (UIDENTIFIER ('.' UIDENTIFIER)* | 'subtype') 
        typeAbbreviation*
        ('>'|'<'|','|'...')
      ;
  
  elementSelector
      : ('?[' | '[') elementsSpec ']'
      ;
  
  elementsSpec
      : additiveExpression ( '...' | '..' additiveExpression )?
  