anchor.diff:        { dec.setIdentifier($typeName.identifier); 
           def.setIdentifier($typeName.identifier); }
         (
  -        classParameters
  +        typeParameters 
  +        { def.setTypeParameterList($typeParameters.typeParameterList); 
  +          dec.setTypeParameterList($typeParameters.typeParameterList); }
  +      )?
  +      parameters
  +      { def.setParameterList($parameters.parameterList); 
  +        dec.setParameterList($parameters.parameterList); }
  +      (
  +        caseTypes
  +        { def.setCaseTypes($caseTypes.caseTypes); 
  +          dec.setCaseTypes($caseTypes.caseTypes); }
  +      )?
  +      /*metatypes?*/ 
  +      (
  +        extendedType
  +        { def.setExtendedType($extendedType.extendedType); 
  +          dec.setExtendedType($extendedType.extendedType); }
  +      )? 
  +      (
  +        satisfiedTypes
  +        { def.setSatisfiedTypes($satisfiedTypes.satisfiedTypes); 
  +          dec.setSatisfiedTypes($satisfiedTypes.satisfiedTypes); }
  +      )?
  +      (
  +        typeConstraints
  +        { def.setTypeConstraintList($typeConstraints.typeConstraintList); 
  +          dec.setTypeConstraintList($typeConstraints.typeConstraintList); }
         )?
         (
           classBody
  
positive.code:       )*/
      ;
  
  interfaceDeclaration
      : INTERFACE_DEFINITION
        typeName interfaceParameters
        (
          interfaceBody
        //-> ^(INTERFACE_DEFINITION typeName interfaceParameters? interfaceBody)
        | typeSpecifier? 
          SEMICOLON
        //-> ^(INTERFACE_DECLARATION[$INTERFACE_DEFINITION] typeName interfaceParameters? typeSpecifier?)
        )
      ;
  
negative.code:       | 
          (
            typeSpecifier
            { dec.setTypeSpecifier($typeSpecifier.typeSpecifier); }
          )?
          SEMICOLON
          { $declaration = dec; }
        //-> ^(CLASS_DECLARATION[$CLASS_DEFINITION] typeName classParameters? typeSpecifier?)
        )
      ;
  