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: 
  fragment EXP : E DIGITS;
  
  fragment DIGITS : '0'..'9'*;
  
  fragment E :('e'|'E') ('+'|'-')?;
  
  fragment WHITE_SPACE    : (' ' | '\r' | '\t' | '\u000C' | '\n')*;
negative.code:  * Contributors:
   *     Blaise Doughan - 2.4 - initial implementation
   ******************************************************************************/
  
  grammar JSON;
  options
  {
          language=Java;
          output=AST;
  }
  
  OBJECT : '{' (PAIR (',' PAIR)*)? '}';
  
  fragment PAIR : WHITESPACE STRING WHITESPACE ':' WHITESPACE VALUE WHITESPACE;
  
  fragment ARRAY : '[' WHITESPACE (VALUE ( WHITESPACE ',' WHITESPACE VALUE)*)? WHITESPACE ']';
  
  fragment VALUE : STRING
          |        NUMBER
          |        OBJECT
          |        ARRAY
          |        'true'
          |        'false'
          |        'null';
  
  fragment STRING  : '"' CHAR* '"';
  
  fragment CHAR   : ~('"'| '\\')
                  | '\\"'
  