anchor.diff:      |   enumDeclaration
       ;
   
  -/* We use rule this even for void methods which cannot have [] after parameters.
  -   This simplifies grammar and we can consider void to be a type, which
  -   renders the [] matching as a context-sensitive issue or a semantic check
  -   for invalid return type after parsing.
  +/**
  + *  t   0: all, 1: normal method, 2: abstract method
    */
  -methodDeclaration
  -    :   (type|VOID) identifier formalParameters (LBRACK RBRACK)*
  +methodDeclaration[int t]
  +    :   (type|VOID) identifier formalParameters
           (THROWS qualifiedClassNameList)?
  -        (   methodBody
  -        |   SEMI
  +        (
  +            { 0 == $t || 1 == $t }?
  +            methodBody
  +        |
  +            { 0 == $t || 2 == $t }?
  +            sep
           )
       ;
   
  -genericMethodDeclaration
  -    :   typeParameters methodDeclaration
  +genericMethodDeclaration[int t]
  +    :   typeParameters methodDeclaration[$t]
       ;
   
   constructorDeclaration
  
positive.code:     ;
  
  memberDeclaration
      :   methodDeclaration
      |   genericMethodDeclaration
      |   fieldDeclaration
      |   constructorDeclaration
      |   genericConstructorDeclaration
  
negative.code: 
  interfaceMemberDeclaration
      :   constDeclaration
      |   methodDeclaration[2]
      |   genericMethodDeclaration[2]
      |   interfaceDeclaration
      |   annotationTypeDeclaration
      |   classDeclaration
  