anchor.diff:  index
       : additiveExpression 
       -> ^(EXPRESSION additiveExpression)
  -    ;
  -
  -argumentsWithFunctionalArguments
  -    : arguments functionalArguments?
       ;
   
   functionalArguments
  
positive.code:     | parExpression
      ;
  
  lambda
      : /*'function'*/ parameters functionalArgumentBody
      -> ^(LAMBDA parameters functionalArgumentBody)
      ;
  
  memberSelectionOperator
      : '.' | '?.' | '[].' 
      ;
  
  memberReference
      : memberName ((typeArgumentsStart) => typeArguments)? 
      ;
  
  typeReference
      : typeName ((typeArgumentsStart) => typeArguments)?
      ;
  
  //special rule for syntactic predicate so
  //that qualified type names are consumed
  //greedily into a single TYPE_REF node
  typeInExpressionStart
      : '.' typeName
      ;
  
  //special rule for syntactic predicate to 
  
negative.code:       ('>'|'<'|','|'...')
      ;
  
  indexOrIndexRange
      : l=index
      (
        -> ^(ELEMENT $l)
  