anchor.diff:     ;
   
   asTypeClause
  -   : AS WS (NEW WS)? type (WS fieldLength)?
  +   : AS (NEW)? type (fieldLength)?
      ;
   
   baseType
  
positive.code: 
  
  NEWLINE
     : WS? ('\r'? '\n' | COLON ' ') WS?
     ;
  
  
  COMMENT
     : WS? ('\'' | COLON? REM ' ') (LINE_CONTINUATION | ~ ('\n' | '\r'))* -> skip
     ;
  
  
  WS
     : [ \t] +
     ;
  
  // letters
  
negative.code:    ;
  
  filecopyStmt
     : FILECOPY valueStmt COMMA valueStmt
     ;
  
  forEachStmt
     : FOR EACH ambiguousIdentifier typeHint? IN valueStmt NEWLINE + (block NEWLINE +)? NEXT (ambiguousIdentifier)?
     ;
  
  forNextStmt
     : FOR ambiguousIdentifier typeHint? (asTypeClause)? EQ valueStmt TO valueStmt (STEP valueStmt)? NEWLINE + (block NEWLINE +)? NEXT (ambiguousIdentifier)?
     ;
  
  functionStmt
     : (visibility)? (STATIC)? FUNCTION ambiguousIdentifier (argList)? (asTypeClause)? NEWLINE + (block NEWLINE +)? END_FUNCTION
     ;
  
  getStmt
     : GET valueStmt COMMA valueStmt? COMMA valueStmt
     ;
  
  goSubStmt
     : GOSUB valueStmt
     ;
  
  goToStmt
     : GOTO valueStmt
     ;
  
  ifThenElseStmt
     : IF ifConditionStmt THEN blockStmt (ELSE blockStmt)? # inlineIfThenElse
     | ifBlockStmt ifElseIfBlockStmt* ifElseBlockStmt? END_IF # blockIfThenElse
     ;
  
  ifBlockStmt
     : IF ifConditionStmt THEN NEWLINE + (block NEWLINE +)?
     ;
  
  ifConditionStmt
  