anchor.diff:  fragment AMPM : WS? (A M | P M | A | P);
   
   // whitespace, line breaks, comments, ...
  -LINE_CONTINUATION : [ \t]+ '_' '\r'? '\n' -> skip;
  -NEWLINE : (':' WS?) | (WS? ('\r'? '\n') WS?);
  -COMMENT : WS? ('\'' | ':'? REM WS) (LINE_CONTINUATION | ~('\n' | '\r'))* -> skip;
  +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
  
positive.code: ;
  
  ifBlockStmt : 
  	IF WS ifConditionStmt WS THEN NEWLINE+ 
  	(block NEWLINE+)?
  ;
  
  ifConditionStmt : valueStmt;
  
  ifElseIfBlockStmt : 
  	ELSEIF WS ifConditionStmt WS THEN NEWLINE+ 
  	(block NEWLINE+)?
  ;
  
  ifElseBlockStmt : 
  	ELSE NEWLINE+ 
  	(block NEWLINE+)?
  ;
  
  implementsStmt : IMPLEMENTS WS ambiguousIdentifier;
  
negative.code: 	| loadStmt
  	| lockStmt
  	| lsetStmt
  	| macroStmt
  	| midStmt
  	| mkdirStmt
  	| nameStmt
  