anchor.diff:  
   NAME_STORAGE
       :   { tagMode }?=> 'storage'
  +    ;
  +
  +NAME_TYPE
  +    :   { tagMode }?=> 'type'
       ;
   
   NAME
  
positive.code:     ;
  
  declarations
      :   (versiondefine | basicdefine | enumdefine /* | classdefine */ )*
      ;
  
  versiondefine
  
negative.code:     :   NAME_NAME ATTR_EQ ATTR_VALUE_START t=NAME ATTR_VALUE_END
          -> CONSTANTNAME[$t];
  
  structdefine
      :   TAG_START_STRUCT struct_nameattribute anyattribute* TAG_CLOSE
      	doc=SHORTDOC?
          struct_add*
          TAG_END_STRUCT SHORTDOC*
          -> ^(CLASSDEF ^(DOC $doc) struct_nameattribute struct_add*);
  
  struct_nameattribute
      :   NAME_NAME ATTR_EQ ATTR_VALUE_START t=NAME ATTR_VALUE_END
          -> TYPENAME[$t, $t.text];
  
  struct_add
      :   TAG_START_ADD add_nameattribute add_typeattribute anyattribute* TAG_CLOSE
          doc=SHORTDOC?
          TAG_END_ADD SHORTDOC*
          -> ^(FIELDDEF ^(DOC $doc) add_typeattribute add_nameattribute);
  
  add_nameattribute
      :   NAME_NAME ATTR_EQ ATTR_VALUE_START t=NAME ATTR_VALUE_END
          -> VARIABLENAME[$t, $t.text];
  
  add_typeattribute
      :   NAME_TYPE ATTR_EQ ATTR_VALUE_START t=NAME ATTR_VALUE_END
          -> TYPENAME[$t, $t.text];
  
  /*------------------------------------------------------------------
   * LEXER RULES
   *------------------------------------------------------------------*/
  