anchor.diff:  
   //a functor expression that can appear as the RHS of an 
   //assignment, in an argument list, or in parens
  -assignableFunctor 
  +functor 
       : functorHeader? formalParameters functorBody
       ;
   
   //a functor expression that can appear inside an expression
  -//or as a method argument without the need for parens
  -primaryFunctor 
  +//without the need for parens
  +/*primaryFunctor 
       : functorHeader? formalParameters block
  -    ;
  +    ;*/
   
   //shortcut functor expression that makes the parameter list 
   //optional, but can appear only using the special smalltalk
  
positive.code:     ;
  
  //special rule for syntactic predicates
  assignableFunctorStart
      : 'functor' | formalParameterStart
      ;
  
  //special rule for syntactic predicates
  primaryFunctorStart
      : 'functor' | '(' (declarationStart | ')' '{')
      ;
  
  //special rule for syntactic predicates
  declarationStart
  
negative.code:     : declarationModifier | userAnnotation
      ;
  
  //TODO: we could minimize backtracking by limiting the 
  //kind of expressions that can appear as arguments to
  //the annotation
  userAnnotation 
      : annotationName ( arguments | literal | reflectedBase (reflectedMember)* )?
      ;
  