anchor.diff:  
   argList : LPAREN (WS? arg (WS? ',' WS? arg)*)? WS? RPAREN;
   
  -arg : (OPTIONAL WS)? ((BYVAL | BYREF) WS)? (PARAMARRAY WS)? ambiguousIdentifier (WS? LPAREN WS? RPAREN)? (WS? asTypeClause)? (WS? argDefaultValue)?;
  +arg : (OPTIONAL WS)? ((BYVAL | BYREF) WS)? (PARAMARRAY WS)? ambiguousIdentifier typeHint? (WS? LPAREN WS? RPAREN)? (WS? asTypeClause)? (WS? argDefaultValue)?;
   
   argDefaultValue : EQ WS? valueStmt;
   
  
positive.code: ON_LOCAL_ERROR : O N WS L O C A L WS E R R O R;
  OPEN : O P E N;
  OPTIONAL : O P T I O N A L;
  OPTION_BASE : O P T I O N WS B A S E WS;
  OPTION_EXPLICIT : O P T I O N WS E X P L I C I T;
  OPTION_COMPARE : O P T I O N WS C O M P A R E WS;
  OPTION_PRIVATE_MODULE : O P T I O N WS P R I V A T E WS M O D U L E;
  OR : O R;
  OUTPUT : O U T P U T;
  
negative.code: fragment AMPM : WS? (A M | P M | A | P);
  
  // whitespace, line breaks, comments, ...
  LINE_CONTINUATION : [ \t]+ UNDERSCORE '\r'? '\n' -> skip;
  NEWLINE : [\r\n\u2028\u2029]+;
  REMCOMMENT : COLON? REM WS (LINE_CONTINUATION | ~[\r\n\u2028\u2029])*;
  COMMENT : SINGLEQUOTE (LINE_CONTINUATION | ~[\r\n\u2028\u2029])*;
  SINGLEQUOTE : '\'';
  COLON : ':';
  UNDERSCORE : '_';
  WS : ([ \t] | LINE_CONTINUATION)+;
  
  // identifier
  