anchor.diff:  
   typeAbbreviation
       : DEFAULT_OP
  -    -> ^(TYPE_NAME UIDENTIFIER[$DEFAULT_OP,"Optional"])
  +    -> ^(TYPE_NAME[$DEFAULT_OP,"Optional"])
       | ARRAY 
  -    -> ^(TYPE_NAME UIDENTIFIER[$ARRAY,"Sequence"])
  +    -> ^(TYPE_NAME[$ARRAY,"Sequence"])
       //| '[' dimension ']'
       ;
   
  
positive.code: //finish parsing it
  memberBody[Object mt] options { backtrack=true; memoize=true; }
      : namedArguments //first try to match with no directives or control structures
      -> ^(BLOCK /*^(DIRECTIVE*/ ^(RETURN ^(EXPRESSION /*^(PRIMARY*/ ^(INVOCATION_EXPRESSION /*^(PRIMARY*/{$mt} namedArguments))))
      | block //if there is a "return" directive or control structure, it must be a block
      //if it doesn't match as a block or as a named argument
      //list, then there must be an error somewhere, so parse
  
negative.code:     POSITIONAL_ARGUMENT;
      POSITIONAL_ARGUMENT_LIST;
      POSTFIX_OPERATOR_EXPRESSION;
      SATISFIES_EXPRESSION;
      SEQUENCED_ARGUMENT;
      SEQUENCED_TYPE;
  