anchor.diff:            $term = $comparisonOperator.operator; }
           ee2=existenceEmptinessExpression
           { $comparisonOperator.operator.setRightTerm($ee2.term); }
  -      //| ('is'|'extends'|'satisfies') type
  +      | typeOperator
  +        { $typeOperator.operator.setTerm($ee1.term); }
  +        type
  +        { $typeOperator.operator.setType($type.type); }
         )?
       ;
   
  
positive.code:         $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);
          Variable v = new Variable(null);
          v.setType(new SyntheticVariable(null));
          v.setIdentifier($memberName.identifier);
          v.setSpecifierExpression($specifier.specifierExpression);
          $condition.setVariable(v); }
      //-> ^(IS_CONDITION[$IS_OP] unionType ^(VARIABLE unionType memberName specifier))
      ;
  
  
negative.code:       { $operator = new SmallerOp($SMALLER_OP); }
      | IN_OP
        { $operator = new InOp($IN_OP); }
      ;
  
  typeOperator returns [TypeOperatorExpression operator]
      : IS_OP
        { $operator = new IsOp($IS_OP); }
      | EXTENDS
        { $operator = new Extends($EXTENDS); }
      | SATISFIES
        { $operator = new Satisfies($SATISFIES); }
      ;
  
  existenceEmptinessExpression returns [Term term]
  