anchor.diff:  
   typedefine
       :   longdoc TYPENAME shortdoc // basic type
  -    |   longdoc TYPENAME '=' TYPENAME shortdoc // alias
  +        -> ^(TYPE ^(DOC longdoc shortdoc) TYPENAME)
  +    |   longdoc alias=TYPENAME '=' orig=TYPENAME shortdoc // alias
  +        -> ^(TYPE ^(DOC longdoc shortdoc) $alias $orig)
       ;
   
   fielddefine
       :   longdoc TYPENAME VARIABLENAME fieldparameters? shortdoc
  +        -> ^(FIELD ^(DOC longdoc shortdoc) TYPENAME VARIABLENAME fieldparameters?)
       ;
   
   class_fielddefines_ifelifelse_fragment
       :
  -        IF expression blockbegin class_fielddefines blockend
  -        (ELIF expression blockbegin class_fielddefines blockend)*
  -        (ELSE blockbegin class_fielddefines blockend)?
  +        IF ifexp=expression blockbegin ifdefines=class_fielddefines blockend
  +        (ELIF elifexp=expression blockbegin elifdefines=class_fielddefines blockend)*
  +        (ELSE blockbegin elsedefines=class_fielddefines blockend)?
  +        -> ^(IF $ifexp $ifdefines ^(ELIF $elifexp $elifdefines) ^(ELSE $elsedefines))
       ;
   
   class_fielddefines
  
positive.code:     ;
  
  formatdefine
      :   longdoc FILEFORMAT FORMATNAME shortdoc -> ^(FORMATNAME longdoc shortdoc)
      ;
  
  declarations
  
negative.code: 
  kwarg
      :   VARIABLENAME '=' expression
          -> ^(FIELDARG VARIABLENAME expression)
      ;
  
  fieldparameters
      :   '(' kwarg (',' kwarg)* ')'
          -> ^(FIELDARGS kwarg kwarg*)
      ;
  
  // TODO: operators such as and, or, not, ...
  