anchor.diff:      | COMPLEMENT_OP
       ;
       
  +compilerAnnotation returns [CompilerAnnotation annotation]
  +    : COMPILER_ANNOTATION 
  +      { $annotation=new CompilerAnnotation($COMPILER_ANNOTATION); }
  +      annotationName 
  +      { $annotation.setIdentifier($annotationName.identifier); }
  +      ( 
  +          LBRACKET
  +          stringLiteral
  +          { $annotation.setStringLiteral($stringLiteral.stringLiteral); }
  +          RBRACKET
  +      )?
  +    ;
  +
   // Lexer
   
   fragment
  
positive.code:       { $declaration=$voidOrInferredMethodDeclaration.declaration; }
      | inferredAttributeDeclaration
        { $declaration=$inferredAttributeDeclaration.declaration; }
      //| typedMethodOrAttributeDeclaration
      | classDeclaration
        { $declaration=$classDeclaration.declaration; }
      | interfaceDeclaration
  
negative.code: fragment INDEX_OP: '[';
  //distinguish the spread operator "x[]."
  //from a sequenced type "T[]..."
  LBRACKET
      : '['
      (
        (']' '.' ~'.') => '].' { $type = SPREAD_OP; }
  