anchor.diff:      | typeSpec COMMA expr # sizedArray
       ;
   
  -procMethodDecl: annotations? (EXTERN|INLINE)?
  -    (PROC|((ABSTRACT|VIRTUAL|OVERRIDE)? METHOD)) bareName
  -    OPEN_PAREN procArgsDecl CLOSE_PAREN statement* END_PROC;
  +procDecl: annotations? (EXTERN|INLINE)? procHeader statement* END_PROC;
  +
  +procOrMethodDecl: annotations? (EXTERN|INLINE)? (procHeader|methodHeader)
  +    statement* END_PROC;
  +
  +procHeader: PROC bareName procOrMethodArgs;
  +methodHeader: (ABSTRACT|VIRTUAL|OVERRIDE)? METHOD bareName procOrMethodArgs;
  +
  +procOrMethodArgs: OPEN_PAREN procArgsDecl CLOSE_PAREN (COLON typeSpec)?;
   
   procMethodStructDecl: annotations? (EXTERN|INLINE)?
       (PROC|METHOD) bareName
  -    OPEN_PAREN procArgsDecl CLOSE_PAREN statement* END_PROC;
  +    OPEN_PAREN procArgsDecl CLOSE_PAREN (COLON typeSpec)? statement* END_PROC;
  +
  +interfaceProcOrMethodDecl: procMethodStructDecl;
   
   statement: RETURN expr? #statementReturn
       | constDecl #statementConstDecl
  
positive.code: 
  
  globalDecl: constDecl
      | procMethodDecl
      | typeDecl
      | visibilityStmt
      | varDecl
  
negative.code:     END_INTERFACE
      ;
  
  interfaceBodyStmt: interfaceProcOrMethodDecl
      | STATIC_IF boolExpr THEN interfaceBodyStmt* (ELSE interfaceBodyStmt*)? END_IF
      ;
  
  