anchor.diff:  UNICODE_ESC
       :   '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
       ;
  +
  +fragment
  +DIGIT
  +    : ('0'..'9')
  +    ;
  +
  +fragment FLOAT_NO_EXP
  +    : INT_PART? FRAC_PART
  +    | INT_PART '.'
  +    ;
  +
  +
  +fragment FLOAT_EXP
  +    : ( INT_PART | FLOAT_NO_EXP ) EXPONENT
  +    ;
  +
  +
  +fragment INT_PART
  +    : DIGIT+
  +    ;
  +
  +
  +fragment FRAC_PART
  +    : '.' DIGIT+
  +    ;
  
positive.code:     | '0' ('b' | 'B') ('0' | '1')+
      ;
  
  FLOAT
      :   ('0'..'9')+ '.' ('0'..'9')* EXPONENT?
      |   '.' ('0'..'9')+ EXPONENT?
      |   ('0'..'9')+ EXPONENT
      ;
  
  COMMENT
  
negative.code: CHAR:  '\'' ( ESC_SEQ | ~('\''|'\\') ) '\''
      ;
  
  // fragment rules
  // these are helper rules that are used by other lexical rules
  // they do NOT generate tokens
  fragment
  EXPONENT : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;
  
  