anchor.diff:      | { $type = LBRACKET; } 
       )
       ;    
  +
  +fragment SAFEMEMBER:;
  +fragment SAFEINDEX:;
  +fragment QMARK:;
  +QMARKS
  +    : '?'
  +    (
  +      ( { input.LA(1) == '[' }? => '[' { $type = SAFEINDEX; } )
  +    | ( { input.LA(1) == '.' }? => '.' { $type = SAFEMEMBER; } ) 
  +    | { $type = QMARK; }
  +    )
  +    ;
   
   CHARLITERAL
       :   '`' ( ~ NonCharacterChars | EscapeSequence ) '`'
  
positive.code: 
  defaultExpression
      : rangeIntervalEntryExpression 
        ('?'^ defaultExpression)?
      ;
  
  //I wonder if it would it be cleaner to give 
  
negative.code:     ;
      
  primary
      : base selector*
      -> ^(EXPR base selector*)
      ;
  
  postfixOperator
  