anchor.diff:  QMARKS
       : '?'
       (
  -      ('[' ~']') => '[' { $type = SAFEINDEX; }
  -    | ('.' ~'.') => '.' { $type = SAFEMEMBER; }
  -    | { $type = QMARK; }
  +      ('[' ~']') => '[' { $type = SAFE_INDEX; }
  +    | ('.' ~'.') => '.' { $type = SAFE_MEMBER; }
  +    | { $type = DEFAULT_OP; }
       )
       ;
   
  
positive.code:     ;
  
  typeAbbreviation
      : QMARK
      -> ^(TYPE_NAME UIDENTIFIER[$QMARK,"Optional"])
      | ARRAY 
      -> ^(TYPE_NAME UIDENTIFIER[$ARRAY,"Sequence"])
      //| '[' dimension ']'
  
negative.code: LBRACKETS
      : '['
      (
        (']' '.' ~'.') => '].' { $type = SPREAD_OP; }
      | (']') => ']' { $type = ARRAY; }
      | { $type = LBRACKET; }
      )
      ;
  
  fragment SAFE_MEMBER: '?.';
  fragment SAFE_INDEX: '?[';
  fragment DEFAULT_OP: '?';
  //distinguish the safe index operator "x?[i]"
  //from an abbreviated type "T?[]"
  //and the safe member operator "x?.y" from 
  