anchor.diff:          $condition.setType($t1.type);
           $condition.setVariable($impliedVariable.variable); }
       //-> ^(IS_CONDITION[$IS_OP] unionType ^(VARIABLE SYNTHETIC_VARIABLE memberName ^(SPECIFIER_EXPRESSION ^(EXPRESSION ^(BASE_MEMBER_EXPRESSION memberName)))))
  -    | LPAREN i2=IS_OP t2=unionType (memberName specifier) RPAREN
  -      { $condition = new IsCondition($i2); 
  -        $condition.setType($t2.type);
  +    | LPAREN i2=IS_OP 
  +      { $condition = new IsCondition($i2); }
  +      t2=unionType
  +      { $condition.setType($t2.type);
           Variable v = new Variable(null);
  -        v.setType(new SyntheticVariable(null));
  -        v.setIdentifier($memberName.identifier);
  -        v.setSpecifierExpression($specifier.specifierExpression);
  +        v.setType($t2.type); 
           $condition.setVariable(v); }
  +      memberName
  +      { $condition.getVariable().setIdentifier($memberName.identifier); }
  +      specifier
  +      { $condition.getVariable().setSpecifierExpression($specifier.specifierExpression); }
  +      RPAREN
       //-> ^(IS_CONDITION[$IS_OP] unionType ^(VARIABLE unionType memberName specifier))
       ;
   
  
positive.code:     ;
      
  typeConstraint returns [TypeConstraint typeConstraint]
      : TYPE_CONSTRAINT
        { $typeConstraint = new TypeConstraint($TYPE_CONSTRAINT); }
        typeName 
        { $typeConstraint.setIdentifier($typeName.identifier); }
        //(typeParameters)?
  
negative.code:           $term = $comparisonOperator.operator; }
          ee2=existenceEmptinessExpression
          { $comparisonOperator.operator.setRightTerm($ee2.term); }
        | typeOperator
          { $typeOperator.operator.setTerm($ee1.term); }
          type
          { $typeOperator.operator.setType($type.type); }
        )?
      ;
  
  