anchor.diff:        )*/
       ;
   
  -interfaceDeclaration
  +interfaceDeclaration returns [AnyInterface declaration]
  +    @init { InterfaceDefinition def=null; 
  +            InterfaceDeclaration dec=null; }
       : INTERFACE_DEFINITION
  -      typeName interfaceParameters
  +      { def = new InterfaceDefinition($INTERFACE_DEFINITION); 
  +        dec = new InterfaceDeclaration($INTERFACE_DEFINITION);
  +        $declaration = def; }
  +      typeName 
  +      { dec.setIdentifier($typeName.identifier); 
  +        def.setIdentifier($typeName.identifier); }
  +      (
  +        typeParameters 
  +        { def.setTypeParameterList($typeParameters.typeParameterList); 
  +          dec.setTypeParameterList($typeParameters.typeParameterList); }
  +      )?
  +      (
  +        caseTypes
  +        { def.setCaseTypes($caseTypes.caseTypes); 
  +          dec.setCaseTypes($caseTypes.caseTypes); }
  +      )?
  +      /*metatypes?*/ 
  +      (
  +        adaptedTypes
  +        { def.setAdaptedTypes($adaptedTypes.adaptedTypes); }
  +      )?
  +      (
  +        satisfiedTypes
  +        { def.setSatisfiedTypes($satisfiedTypes.satisfiedTypes); 
  +          dec.setSatisfiedTypes($satisfiedTypes.satisfiedTypes); }
  +      )?
  +      (
  +        typeConstraints
  +        { def.setTypeConstraintList($typeConstraints.typeConstraintList); 
  +          dec.setTypeConstraintList($typeConstraints.typeConstraintList); }
  +      )?
         (
           interfaceBody
  +        { def.setInterfaceBody($interfaceBody.interfaceBody); }
         //-> ^(INTERFACE_DEFINITION typeName interfaceParameters? interfaceBody)
  -      | typeSpecifier? 
  +      | 
  +        (
  +          typeSpecifier
  +          { dec.setTypeSpecifier($typeSpecifier.typeSpecifier); }
  +        )? 
           SEMICOLON
  +        { $declaration = dec; }
         //-> ^(INTERFACE_DECLARATION[$INTERFACE_DEFINITION] typeName interfaceParameters? typeSpecifier?)
         )
       ;
  
positive.code:       typeConstraints?
      ;
      
  interfaceParameters
      : typeParameters?
        caseTypes? /*metatypes?*/ adaptedTypes? satisfiedTypes?
        typeConstraints?
      ;
  
  classParameters
      : typeParameters? parameters
        caseTypes? /*metatypes?*/ extendedType? satisfiedTypes?
        typeConstraints?
      ;
  
  block returns [Block block]
      : LBRACE 
        { $block = new Block($LBRACE); }
  
negative.code:       { dec.setIdentifier($typeName.identifier); 
          def.setIdentifier($typeName.identifier); }
        (
          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
  