anchor.diff:      
   initializer
       : ':=' expression
  -    -> ^(INIT_EXPRESSION expression)
  +    -> ^(INITIALIZER_EXPRESSION expression)
       ;
   
   specifier
  
positive.code: LBRACKETS
      : '['
      (
        (']' '.' ~'.') => '].' { $type = SPREAD; }
      | (']') => ']' { $type = ARRAY; }
      | { $type = LBRACKET; }
      )
      ;
  
  fragment SAFEMEMBER: '?.';
  fragment SAFEINDEX: '?[';
  fragment QMARK: '?';
  //distinguish the safe index operator "x?[i]"
  //from an abbreviated type "T?[]"
  //and the safe member operator "x?.y" from 
  
negative.code: QMARKS
      : '?'
      (
        ('[' ~']') => '[' { $type = SAFE_INDEX; }
      | ('.' ~'.') => '.' { $type = SAFE_MEMBER; }
      | { $type = DEFAULT_OP; }
      )
      ;
  
  