anchor.diff:      | expression
       ;
   
  +expression
  +    : assignmentExpression
  +    ;
  +
   //Even though it looks like this is non-associative
   //assignment, it is actually right associative because
   //assignable can be an assignment
   //Note that = is not really an assignment operator, but 
   //can be used to init locals
  -expression 
  +assignmentExpression 
       : implicationExpression 
         ( ('=' | ':=' | '.=' | '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | '&&=' | '||=' | '?=') assignable )?
       ;
  
positive.code:     ;
      
  doWhile
      :   
      ('do' ('(' doIterator ')')? block? )?  
      'while' '(' condition ')' (block | ';')
      ;
  
  //do iterators are allowed to be mutable and/or optional
  
negative.code:     ;
      
  typeDeclaration
      : classDeclaration
      | interfaceDeclaration
      | aliasDeclaration
      ;
  