anchor.diff:      | statement
       ;
   
  -functorHeader
  -    : 'functor' annotations? (type | 'void')
  +reference
  +    : 'ref' expression
       ;
   
   //a functor expression that can appear as the RHS of an 
   //assignment, in an argument list, or in parens
   functor 
  +    : ( (functorWithParametersStart)=>functorWithParameters | functorWithoutParameters )
  +    ;
  +
  +functorHeader
  +    : 'op' declarationModifier* (type | 'void')
  +    ;
  +
  +functorWithParameters
       : functorHeader? formalParameters functorBody
       ;
   
  +functorWithParametersStart
  +    :functorHeader? formalParameterStart
  +    ;
  +
  +functorWithoutParameters
  +    : 'op' functorBody
  +    ;
   //a functor expression that can appear inside an expression
   //without the need for parens
   /*primaryFunctor 
  
positive.code: //kind of expressions that can appear as arguments to
  //the annotation
  userAnnotation 
      : annotationName ( annotationArguments | arguments )?
      ;
  
  annotationArguments
      : ( literal | reflectedLiteral )+
      ;
  
  //TODO: why can't I get the typeArguments in here??
  reflectedLiteral
      : qualifiedTypeName reflectedMember
      | reflectedBase
      ;
  
  qualifiedTypeName
  
negative.code: 
  //special rule for syntactic predicates
  functorStart
      : 'op' | formalParameterStart
      ;
  
  //special rule for syntactic predicates
  /*primaryFunctorStart
      : 'op' | '(' (declarationStart | ')' '{')
      ;*/
  
  //special rule for syntactic predicates
  