anchor.diff:  t_COLON : COLON { offsetTracker.advanceInLine(1); };
   t_AT : AT { offsetTracker.advanceInLine(1); };
   
  +t_ASSIGN : ASSIGN { offsetTracker.advanceInLine(1); };
  +
   t_LPAREN : LPAREN { offsetTracker.advanceInLine(1); bracketStack.push(LPAREN); };
   t_RPAREN : RPAREN { offsetTracker.advanceInLine(1); bracketStack.pop(); };
   t_LCURLY : LCURLY { offsetTracker.advanceInLine(1); bracketStack.push(LCURLY); };
  
positive.code: 
  //TODO-AC: is it possible to attach these actions to the actual lexer rules?  I don't think the lexer and
  //  the parser are kept in sync (buffering, backtracking, etc)
  
  t_PLUS : PLUS { offsetTracker.advanceInLine(1); };
  t_MINUS : MINUS { offsetTracker.advanceInLine(1); };
  
negative.code: 
  //// LEXER /////////////////////////////////////////////////////////////////////
  
  //NB: not distinguishing between decimal and hex numbers at this level
  
  //NB: only unconditional keywords - the rest will be treated as identifiers and handled in the parser
  
  BREAK: 'break';
  CASE: 'case';
  CATCH: 'catch';
  CLASSDEF: 'classdef';
  CONTINUE: 'continue';
  ELSE: 'else';
  ELSEIF: 'elseif';
  END: 'end';
  FOR: 'for';
  FUNCTION: 'function';
  GLOBAL: 'global';
  IF: 'if';
  OTHERWISE: 'otherwise';
  PARFOR: 'parfor';
  PERSISTENT: 'persistent';
  RETURN: 'return';
  SWITCH: 'switch';
  TRY: 'try';
  WHILE: 'while';
  
  fragment LETTER : 'a'..'z' | 'A'..'Z';
  fragment DIGIT : '0'..'9';
  