anchor.diff:          it.addStaticType($type); }
         ( 
           (
  -          INTERSECTION_OP
  -          at2=abbreviatedType
  -          { it.addStaticType($at2.type); }
  +          i=INTERSECTION_OP
  +          { it.setEndToken($i); }
  +          (
  +            at2=abbreviatedType
  +            { it.addStaticType($at2.type);
  +              it.setEndToken(null); }
  +          | { displayRecognitionError(getTokenNames(), 
  +                new MismatchedTokenException(UIDENTIFIER, input)); }
  +          )
           )+
           { $type = it; }
         )?
  
positive.code:       t1=type 
        { $adaptedTypes.addType($t1.type); }
        (
          INTERSECTION_OP 
          t2=type
          { $adaptedTypes.addType($t2.type); }
        )*
      ;
  
  
negative.code:       t1=type 
        { $satisfiedTypes.addType($t1.type); }
        (
          i=INTERSECTION_OP
          { $satisfiedTypes.setEndToken($i); }
          (
            t2=type
            { $satisfiedTypes.addType($t2.type); 
              $satisfiedTypes.setEndToken(null); }
          | { displayRecognitionError(getTokenNames(),
                new MismatchedTokenException(UIDENTIFIER, input)); }
          )
        )*
      //-> ^(SATISFIED_TYPES[$SATISFIES] type+)
      ;
  