anchor.diff:  //can't tell whether a member body is a block
   //or a named argument list until after we
   //finish parsing it
  -memberBody
  +memberBody options {memoize=true;}
       : (namedArguments) => namedArguments //first try to match with no directives or control structures
       | (block) => block //if there is a "return" directives control structures, it must be a block
       //if it doesn't match as a block or as a named argument
  
positive.code: 
  //special rule for syntactic predicate
  //to distinguish between a formal 
  //parameter list and a parenthisized body 
  //of an inline callable argument
  //be careful with this one, since it 
  //matches "()", which can also be an 
  
negative.code:       )
      ;
      
  annotatedDeclarationOrStatement options {memoize=true;}
      : (annotatedDeclarationStart) => annotatedDeclaration
      | (controlStructure | expressionStatement | specificationStatement)
      ;
  