anchor.diff:                  | '\\f'
                   | '\\n'
                   | '\\r'
  -                | '\\t'     
  +                | '\\t'
                   | '\\u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT;
   
   fragment HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F');
   
  -NUMBER  : INT FRAC? EXP?;
  +fragment NUMBER  : INT FRAC? EXP?;
   
   fragment INT : '-'? DIGITS;
   
  
positive.code:  * Contributors:
   *     Blaise Doughan - 2.4 - initial implementation
   ******************************************************************************/
   
  grammar JSON;
  
  OBJECT : '{' (PAIR (',' PAIR)*)? '}';
   
  PAIR : WHITE_SPACE STRING WHITE_SPACE ':' WHITE_SPACE VALUE WHITE_SPACE;
  
  ARRAY : '[' (VALUE (',' VALUE)*)? ']';
  
  VALUE   :       STRING
          |       NUMBER
          |       OBJECT
          |       ARRAY
          |       'true'
          |       'false'
          |       'null'
          ;
  
  STRING  : '"' CHAR* '"';
  
  fragment CHAR   : ~('"'| '\\')
                  | '\\"'
  
negative.code: 
  fragment EXP : E DIGITS;
  
  fragment DIGITS : '0'..'9'+;
  
  fragment E :('e'|'E') ('+'|'-')?;
  
  fragment WHITESPACE : (' ' | '\r' | '\t' | '\u000C' | '\n')*;