anchor.diff:      ;
   
   classdefine
  -    :   longdoc CLASS TYPENAME blockbegin declarations class_fielddefines blockend
  -        -> ^(CLASSDEF ^(DOC longdoc) TYPENAME declarations class_fielddefines)
  +    :   longdoc? CLASS TYPENAME blockbegin declarations class_fielddefines blockend
  +        -> ^(CLASSDEF ^(DOC longdoc?) TYPENAME declarations class_fielddefines)
       ;
   
   blockbegin
  
positive.code:     ;
  
  typedefine
      :   longdoc TYPENAME shortdoc // basic type
          -> ^(TYPEDEF ^(DOC longdoc shortdoc) TYPENAME)
      |   longdoc alias=TYPENAME '=' orig=TYPENAME shortdoc // alias
          -> ^(TYPEDEF ^(DOC longdoc shortdoc) $alias $orig)
      ;
  
  // identical to fielddefine, except for head
  parameterdefine
      :   longdoc TYPENAME VARIABLENAME fieldparameters? shortdoc
          -> ^(PARAMETERDEF ^(DOC longdoc shortdoc) TYPENAME VARIABLENAME fieldparameters?)
      ;
  
  // identical to parameterdefine, except for head
  fielddefine
      :   longdoc TYPENAME VARIABLENAME fieldparameters? shortdoc
          -> ^(FIELDDEF ^(DOC longdoc shortdoc) TYPENAME VARIABLENAME fieldparameters?)
      ;
  
  class_fielddefines_ifelifelse_fragment
  
negative.code:     ;
  
  formatdefine
      :   longdoc? FILEFORMAT (FORMATNAME (',' FORMATNAME)*)? SHORTDOC? NEWLINE+
          -> ^(FILEFORMAT ^(DOC longdoc? SHORTDOC?) FORMATNAME*)
      ;
  
  declarations
      :   (typeblock | parameterblock | classdefine)*
      ;
  
  // Documentation preceeding a definition, with single newline
  // following each line of text. The number of lines is arbitrary.
  longdoc
      :   (SHORTDOC NEWLINE!)+
      ;
  
  typeblock
  