anchor.diff:      ;
       
   typeConstraint returns [TypeConstraint typeConstraint]
  -    : TYPE_CONSTRAINT
  -      { $typeConstraint = new TypeConstraint($TYPE_CONSTRAINT); }
  +    : compilerAnnotations
  +      TYPE_CONSTRAINT
  +      { $typeConstraint = new TypeConstraint($TYPE_CONSTRAINT); 
  +        $typeConstraint.getCompilerAnnotations().addAll($compilerAnnotations.annotations); }
         typeName 
         { $typeConstraint.setIdentifier($typeName.identifier); }
         //(typeParameters)?
  
positive.code: //to distinguish between a named argument
  //and a sequenced argument
  namedArgumentStart
      : specificationStart 
      | declarationStart
      ;
  
  //special rule for syntactic predicates
  
negative.code:         { $namedArgumentList.addNamedArgument($namedArgument.namedArgument); }
        )* 
        ( 
          sequencedArgument
          { $namedArgumentList.setSequencedArgument($sequencedArgument.sequencedArgument); }
        )?
        RBRACE
      ;
  
  sequencedArgument returns [SequencedArgument sequencedArgument]
      : compilerAnnotations
        expressions
        { sequencedArgument = new SequencedArgument(null);
          sequencedArgument.setExpressionList($expressions.expressionList);
          sequencedArgument.getCompilerAnnotations().addAll($compilerAnnotations.annotations); }
      ;
  
  namedArgument returns [NamedArgument namedArgument]
      : compilerAnnotations 
      ( 
        namedSpecifiedArgument
        { $namedArgument = $namedSpecifiedArgument.specifiedArgument; }
      | 
        namedArgumentDeclaration
      )
      { if ($namedArgument!=null) {
            namedArgument.getCompilerAnnotations().addAll($compilerAnnotations.annotations); 
      } }
      ;
  
  namedSpecifiedArgument returns [SpecifiedArgument specifiedArgument]
  