anchor.diff:  
   // Control structures.
   
  +condition
  +    : expression | existsCondition | isCondition
  +    ;
  +
   // Backtracking here is needed for exactly the same reason as localOrStatement.
  -condition
  -    : ('exists' | 'nonempty')? ( (declarationStart) => variable specifier | expression )
  -    | 'is' type ( (memberName '=') => memberName specifier | expression )
  -    ;
  -	
  +existsCondition
  +    : ('exists' | 'nonempty') ( (variableStart) => variable specifier | expression )
  +    ;
  +    
  +isCondition
  +    : 'is' type ( (memberName '=') => memberName specifier | expression )
  +    ;
  +    
   controlStructure
       : ifElse | switchCaseElse | doWhile | forFail | tryCatchFinally
       ;
  
positive.code:     ;
      
  positionalArguments
      : '(' ( (specialStart) => special | (assignable (',' assignable)*)? ) ')'
      ;
  
  special
      : regularType memberName (containment|specifier)
      ;
  
  specialStart
      : regularType memberName ('in'|'=')
      ;
  
  formalParameters
  
negative.code:     'while' '(' condition ')' (block | ';')
      ;
  
  //do iterators are allowed to be mutable and/or optional
  doIterator
      : annotation* variable initializer
      ;
  
  tryCatchFinally
  