anchor.diff:      | parExpression
       ;
   
  +primary
  +    : (base -> base)
  +    (          
  +        qualifiedMemberReference
  +      -> ^(QUALIFIED_MEMBER_EXPRESSION $primary qualifiedMemberReference)
  +      | qualifiedTypeReference
  +      -> ^(QUALIFIED_TYPE_EXPRESSION $primary qualifiedTypeReference)
  +      | indexExpression
  +      -> ^(INDEX_EXPRESSION $primary indexExpression)
  +      | invocationExpression
  +      -> ^(INVOCATION_EXPRESSION $primary invocationExpression)
  +    )*
  +    ;
  +   
  +qualifiedMemberReference
  +    : memberSelectionOperator memberReference
  +    ;
  +
  +qualifiedTypeReference
  +    : memberSelectionOperator typeReference
  +    ;
  +
  +invocationExpression
  +    : arguments functionalArguments?
  +    ;
  +
  +indexExpression
  +    : elementSelectionOperator indexOrIndexRange ']'!
  +    ;
  +
  +memberSelectionOperator
  +    : '.' | '?.' | '[].' 
  +    ;
  +
  +elementSelectionOperator
  +    : '?[' | '['
  +    ;
  +
  +selfReference
  +    : 'this' | 'super' | 'outer'
  +    ;
  +
  +enumeration
  +    : LBRACE expressions? '}'
  +    -> ^(SEQUENCE_ENUMERATION[$LBRACE] expressions?)
  +    ;
  +
   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 
  
positive.code: index
      : additiveExpression 
      -> ^(EXPRESSION additiveExpression)
      ;
  
  argumentsWithFunctionalArguments
      : arguments functionalArguments?
      ;
  
  functionalArguments
  
negative.code:       ('>'|'<'|','|'...')
      ;
  
  indexOrIndexRange
      : l=index
      (
        -> ^(ELEMENT $l)
  