From 2c7cc620d4975521dc5d1c54ea1c0b2247b4fdad Mon Sep 17 00:00:00 2001 From: Inderjeet Singh Date: Wed, 4 Feb 2009 01:56:28 +0000 Subject: [PATCH] Exposed API for JsonParser and added methods to Gson to deserialize from a parse tree. --- gson/pom.xml | 4 +- gson/src/main/java/com/google/gson/Gson.java | 57 +- .../main/java/com/google/gson/JsonParser.java | 716 +---- .../java/com/google/gson/JsonParserImpl.java | 668 +++++ ...ants.java => JsonParserImplConstants.java} | 136 +- ...r.java => JsonParserImplTokenManager.java} | 2294 ++++++++--------- gson/src/main/javacc/JsonParser.jj | 6 +- .../java/com/google/gson/JsonParserTest.java | 29 + 8 files changed, 2026 insertions(+), 1884 deletions(-) create mode 100644 gson/src/main/java/com/google/gson/JsonParserImpl.java rename gson/src/main/java/com/google/gson/{JsonParserConstants.java => JsonParserImplConstants.java} (86%) mode change 100755 => 100644 rename gson/src/main/java/com/google/gson/{JsonParserTokenManager.java => JsonParserImplTokenManager.java} (95%) mode change 100755 => 100644 create mode 100644 gson/src/test/java/com/google/gson/JsonParserTest.java diff --git a/gson/pom.xml b/gson/pom.xml index 1a3bd8cb..0c61c854 100644 --- a/gson/pom.xml +++ b/gson/pom.xml @@ -118,7 +118,7 @@ - + org.apache.maven.plugins maven-jxr-plugin diff --git a/gson/src/main/java/com/google/gson/Gson.java b/gson/src/main/java/com/google/gson/Gson.java index a9c11271..60f755d9 100644 --- a/gson/src/main/java/com/google/gson/Gson.java +++ b/gson/src/main/java/com/google/gson/Gson.java @@ -363,16 +363,65 @@ public final class Gson { @SuppressWarnings("unchecked") public T fromJson(Reader json, Type typeOfT) throws JsonParseException { try { - JsonParser parser = new JsonParser(json); - JsonElement root = parser.parse(); + JsonElement root = JsonParser.parse(json); JsonDeserializationContext context = new JsonDeserializationContextDefault( createDefaultObjectNavigatorFactory(), deserializers, objectConstructor); T target = (T) context.deserialize(root, typeOfT); return target; - } catch (TokenMgrError e) { + } catch (StackOverflowError e) { throw new JsonParseException("Failed parsing JSON source: " + json + " to Json", e); - } catch (ParseException e) { + } catch (OutOfMemoryError e) { throw new JsonParseException("Failed parsing JSON source: " + json + " to Json", e); + } + } + + /** + * This method deserializes the Json read from the specified parse tree into an object of the + * specified type. It is not suitable to use if the specified class is a generic type since it + * will not have the generic type information because of the Type Erasure feature of Java. + * Therefore, this method should not be used if the desired type is a generic type. Note that + * this method works fine if the any of the fields of the specified object are generics, just the + * object itself should not be a generic type. For the cases when the object is of generic type, + * invoke {@link #fromJson(JsonElement, Type)}. + * @param the type of the desired object + * @param json the root of the parse tree of {@link JsonElement}s from which the object is to + * be deserialized + * @param classOfT The class of T + * @return an object of type T from the json + * @throws JsonParseException if json is not a valid representation for an object of type typeOfT + * @since 1.3 + */ + @SuppressWarnings("unchecked") + public T fromJson(JsonElement json, Class classOfT) throws JsonParseException { + T target = classOfT.cast(fromJson(json, (Type) classOfT)); + return target; + } + + /** + * This method deserializes the Json read from the specified parse tree into an object of the + * specified type. This method is useful if the specified object is a generic type. For + * non-generic objects, use {@link #fromJson(JsonElement, Class)} instead. + * + * @param the type of the desired object + * @param json the root of the parse tree of {@link JsonElement}s from which the object is to + * be deserialized + * @param typeOfT The specific genericized type of src. You can obtain this type by using the + * {@link com.google.gson.reflect.TypeToken} class. For example, to get the type for + * {@code Collection}, you should use: + *
+   * Type typeOfT = new TypeToken<Collection<Foo>>(){}.getType();
+   * 
+ * @return an object of type T from the json + * @throws JsonParseException if json is not a valid representation for an object of type typeOfT + * @since 1.3 + */ + @SuppressWarnings("unchecked") + public T fromJson(JsonElement json, Type typeOfT) throws JsonParseException { + try { + JsonDeserializationContext context = new JsonDeserializationContextDefault( + createDefaultObjectNavigatorFactory(), deserializers, objectConstructor); + T target = (T) context.deserialize(json, typeOfT); + return target; } catch (StackOverflowError e) { throw new JsonParseException("Failed parsing JSON source: " + json + " to Json", e); } catch (OutOfMemoryError e) { diff --git a/gson/src/main/java/com/google/gson/JsonParser.java b/gson/src/main/java/com/google/gson/JsonParser.java index 0dc6c748..995711a0 100755 --- a/gson/src/main/java/com/google/gson/JsonParser.java +++ b/gson/src/main/java/com/google/gson/JsonParser.java @@ -1,668 +1,64 @@ -/* Generated By:JavaCC: Do not edit this line. JsonParser.java */ +/* + * Copyright (C) 2009 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.google.gson; -@SuppressWarnings("all") -final class JsonParser implements JsonParserConstants { +import java.io.Reader; +import java.io.StringReader; - final public JsonElement parse() throws ParseException { - JsonElement json = null; - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 25: - json = JsonObject(); - break; - case 29: - json = JsonArray(); - break; - case DIGITS: - case NAN: - case INFINITY: - case BOOLEAN: - case SINGLE_QUOTE_LITERAL: - case DOUBLE_QUOTE_LITERAL: - case 31: - json = JsonPrimitive(); - break; - case NULL: - json = JsonNull(); - break; - default: - jj_la1[0] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - {if (true) return json;} - throw new Error("Missing return statement in function"); +/** + * A parser to parse Json into a parse tree of {@link JsonElement}s + * + * @author Inderjeet Singh + * @author Joel Leitch + * @since 1.3 + */ +public final class JsonParser { + + /** + * Parses the specified JSON string into a parse tree + * + * @param json JSON text + * @return a parse tree of {@link JsonElement}s corresponding to the specified JSON + * @throws JsonParseException if the specified text is not valid JSON + * @since 1.3 + */ + public static JsonElement parse(String json) throws JsonParseException { + return parse(new StringReader(json)); } - - final private JsonObject JsonObject() throws ParseException { - JsonObject o = new JsonObject(); - jj_consume_token(25); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - case SINGLE_QUOTE_LITERAL: - case DOUBLE_QUOTE_LITERAL: - Members(o); - break; - default: - jj_la1[1] = jj_gen; - ; - } - jj_consume_token(26); - {if (true) return o;} - throw new Error("Missing return statement in function"); - } - - final private JsonNull JsonNull() throws ParseException { - Token t; - t = jj_consume_token(NULL); - {if (true) return JsonNull.createJsonNull();} - throw new Error("Missing return statement in function"); - } - - final private void Members(JsonObject o) throws ParseException { - Pair(o); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 27: - jj_consume_token(27); - Members(o); - break; - default: - jj_la1[2] = jj_gen; - ; - } - } - - final private void Pair(JsonObject o) throws ParseException { - JsonPrimitive property; - JsonElement value; - property = JsonMemberName(); - jj_consume_token(28); - value = JsonValue(); - o.add(property.getAsString(), value); - } - - final private JsonPrimitive JsonMemberName() throws ParseException { - Token t; JsonPrimitive value; - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - t = jj_consume_token(IDENTIFIER); - {if (true) return new JsonPrimitive(t.image);} - break; - case SINGLE_QUOTE_LITERAL: - case DOUBLE_QUOTE_LITERAL: - value = JsonString(); - {if (true) return value;} - break; - default: - jj_la1[3] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - throw new Error("Missing return statement in function"); - } - - final private JsonArray JsonArray() throws ParseException { - JsonArray array = new JsonArray(); - jj_consume_token(29); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case DIGITS: - case NULL: - case NAN: - case INFINITY: - case BOOLEAN: - case SINGLE_QUOTE_LITERAL: - case DOUBLE_QUOTE_LITERAL: - case 25: - case 29: - case 31: - Elements(array); - break; - default: - jj_la1[4] = jj_gen; - ; - } - jj_consume_token(30); - array.reverse(); - {if (true) return array;} - throw new Error("Missing return statement in function"); - } - - final private void Elements(JsonArray array) throws ParseException { - JsonElement element; - element = JsonValue(); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 27: - jj_consume_token(27); - Elements(array); - break; - default: - jj_la1[5] = jj_gen; - ; - } - array.add(element); - } - - final private JsonElement JsonValue() throws ParseException { - JsonElement o = null; - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case SINGLE_QUOTE_LITERAL: - case DOUBLE_QUOTE_LITERAL: - o = JsonString(); - break; - case DIGITS: - case NAN: - case INFINITY: - case 31: - o = JsonNumber(); - break; - case 25: - o = JsonObject(); - break; - case 29: - o = JsonArray(); - break; - case BOOLEAN: - o = JsonBoolean(); - break; - case NULL: - o = JsonNull(); - break; - default: - jj_la1[6] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - {if (true) return o;} - throw new Error("Missing return statement in function"); - } - - final private JsonPrimitive JsonBoolean() throws ParseException { - Token t; - t = jj_consume_token(BOOLEAN); - boolean value = Boolean.valueOf(t.image); - {if (true) return new JsonPrimitive(value);} - throw new Error("Missing return statement in function"); - } - - final private JsonPrimitive JsonPrimitive() throws ParseException { - JsonPrimitive value; - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case SINGLE_QUOTE_LITERAL: - case DOUBLE_QUOTE_LITERAL: - value = JsonString(); - {if (true) return value;} - break; - case DIGITS: - case NAN: - case INFINITY: - case 31: - value = JsonNumber(); - {if (true) return value;} - break; - case BOOLEAN: - value = JsonBoolean(); - {if (true) return value;} - break; - default: - jj_la1[7] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - throw new Error("Missing return statement in function"); - } - - final private JsonPrimitive JsonNumber() throws ParseException { - String intpart = null, - fracpart = null, - exppart = null; - JsonPrimitive value; - if (jj_2_1(2)) { - value = JsonSpecialNumbers(); - {if (true) return value;} - } else { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case DIGITS: - case 31: - intpart = JsonInt(); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 32: - fracpart = JsonFrac(); - break; - default: - jj_la1[8] = jj_gen; - ; - } - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case E: - exppart = JsonExp(); - break; - default: - jj_la1[9] = jj_gen; - ; - } - Number n; - if (exppart != null || fracpart != null) { - fracpart = (fracpart == null) ? "" : fracpart; - exppart = (exppart == null) ? "" : exppart; - n = new java.math.BigDecimal(intpart + fracpart + exppart); - } else { - n = new java.math.BigInteger(intpart); - } - {if (true) return new JsonPrimitive(n);} - break; - default: - jj_la1[10] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } - throw new Error("Missing return statement in function"); - } - - final private JsonPrimitive JsonSpecialNumbers() throws ParseException { - boolean negative = false; - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case NAN: - jj_consume_token(NAN); - {if (true) return new JsonPrimitive(Double.NaN);} - break; - case INFINITY: - case 31: - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 31: - jj_consume_token(31); - negative = true; - break; - default: - jj_la1[11] = jj_gen; - ; - } - jj_consume_token(INFINITY); - {if (true) return new JsonPrimitive(negative ? Double.NEGATIVE_INFINITY : Double.POSITIVE_INFINITY);} - break; - default: - jj_la1[12] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - throw new Error("Missing return statement in function"); - } - - final private String JsonInt() throws ParseException { - String digits; - boolean negative = false; - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 31: - jj_consume_token(31); - negative = true; - break; - default: - jj_la1[13] = jj_gen; - ; - } - digits = Digits(); - if(negative) - {if (true) return "-" + digits;} - {if (true) return digits;} - throw new Error("Missing return statement in function"); - } - - final private String JsonFrac() throws ParseException { - String digits; - jj_consume_token(32); - digits = Digits(); - {if (true) return "." + digits;} - throw new Error("Missing return statement in function"); - } - - final private String JsonExp() throws ParseException { - Token t; - String digits; - t = jj_consume_token(E); - digits = Digits(); - {if (true) return t.image + digits;} - throw new Error("Missing return statement in function"); - } - - final private String Digits() throws ParseException { - Token t; - t = jj_consume_token(DIGITS); - {if (true) return t.image;} - throw new Error("Missing return statement in function"); - } - - final private JsonPrimitive JsonString() throws ParseException { - Token t; - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case SINGLE_QUOTE_LITERAL: - t = jj_consume_token(SINGLE_QUOTE_LITERAL); - break; - case DOUBLE_QUOTE_LITERAL: - t = jj_consume_token(DOUBLE_QUOTE_LITERAL); - break; - default: - jj_la1[14] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - String value = StringUnmarshaller.unmarshall(t.image); - {if (true) return new JsonPrimitive(value);} - throw new Error("Missing return statement in function"); - } - - final private boolean jj_2_1(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_1(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(0, xla); } - } - - final private boolean jj_3R_4() { - if (jj_scan_token(31)) return true; - return false; - } - - final private boolean jj_3R_3() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_4()) jj_scanpos = xsp; - if (jj_scan_token(INFINITY)) return true; - return false; - } - - final private boolean jj_3_1() { - if (jj_3R_1()) return true; - return false; - } - - final private boolean jj_3R_2() { - if (jj_scan_token(NAN)) return true; - return false; - } - - final private boolean jj_3R_1() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_2()) { - jj_scanpos = xsp; - if (jj_3R_3()) return true; - } - return false; - } - - public JsonParserTokenManager token_source; - SimpleCharStream jj_input_stream; - public Token token, jj_nt; - private int jj_ntk; - private Token jj_scanpos, jj_lastpos; - private int jj_la; - public boolean lookingAhead = false; - private boolean jj_semLA; - private int jj_gen; - final private int[] jj_la1 = new int[15]; - static private int[] jj_la1_0; - static private int[] jj_la1_1; - static { - jj_la1_0(); - jj_la1_1(); - } - private static void jj_la1_0() { - jj_la1_0 = new int[] {0xa20187c0,0x18800,0x8000000,0x18800,0xa20187c0,0x8000000,0xa20187c0,0x80018740,0x0,0x20,0x80000040,0x80000000,0x80000300,0x80000000,0x18000,}; - } - private static void jj_la1_1() { - jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,}; - } - final private JJCalls[] jj_2_rtns = new JJCalls[1]; - private boolean jj_rescan = false; - private int jj_gc = 0; - - public JsonParser(java.io.InputStream stream) { - this(stream, null); - } - public JsonParser(java.io.InputStream stream, String encoding) { - try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } - token_source = new JsonParserTokenManager(jj_input_stream); - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for (int i = 0; i < 15; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - public void ReInit(java.io.InputStream stream) { - ReInit(stream, null); - } - public void ReInit(java.io.InputStream stream, String encoding) { - try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } - token_source.ReInit(jj_input_stream); - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for (int i = 0; i < 15; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - public JsonParser(java.io.Reader stream) { - jj_input_stream = new SimpleCharStream(stream, 1, 1); - token_source = new JsonParserTokenManager(jj_input_stream); - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for (int i = 0; i < 15; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - public void ReInit(java.io.Reader stream) { - jj_input_stream.ReInit(stream, 1, 1); - token_source.ReInit(jj_input_stream); - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for (int i = 0; i < 15; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - public JsonParser(JsonParserTokenManager tm) { - token_source = tm; - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for (int i = 0; i < 15; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - public void ReInit(JsonParserTokenManager tm) { - token_source = tm; - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for (int i = 0; i < 15; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - final private Token jj_consume_token(int kind) throws ParseException { - Token oldToken; - if ((oldToken = token).next != null) token = token.next; - else token = token.next = token_source.getNextToken(); - jj_ntk = -1; - if (token.kind == kind) { - jj_gen++; - if (++jj_gc > 100) { - jj_gc = 0; - for (int i = 0; i < jj_2_rtns.length; i++) { - JJCalls c = jj_2_rtns[i]; - while (c != null) { - if (c.gen < jj_gen) c.first = null; - c = c.next; - } - } - } - return token; - } - token = oldToken; - jj_kind = kind; - throw generateParseException(); - } - - static private final class LookaheadSuccess extends java.lang.Error { } - final private LookaheadSuccess jj_ls = new LookaheadSuccess(); - final private boolean jj_scan_token(int kind) { - if (jj_scanpos == jj_lastpos) { - jj_la--; - if (jj_scanpos.next == null) { - jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken(); - } else { - jj_lastpos = jj_scanpos = jj_scanpos.next; - } - } else { - jj_scanpos = jj_scanpos.next; - } - if (jj_rescan) { - int i = 0; Token tok = token; - while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; } - if (tok != null) jj_add_error_token(kind, i); - } - if (jj_scanpos.kind != kind) return true; - if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls; - return false; - } - - final public Token getNextToken() { - if (token.next != null) token = token.next; - else token = token.next = token_source.getNextToken(); - jj_ntk = -1; - jj_gen++; - return token; - } - - final public Token getToken(int index) { - Token t = lookingAhead ? jj_scanpos : token; - for (int i = 0; i < index; i++) { - if (t.next != null) t = t.next; - else t = t.next = token_source.getNextToken(); - } - return t; - } - - final private int jj_ntk() { - if ((jj_nt=token.next) == null) - return (jj_ntk = (token.next=token_source.getNextToken()).kind); - else - return (jj_ntk = jj_nt.kind); - } - - private java.util.Vector jj_expentries = new java.util.Vector(); - private int[] jj_expentry; - private int jj_kind = -1; - private int[] jj_lasttokens = new int[100]; - private int jj_endpos; - - private void jj_add_error_token(int kind, int pos) { - if (pos >= 100) return; - if (pos == jj_endpos + 1) { - jj_lasttokens[jj_endpos++] = kind; - } else if (jj_endpos != 0) { - jj_expentry = new int[jj_endpos]; - for (int i = 0; i < jj_endpos; i++) { - jj_expentry[i] = jj_lasttokens[i]; - } - boolean exists = false; - for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements();) { - int[] oldentry = (int[])(e.nextElement()); - if (oldentry.length == jj_expentry.length) { - exists = true; - for (int i = 0; i < jj_expentry.length; i++) { - if (oldentry[i] != jj_expentry[i]) { - exists = false; - break; - } - } - if (exists) break; - } - } - if (!exists) jj_expentries.addElement(jj_expentry); - if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind; - } - } - - public ParseException generateParseException() { - jj_expentries.removeAllElements(); - boolean[] la1tokens = new boolean[33]; - for (int i = 0; i < 33; i++) { - la1tokens[i] = false; - } - if (jj_kind >= 0) { - la1tokens[jj_kind] = true; - jj_kind = -1; - } - for (int i = 0; i < 15; i++) { - if (jj_la1[i] == jj_gen) { - for (int j = 0; j < 32; j++) { - if ((jj_la1_0[i] & (1< jj_gen) { - jj_la = p.arg; jj_lastpos = jj_scanpos = p.first; - switch (i) { - case 0: jj_3_1(); break; - } - } - p = p.next; - } while (p != null); - } catch(LookaheadSuccess ls) { } + JsonParserImpl parser = new JsonParserImpl(json); + return parser.parse(); + } catch (TokenMgrError e) { + throw new JsonParseException("Failed parsing JSON source: " + json + " to Json", e); + } catch (ParseException e) { + throw new JsonParseException("Failed parsing JSON source: " + json + " to Json", e); + } catch (StackOverflowError e) { + throw new JsonParseException("Failed parsing JSON source: " + json + " to Json", e); + } catch (OutOfMemoryError e) { + throw new JsonParseException("Failed parsing JSON source: " + json + " to Json", e); } - jj_rescan = false; } - - final private void jj_save(int index, int xla) { - JJCalls p = jj_2_rtns[index]; - while (p.gen > jj_gen) { - if (p.next == null) { p = p.next = new JJCalls(); break; } - p = p.next; - } - p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla; - } - - static final class JJCalls { - int gen; - Token first; - int arg; - JJCalls next; - } - } diff --git a/gson/src/main/java/com/google/gson/JsonParserImpl.java b/gson/src/main/java/com/google/gson/JsonParserImpl.java new file mode 100644 index 00000000..cd61b682 --- /dev/null +++ b/gson/src/main/java/com/google/gson/JsonParserImpl.java @@ -0,0 +1,668 @@ +/* Generated By:JavaCC: Do not edit this line. JsonParserImpl.java */ +package com.google.gson; + +@SuppressWarnings("all") +final class JsonParserImpl implements JsonParserImplConstants { + + final public JsonElement parse() throws ParseException { + JsonElement json = null; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case 25: + json = JsonObject(); + break; + case 29: + json = JsonArray(); + break; + case DIGITS: + case NAN: + case INFINITY: + case BOOLEAN: + case SINGLE_QUOTE_LITERAL: + case DOUBLE_QUOTE_LITERAL: + case 31: + json = JsonPrimitive(); + break; + case NULL: + json = JsonNull(); + break; + default: + jj_la1[0] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + {if (true) return json;} + throw new Error("Missing return statement in function"); + } + + final private JsonObject JsonObject() throws ParseException { + JsonObject o = new JsonObject(); + jj_consume_token(25); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case IDENTIFIER: + case SINGLE_QUOTE_LITERAL: + case DOUBLE_QUOTE_LITERAL: + Members(o); + break; + default: + jj_la1[1] = jj_gen; + ; + } + jj_consume_token(26); + {if (true) return o;} + throw new Error("Missing return statement in function"); + } + + final private JsonNull JsonNull() throws ParseException { + Token t; + t = jj_consume_token(NULL); + {if (true) return JsonNull.createJsonNull();} + throw new Error("Missing return statement in function"); + } + + final private void Members(JsonObject o) throws ParseException { + Pair(o); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case 27: + jj_consume_token(27); + Members(o); + break; + default: + jj_la1[2] = jj_gen; + ; + } + } + + final private void Pair(JsonObject o) throws ParseException { + JsonPrimitive property; + JsonElement value; + property = JsonMemberName(); + jj_consume_token(28); + value = JsonValue(); + o.add(property.getAsString(), value); + } + + final private JsonPrimitive JsonMemberName() throws ParseException { + Token t; JsonPrimitive value; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case IDENTIFIER: + t = jj_consume_token(IDENTIFIER); + {if (true) return new JsonPrimitive(t.image);} + break; + case SINGLE_QUOTE_LITERAL: + case DOUBLE_QUOTE_LITERAL: + value = JsonString(); + {if (true) return value;} + break; + default: + jj_la1[3] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + throw new Error("Missing return statement in function"); + } + + final private JsonArray JsonArray() throws ParseException { + JsonArray array = new JsonArray(); + jj_consume_token(29); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DIGITS: + case NULL: + case NAN: + case INFINITY: + case BOOLEAN: + case SINGLE_QUOTE_LITERAL: + case DOUBLE_QUOTE_LITERAL: + case 25: + case 29: + case 31: + Elements(array); + break; + default: + jj_la1[4] = jj_gen; + ; + } + jj_consume_token(30); + array.reverse(); + {if (true) return array;} + throw new Error("Missing return statement in function"); + } + + final private void Elements(JsonArray array) throws ParseException { + JsonElement element; + element = JsonValue(); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case 27: + jj_consume_token(27); + Elements(array); + break; + default: + jj_la1[5] = jj_gen; + ; + } + array.add(element); + } + + final private JsonElement JsonValue() throws ParseException { + JsonElement o = null; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case SINGLE_QUOTE_LITERAL: + case DOUBLE_QUOTE_LITERAL: + o = JsonString(); + break; + case DIGITS: + case NAN: + case INFINITY: + case 31: + o = JsonNumber(); + break; + case 25: + o = JsonObject(); + break; + case 29: + o = JsonArray(); + break; + case BOOLEAN: + o = JsonBoolean(); + break; + case NULL: + o = JsonNull(); + break; + default: + jj_la1[6] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + {if (true) return o;} + throw new Error("Missing return statement in function"); + } + + final private JsonPrimitive JsonBoolean() throws ParseException { + Token t; + t = jj_consume_token(BOOLEAN); + boolean value = Boolean.valueOf(t.image); + {if (true) return new JsonPrimitive(value);} + throw new Error("Missing return statement in function"); + } + + final private JsonPrimitive JsonPrimitive() throws ParseException { + JsonPrimitive value; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case SINGLE_QUOTE_LITERAL: + case DOUBLE_QUOTE_LITERAL: + value = JsonString(); + {if (true) return value;} + break; + case DIGITS: + case NAN: + case INFINITY: + case 31: + value = JsonNumber(); + {if (true) return value;} + break; + case BOOLEAN: + value = JsonBoolean(); + {if (true) return value;} + break; + default: + jj_la1[7] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + throw new Error("Missing return statement in function"); + } + + final private JsonPrimitive JsonNumber() throws ParseException { + String intpart = null, + fracpart = null, + exppart = null; + JsonPrimitive value; + if (jj_2_1(2)) { + value = JsonSpecialNumbers(); + {if (true) return value;} + } else { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DIGITS: + case 31: + intpart = JsonInt(); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case 32: + fracpart = JsonFrac(); + break; + default: + jj_la1[8] = jj_gen; + ; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case E: + exppart = JsonExp(); + break; + default: + jj_la1[9] = jj_gen; + ; + } + Number n; + if (exppart != null || fracpart != null) { + fracpart = (fracpart == null) ? "" : fracpart; + exppart = (exppart == null) ? "" : exppart; + n = new java.math.BigDecimal(intpart + fracpart + exppart); + } else { + n = new java.math.BigInteger(intpart); + } + {if (true) return new JsonPrimitive(n);} + break; + default: + jj_la1[10] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + throw new Error("Missing return statement in function"); + } + + final private JsonPrimitive JsonSpecialNumbers() throws ParseException { + boolean negative = false; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case NAN: + jj_consume_token(NAN); + {if (true) return new JsonPrimitive(Double.NaN);} + break; + case INFINITY: + case 31: + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case 31: + jj_consume_token(31); + negative = true; + break; + default: + jj_la1[11] = jj_gen; + ; + } + jj_consume_token(INFINITY); + {if (true) return new JsonPrimitive(negative ? Double.NEGATIVE_INFINITY : Double.POSITIVE_INFINITY);} + break; + default: + jj_la1[12] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + throw new Error("Missing return statement in function"); + } + + final private String JsonInt() throws ParseException { + String digits; + boolean negative = false; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case 31: + jj_consume_token(31); + negative = true; + break; + default: + jj_la1[13] = jj_gen; + ; + } + digits = Digits(); + if(negative) + {if (true) return "-" + digits;} + {if (true) return digits;} + throw new Error("Missing return statement in function"); + } + + final private String JsonFrac() throws ParseException { + String digits; + jj_consume_token(32); + digits = Digits(); + {if (true) return "." + digits;} + throw new Error("Missing return statement in function"); + } + + final private String JsonExp() throws ParseException { + Token t; + String digits; + t = jj_consume_token(E); + digits = Digits(); + {if (true) return t.image + digits;} + throw new Error("Missing return statement in function"); + } + + final private String Digits() throws ParseException { + Token t; + t = jj_consume_token(DIGITS); + {if (true) return t.image;} + throw new Error("Missing return statement in function"); + } + + final private JsonPrimitive JsonString() throws ParseException { + Token t; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case SINGLE_QUOTE_LITERAL: + t = jj_consume_token(SINGLE_QUOTE_LITERAL); + break; + case DOUBLE_QUOTE_LITERAL: + t = jj_consume_token(DOUBLE_QUOTE_LITERAL); + break; + default: + jj_la1[14] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + String value = StringUnmarshaller.unmarshall(t.image); + {if (true) return new JsonPrimitive(value);} + throw new Error("Missing return statement in function"); + } + + final private boolean jj_2_1(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_1(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(0, xla); } + } + + final private boolean jj_3R_4() { + if (jj_scan_token(31)) return true; + return false; + } + + final private boolean jj_3R_3() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_4()) jj_scanpos = xsp; + if (jj_scan_token(INFINITY)) return true; + return false; + } + + final private boolean jj_3_1() { + if (jj_3R_1()) return true; + return false; + } + + final private boolean jj_3R_2() { + if (jj_scan_token(NAN)) return true; + return false; + } + + final private boolean jj_3R_1() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_2()) { + jj_scanpos = xsp; + if (jj_3R_3()) return true; + } + return false; + } + + public JsonParserImplTokenManager token_source; + SimpleCharStream jj_input_stream; + public Token token, jj_nt; + private int jj_ntk; + private Token jj_scanpos, jj_lastpos; + private int jj_la; + public boolean lookingAhead = false; + private boolean jj_semLA; + private int jj_gen; + final private int[] jj_la1 = new int[15]; + static private int[] jj_la1_0; + static private int[] jj_la1_1; + static { + jj_la1_0(); + jj_la1_1(); + } + private static void jj_la1_0() { + jj_la1_0 = new int[] {0xa20187c0,0x18800,0x8000000,0x18800,0xa20187c0,0x8000000,0xa20187c0,0x80018740,0x0,0x20,0x80000040,0x80000000,0x80000300,0x80000000,0x18000,}; + } + private static void jj_la1_1() { + jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,}; + } + final private JJCalls[] jj_2_rtns = new JJCalls[1]; + private boolean jj_rescan = false; + private int jj_gc = 0; + + public JsonParserImpl(java.io.InputStream stream) { + this(stream, null); + } + public JsonParserImpl(java.io.InputStream stream, String encoding) { + try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } + token_source = new JsonParserImplTokenManager(jj_input_stream); + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 15; i++) jj_la1[i] = -1; + for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); + } + + public void ReInit(java.io.InputStream stream) { + ReInit(stream, null); + } + public void ReInit(java.io.InputStream stream, String encoding) { + try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } + token_source.ReInit(jj_input_stream); + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 15; i++) jj_la1[i] = -1; + for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); + } + + public JsonParserImpl(java.io.Reader stream) { + jj_input_stream = new SimpleCharStream(stream, 1, 1); + token_source = new JsonParserImplTokenManager(jj_input_stream); + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 15; i++) jj_la1[i] = -1; + for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); + } + + public void ReInit(java.io.Reader stream) { + jj_input_stream.ReInit(stream, 1, 1); + token_source.ReInit(jj_input_stream); + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 15; i++) jj_la1[i] = -1; + for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); + } + + public JsonParserImpl(JsonParserImplTokenManager tm) { + token_source = tm; + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 15; i++) jj_la1[i] = -1; + for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); + } + + public void ReInit(JsonParserImplTokenManager tm) { + token_source = tm; + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 15; i++) jj_la1[i] = -1; + for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); + } + + final private Token jj_consume_token(int kind) throws ParseException { + Token oldToken; + if ((oldToken = token).next != null) token = token.next; + else token = token.next = token_source.getNextToken(); + jj_ntk = -1; + if (token.kind == kind) { + jj_gen++; + if (++jj_gc > 100) { + jj_gc = 0; + for (int i = 0; i < jj_2_rtns.length; i++) { + JJCalls c = jj_2_rtns[i]; + while (c != null) { + if (c.gen < jj_gen) c.first = null; + c = c.next; + } + } + } + return token; + } + token = oldToken; + jj_kind = kind; + throw generateParseException(); + } + + static private final class LookaheadSuccess extends java.lang.Error { } + final private LookaheadSuccess jj_ls = new LookaheadSuccess(); + final private boolean jj_scan_token(int kind) { + if (jj_scanpos == jj_lastpos) { + jj_la--; + if (jj_scanpos.next == null) { + jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken(); + } else { + jj_lastpos = jj_scanpos = jj_scanpos.next; + } + } else { + jj_scanpos = jj_scanpos.next; + } + if (jj_rescan) { + int i = 0; Token tok = token; + while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; } + if (tok != null) jj_add_error_token(kind, i); + } + if (jj_scanpos.kind != kind) return true; + if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls; + return false; + } + + final public Token getNextToken() { + if (token.next != null) token = token.next; + else token = token.next = token_source.getNextToken(); + jj_ntk = -1; + jj_gen++; + return token; + } + + final public Token getToken(int index) { + Token t = lookingAhead ? jj_scanpos : token; + for (int i = 0; i < index; i++) { + if (t.next != null) t = t.next; + else t = t.next = token_source.getNextToken(); + } + return t; + } + + final private int jj_ntk() { + if ((jj_nt=token.next) == null) + return (jj_ntk = (token.next=token_source.getNextToken()).kind); + else + return (jj_ntk = jj_nt.kind); + } + + private java.util.Vector jj_expentries = new java.util.Vector(); + private int[] jj_expentry; + private int jj_kind = -1; + private int[] jj_lasttokens = new int[100]; + private int jj_endpos; + + private void jj_add_error_token(int kind, int pos) { + if (pos >= 100) return; + if (pos == jj_endpos + 1) { + jj_lasttokens[jj_endpos++] = kind; + } else if (jj_endpos != 0) { + jj_expentry = new int[jj_endpos]; + for (int i = 0; i < jj_endpos; i++) { + jj_expentry[i] = jj_lasttokens[i]; + } + boolean exists = false; + for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements();) { + int[] oldentry = (int[])(e.nextElement()); + if (oldentry.length == jj_expentry.length) { + exists = true; + for (int i = 0; i < jj_expentry.length; i++) { + if (oldentry[i] != jj_expentry[i]) { + exists = false; + break; + } + } + if (exists) break; + } + } + if (!exists) jj_expentries.addElement(jj_expentry); + if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind; + } + } + + public ParseException generateParseException() { + jj_expentries.removeAllElements(); + boolean[] la1tokens = new boolean[33]; + for (int i = 0; i < 33; i++) { + la1tokens[i] = false; + } + if (jj_kind >= 0) { + la1tokens[jj_kind] = true; + jj_kind = -1; + } + for (int i = 0; i < 15; i++) { + if (jj_la1[i] == jj_gen) { + for (int j = 0; j < 32; j++) { + if ((jj_la1_0[i] & (1< jj_gen) { + jj_la = p.arg; jj_lastpos = jj_scanpos = p.first; + switch (i) { + case 0: jj_3_1(); break; + } + } + p = p.next; + } while (p != null); + } catch(LookaheadSuccess ls) { } + } + jj_rescan = false; + } + + final private void jj_save(int index, int xla) { + JJCalls p = jj_2_rtns[index]; + while (p.gen > jj_gen) { + if (p.next == null) { p = p.next = new JJCalls(); break; } + p = p.next; + } + p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla; + } + + static final class JJCalls { + int gen; + Token first; + int arg; + JJCalls next; + } + +} diff --git a/gson/src/main/java/com/google/gson/JsonParserConstants.java b/gson/src/main/java/com/google/gson/JsonParserImplConstants.java old mode 100755 new mode 100644 similarity index 86% rename from gson/src/main/java/com/google/gson/JsonParserConstants.java rename to gson/src/main/java/com/google/gson/JsonParserImplConstants.java index 5e70915f..1d2d419a --- a/gson/src/main/java/com/google/gson/JsonParserConstants.java +++ b/gson/src/main/java/com/google/gson/JsonParserImplConstants.java @@ -1,68 +1,68 @@ -/* Generated By:JavaCC: Do not edit this line. JsonParserConstants.java */ -package com.google.gson; - -@SuppressWarnings("all") -interface JsonParserConstants { - - int EOF = 0; - int E = 5; - int DIGITS = 6; - int NULL = 7; - int NAN = 8; - int INFINITY = 9; - int BOOLEAN = 10; - int IDENTIFIER = 11; - int HEX_CHAR = 12; - int UNICODE_CHAR = 13; - int ESCAPE_CHAR = 14; - int SINGLE_QUOTE_LITERAL = 15; - int DOUBLE_QUOTE_LITERAL = 16; - int QUOTE = 17; - int ENDQUOTE = 19; - int CHAR = 20; - int CNTRL_ESC = 21; - int HEX = 23; - int HEX_ESC = 24; - - int DEFAULT = 0; - int STRING_STATE = 1; - int ESC_STATE = 2; - int HEX_STATE = 3; - - String[] tokenImage = { - "", - "\" \"", - "\"\\t\"", - "\"\\n\"", - "\"\\r\"", - "", - "", - "\"null\"", - "\"NaN\"", - "\"Infinity\"", - "", - "", - "", - "", - "", - "", - "", - "\"\\\"\"", - "\"\\\\\"", - "", - "", - "", - "\"u\"", - "", - "", - "\"{\"", - "\"}\"", - "\",\"", - "\":\"", - "\"[\"", - "\"]\"", - "\"-\"", - "\".\"", - }; - -} +/* Generated By:JavaCC: Do not edit this line. JsonParserImplConstants.java */ +package com.google.gson; + +@SuppressWarnings("all") +interface JsonParserImplConstants { + + int EOF = 0; + int E = 5; + int DIGITS = 6; + int NULL = 7; + int NAN = 8; + int INFINITY = 9; + int BOOLEAN = 10; + int IDENTIFIER = 11; + int HEX_CHAR = 12; + int UNICODE_CHAR = 13; + int ESCAPE_CHAR = 14; + int SINGLE_QUOTE_LITERAL = 15; + int DOUBLE_QUOTE_LITERAL = 16; + int QUOTE = 17; + int ENDQUOTE = 19; + int CHAR = 20; + int CNTRL_ESC = 21; + int HEX = 23; + int HEX_ESC = 24; + + int DEFAULT = 0; + int STRING_STATE = 1; + int ESC_STATE = 2; + int HEX_STATE = 3; + + String[] tokenImage = { + "", + "\" \"", + "\"\\t\"", + "\"\\n\"", + "\"\\r\"", + "", + "", + "\"null\"", + "\"NaN\"", + "\"Infinity\"", + "", + "", + "", + "", + "", + "", + "", + "\"\\\"\"", + "\"\\\\\"", + "", + "", + "", + "\"u\"", + "", + "", + "\"{\"", + "\"}\"", + "\",\"", + "\":\"", + "\"[\"", + "\"]\"", + "\"-\"", + "\".\"", + }; + +} diff --git a/gson/src/main/java/com/google/gson/JsonParserTokenManager.java b/gson/src/main/java/com/google/gson/JsonParserImplTokenManager.java old mode 100755 new mode 100644 similarity index 95% rename from gson/src/main/java/com/google/gson/JsonParserTokenManager.java rename to gson/src/main/java/com/google/gson/JsonParserImplTokenManager.java index c6964be5..f850ef7b --- a/gson/src/main/java/com/google/gson/JsonParserTokenManager.java +++ b/gson/src/main/java/com/google/gson/JsonParserImplTokenManager.java @@ -1,1172 +1,1172 @@ -/* Generated By:JavaCC: Do not edit this line. JsonParserTokenManager.java */ -package com.google.gson; - -@SuppressWarnings("all") -final class JsonParserTokenManager implements JsonParserConstants -{ - public java.io.PrintStream debugStream = System.out; - public void setDebugStream(java.io.PrintStream ds) { debugStream = ds; } -private final int jjMoveStringLiteralDfa0_3() -{ - return jjMoveNfa_3(0, 0); -} -private final void jjCheckNAdd(int state) -{ - if (jjrounds[state] != jjround) - { - jjstateSet[jjnewStateCnt++] = state; - jjrounds[state] = jjround; - } -} -private final void jjAddStates(int start, int end) -{ - do { - jjstateSet[jjnewStateCnt++] = jjnextStates[start]; - } while (start++ != end); -} -private final void jjCheckNAddTwoStates(int state1, int state2) -{ - jjCheckNAdd(state1); - jjCheckNAdd(state2); -} -private final void jjCheckNAddStates(int start, int end) -{ - do { - jjCheckNAdd(jjnextStates[start]); - } while (start++ != end); -} -private final void jjCheckNAddStates(int start) -{ - jjCheckNAdd(jjnextStates[start]); - jjCheckNAdd(jjnextStates[start + 1]); -} -private final int jjMoveNfa_3(int startState, int curPos) -{ - int[] nextStates; - int startsAt = 0; - jjnewStateCnt = 4; - int i = 1; - jjstateSet[0] = startState; - int j, kind = 0x7fffffff; - for (;;) - { - if (++jjround == 0x7fffffff) - ReInitRounds(); - if (curChar < 64) - { - long l = 1L << curChar; - MatchLoop: do - { - switch(jjstateSet[--i]) - { - case 0: - if ((0x3ff000000000000L & l) != 0L) - jjstateSet[jjnewStateCnt++] = 1; - break; - case 1: - if ((0x3ff000000000000L & l) != 0L) - jjstateSet[jjnewStateCnt++] = 2; - break; - case 2: - if ((0x3ff000000000000L & l) != 0L) - jjstateSet[jjnewStateCnt++] = 3; - break; - case 3: - if ((0x3ff000000000000L & l) != 0L && kind > 24) - kind = 24; - break; - default : break; - } - } while(i != startsAt); - } - else if (curChar < 128) - { - long l = 1L << (curChar & 077); - MatchLoop: do - { - switch(jjstateSet[--i]) - { - case 0: - if ((0x7e0000007eL & l) != 0L) - jjstateSet[jjnewStateCnt++] = 1; - break; - case 1: - if ((0x7e0000007eL & l) != 0L) - jjstateSet[jjnewStateCnt++] = 2; - break; - case 2: - if ((0x7e0000007eL & l) != 0L) - jjstateSet[jjnewStateCnt++] = 3; - break; - case 3: - if ((0x7e0000007eL & l) != 0L && kind > 24) - kind = 24; - break; - default : break; - } - } while(i != startsAt); - } - else - { - int hiByte = (int)(curChar >> 8); - int i1 = hiByte >> 6; - long l1 = 1L << (hiByte & 077); - int i2 = (curChar & 0xff) >> 6; - long l2 = 1L << (curChar & 077); - MatchLoop: do - { - switch(jjstateSet[--i]) - { - default : break; - } - } while(i != startsAt); - } - if (kind != 0x7fffffff) - { - jjmatchedKind = kind; - jjmatchedPos = curPos; - kind = 0x7fffffff; - } - ++curPos; - if ((i = jjnewStateCnt) == (startsAt = 4 - (jjnewStateCnt = startsAt))) - return curPos; - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { return curPos; } - } -} +/* Generated By:JavaCC: Do not edit this line. JsonParserImplTokenManager.java */ +package com.google.gson; + +@SuppressWarnings("all") +final class JsonParserImplTokenManager implements JsonParserImplConstants +{ + public java.io.PrintStream debugStream = System.out; + public void setDebugStream(java.io.PrintStream ds) { debugStream = ds; } +private final int jjMoveStringLiteralDfa0_3() +{ + return jjMoveNfa_3(0, 0); +} +private final void jjCheckNAdd(int state) +{ + if (jjrounds[state] != jjround) + { + jjstateSet[jjnewStateCnt++] = state; + jjrounds[state] = jjround; + } +} +private final void jjAddStates(int start, int end) +{ + do { + jjstateSet[jjnewStateCnt++] = jjnextStates[start]; + } while (start++ != end); +} +private final void jjCheckNAddTwoStates(int state1, int state2) +{ + jjCheckNAdd(state1); + jjCheckNAdd(state2); +} +private final void jjCheckNAddStates(int start, int end) +{ + do { + jjCheckNAdd(jjnextStates[start]); + } while (start++ != end); +} +private final void jjCheckNAddStates(int start) +{ + jjCheckNAdd(jjnextStates[start]); + jjCheckNAdd(jjnextStates[start + 1]); +} +private final int jjMoveNfa_3(int startState, int curPos) +{ + int[] nextStates; + int startsAt = 0; + jjnewStateCnt = 4; + int i = 1; + jjstateSet[0] = startState; + int j, kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + long l = 1L << curChar; + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if ((0x3ff000000000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 1; + break; + case 1: + if ((0x3ff000000000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 2; + break; + case 2: + if ((0x3ff000000000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 3; + break; + case 3: + if ((0x3ff000000000000L & l) != 0L && kind > 24) + kind = 24; + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + long l = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if ((0x7e0000007eL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 1; + break; + case 1: + if ((0x7e0000007eL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 2; + break; + case 2: + if ((0x7e0000007eL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 3; + break; + case 3: + if ((0x7e0000007eL & l) != 0L && kind > 24) + kind = 24; + break; + default : break; + } + } while(i != startsAt); + } + else + { + int hiByte = (int)(curChar >> 8); + int i1 = hiByte >> 6; + long l1 = 1L << (hiByte & 077); + int i2 = (curChar & 0xff) >> 6; + long l2 = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 4 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return curPos; } + } +} private final int jjStopStringLiteralDfa_0(int pos, long active0) -{ +{ switch (pos) - { - case 0: - if ((active0 & 0x380L) != 0L) - { - jjmatchedKind = 11; - return 12; - } - if ((active0 & 0x20000L) != 0L) - return 41; - return -1; - case 1: - if ((active0 & 0x380L) != 0L) - { - jjmatchedKind = 11; - jjmatchedPos = 1; - return 12; - } - return -1; - case 2: - if ((active0 & 0x100L) != 0L) - return 12; - if ((active0 & 0x280L) != 0L) - { - jjmatchedKind = 11; - jjmatchedPos = 2; - return 12; - } - return -1; - case 3: - if ((active0 & 0x80L) != 0L) - return 12; - if ((active0 & 0x200L) != 0L) - { - jjmatchedKind = 11; - jjmatchedPos = 3; - return 12; - } - return -1; - case 4: - if ((active0 & 0x200L) != 0L) - { - jjmatchedKind = 11; - jjmatchedPos = 4; - return 12; - } - return -1; - case 5: - if ((active0 & 0x200L) != 0L) - { - jjmatchedKind = 11; - jjmatchedPos = 5; - return 12; - } - return -1; - case 6: - if ((active0 & 0x200L) != 0L) - { - jjmatchedKind = 11; - jjmatchedPos = 6; - return 12; - } - return -1; - default : - return -1; - } -} + { + case 0: + if ((active0 & 0x380L) != 0L) + { + jjmatchedKind = 11; + return 12; + } + if ((active0 & 0x20000L) != 0L) + return 41; + return -1; + case 1: + if ((active0 & 0x380L) != 0L) + { + jjmatchedKind = 11; + jjmatchedPos = 1; + return 12; + } + return -1; + case 2: + if ((active0 & 0x100L) != 0L) + return 12; + if ((active0 & 0x280L) != 0L) + { + jjmatchedKind = 11; + jjmatchedPos = 2; + return 12; + } + return -1; + case 3: + if ((active0 & 0x80L) != 0L) + return 12; + if ((active0 & 0x200L) != 0L) + { + jjmatchedKind = 11; + jjmatchedPos = 3; + return 12; + } + return -1; + case 4: + if ((active0 & 0x200L) != 0L) + { + jjmatchedKind = 11; + jjmatchedPos = 4; + return 12; + } + return -1; + case 5: + if ((active0 & 0x200L) != 0L) + { + jjmatchedKind = 11; + jjmatchedPos = 5; + return 12; + } + return -1; + case 6: + if ((active0 & 0x200L) != 0L) + { + jjmatchedKind = 11; + jjmatchedPos = 6; + return 12; + } + return -1; + default : + return -1; + } +} private final int jjStartNfa_0(int pos, long active0) -{ - return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1); -} -private final int jjStopAtPos(int pos, int kind) -{ - jjmatchedKind = kind; - jjmatchedPos = pos; - return pos + 1; -} -private final int jjStartNfaWithStates_0(int pos, int kind, int state) -{ - jjmatchedKind = kind; - jjmatchedPos = pos; - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { return pos + 1; } - return jjMoveNfa_0(state, pos + 1); -} -private final int jjMoveStringLiteralDfa0_0() -{ - switch(curChar) - { - case 34: - return jjStartNfaWithStates_0(0, 17, 41); - case 44: - return jjStopAtPos(0, 27); - case 45: - return jjStopAtPos(0, 31); - case 46: - return jjStopAtPos(0, 32); - case 58: - return jjStopAtPos(0, 28); - case 73: - return jjMoveStringLiteralDfa1_0(0x200L); - case 78: - return jjMoveStringLiteralDfa1_0(0x100L); - case 91: - return jjStopAtPos(0, 29); - case 93: - return jjStopAtPos(0, 30); - case 110: - return jjMoveStringLiteralDfa1_0(0x80L); - case 123: - return jjStopAtPos(0, 25); - case 125: - return jjStopAtPos(0, 26); - default : - return jjMoveNfa_0(0, 0); - } -} -private final int jjMoveStringLiteralDfa1_0(long active0) -{ - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { - jjStopStringLiteralDfa_0(0, active0); - return 1; - } - switch(curChar) - { - case 97: - return jjMoveStringLiteralDfa2_0(active0, 0x100L); - case 110: - return jjMoveStringLiteralDfa2_0(active0, 0x200L); - case 117: - return jjMoveStringLiteralDfa2_0(active0, 0x80L); - default : - break; - } - return jjStartNfa_0(0, active0); -} -private final int jjMoveStringLiteralDfa2_0(long old0, long active0) -{ - if (((active0 &= old0)) == 0L) - return jjStartNfa_0(0, old0); - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { - jjStopStringLiteralDfa_0(1, active0); - return 2; - } - switch(curChar) - { - case 78: - if ((active0 & 0x100L) != 0L) - return jjStartNfaWithStates_0(2, 8, 12); - break; - case 102: - return jjMoveStringLiteralDfa3_0(active0, 0x200L); - case 108: - return jjMoveStringLiteralDfa3_0(active0, 0x80L); - default : - break; - } - return jjStartNfa_0(1, active0); -} -private final int jjMoveStringLiteralDfa3_0(long old0, long active0) -{ - if (((active0 &= old0)) == 0L) - return jjStartNfa_0(1, old0); - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { - jjStopStringLiteralDfa_0(2, active0); - return 3; - } - switch(curChar) - { - case 105: - return jjMoveStringLiteralDfa4_0(active0, 0x200L); - case 108: - if ((active0 & 0x80L) != 0L) - return jjStartNfaWithStates_0(3, 7, 12); - break; - default : - break; - } - return jjStartNfa_0(2, active0); -} -private final int jjMoveStringLiteralDfa4_0(long old0, long active0) -{ - if (((active0 &= old0)) == 0L) - return jjStartNfa_0(2, old0); - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { - jjStopStringLiteralDfa_0(3, active0); - return 4; - } - switch(curChar) - { - case 110: - return jjMoveStringLiteralDfa5_0(active0, 0x200L); - default : - break; - } - return jjStartNfa_0(3, active0); -} -private final int jjMoveStringLiteralDfa5_0(long old0, long active0) -{ - if (((active0 &= old0)) == 0L) - return jjStartNfa_0(3, old0); - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { - jjStopStringLiteralDfa_0(4, active0); - return 5; - } - switch(curChar) - { - case 105: - return jjMoveStringLiteralDfa6_0(active0, 0x200L); - default : - break; - } - return jjStartNfa_0(4, active0); -} -private final int jjMoveStringLiteralDfa6_0(long old0, long active0) -{ - if (((active0 &= old0)) == 0L) - return jjStartNfa_0(4, old0); - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { - jjStopStringLiteralDfa_0(5, active0); - return 6; - } - switch(curChar) - { - case 116: - return jjMoveStringLiteralDfa7_0(active0, 0x200L); - default : - break; - } - return jjStartNfa_0(5, active0); -} -private final int jjMoveStringLiteralDfa7_0(long old0, long active0) -{ - if (((active0 &= old0)) == 0L) - return jjStartNfa_0(5, old0); - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { - jjStopStringLiteralDfa_0(6, active0); - return 7; - } - switch(curChar) - { - case 121: - if ((active0 & 0x200L) != 0L) - return jjStartNfaWithStates_0(7, 9, 12); - break; - default : - break; - } - return jjStartNfa_0(6, active0); -} +{ + return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1); +} +private final int jjStopAtPos(int pos, int kind) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + return pos + 1; +} +private final int jjStartNfaWithStates_0(int pos, int kind, int state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return pos + 1; } + return jjMoveNfa_0(state, pos + 1); +} +private final int jjMoveStringLiteralDfa0_0() +{ + switch(curChar) + { + case 34: + return jjStartNfaWithStates_0(0, 17, 41); + case 44: + return jjStopAtPos(0, 27); + case 45: + return jjStopAtPos(0, 31); + case 46: + return jjStopAtPos(0, 32); + case 58: + return jjStopAtPos(0, 28); + case 73: + return jjMoveStringLiteralDfa1_0(0x200L); + case 78: + return jjMoveStringLiteralDfa1_0(0x100L); + case 91: + return jjStopAtPos(0, 29); + case 93: + return jjStopAtPos(0, 30); + case 110: + return jjMoveStringLiteralDfa1_0(0x80L); + case 123: + return jjStopAtPos(0, 25); + case 125: + return jjStopAtPos(0, 26); + default : + return jjMoveNfa_0(0, 0); + } +} +private final int jjMoveStringLiteralDfa1_0(long active0) +{ + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(0, active0); + return 1; + } + switch(curChar) + { + case 97: + return jjMoveStringLiteralDfa2_0(active0, 0x100L); + case 110: + return jjMoveStringLiteralDfa2_0(active0, 0x200L); + case 117: + return jjMoveStringLiteralDfa2_0(active0, 0x80L); + default : + break; + } + return jjStartNfa_0(0, active0); +} +private final int jjMoveStringLiteralDfa2_0(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_0(0, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(1, active0); + return 2; + } + switch(curChar) + { + case 78: + if ((active0 & 0x100L) != 0L) + return jjStartNfaWithStates_0(2, 8, 12); + break; + case 102: + return jjMoveStringLiteralDfa3_0(active0, 0x200L); + case 108: + return jjMoveStringLiteralDfa3_0(active0, 0x80L); + default : + break; + } + return jjStartNfa_0(1, active0); +} +private final int jjMoveStringLiteralDfa3_0(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_0(1, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(2, active0); + return 3; + } + switch(curChar) + { + case 105: + return jjMoveStringLiteralDfa4_0(active0, 0x200L); + case 108: + if ((active0 & 0x80L) != 0L) + return jjStartNfaWithStates_0(3, 7, 12); + break; + default : + break; + } + return jjStartNfa_0(2, active0); +} +private final int jjMoveStringLiteralDfa4_0(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_0(2, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(3, active0); + return 4; + } + switch(curChar) + { + case 110: + return jjMoveStringLiteralDfa5_0(active0, 0x200L); + default : + break; + } + return jjStartNfa_0(3, active0); +} +private final int jjMoveStringLiteralDfa5_0(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_0(3, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(4, active0); + return 5; + } + switch(curChar) + { + case 105: + return jjMoveStringLiteralDfa6_0(active0, 0x200L); + default : + break; + } + return jjStartNfa_0(4, active0); +} +private final int jjMoveStringLiteralDfa6_0(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_0(4, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(5, active0); + return 6; + } + switch(curChar) + { + case 116: + return jjMoveStringLiteralDfa7_0(active0, 0x200L); + default : + break; + } + return jjStartNfa_0(5, active0); +} +private final int jjMoveStringLiteralDfa7_0(long old0, long active0) +{ + if (((active0 &= old0)) == 0L) + return jjStartNfa_0(5, old0); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(6, active0); + return 7; + } + switch(curChar) + { + case 121: + if ((active0 & 0x200L) != 0L) + return jjStartNfaWithStates_0(7, 9, 12); + break; + default : + break; + } + return jjStartNfa_0(6, active0); +} static final long[] jjbitVec0 = { 0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL -}; +}; static final long[] jjbitVec2 = { 0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL -}; -private final int jjMoveNfa_0(int startState, int curPos) -{ - int[] nextStates; - int startsAt = 0; - jjnewStateCnt = 41; - int i = 1; - jjstateSet[0] = startState; - int j, kind = 0x7fffffff; - for (;;) - { - if (++jjround == 0x7fffffff) - ReInitRounds(); - if (curChar < 64) - { - long l = 1L << curChar; - MatchLoop: do - { - switch(jjstateSet[--i]) - { - case 41: - if ((0xfffffffbffffdbffL & l) != 0L) - jjCheckNAddStates(0, 3); - else if (curChar == 34) - { - if (kind > 16) - kind = 16; - } - break; - case 0: - if ((0x3ff000000000000L & l) != 0L) - { - if (kind > 6) - kind = 6; - jjCheckNAdd(2); - } - else if (curChar == 34) - jjCheckNAddStates(0, 3); - else if (curChar == 39) - jjCheckNAddStates(4, 7); - break; - case 1: - if ((0x280000000000L & l) != 0L && kind > 5) - kind = 5; - break; - case 2: - if ((0x3ff000000000000L & l) == 0L) - break; - if (kind > 6) - kind = 6; - jjCheckNAdd(2); - break; - case 12: - if ((0x3ff000000000000L & l) == 0L) - break; - if (kind > 11) - kind = 11; - jjstateSet[jjnewStateCnt++] = 12; - break; - case 14: - if ((0x3ff000000000000L & l) != 0L) - jjstateSet[jjnewStateCnt++] = 15; - break; - case 15: - if ((0x3ff000000000000L & l) != 0L) - jjstateSet[jjnewStateCnt++] = 16; - break; - case 16: - if ((0x3ff000000000000L & l) != 0L) - jjstateSet[jjnewStateCnt++] = 17; - break; - case 17: - if ((0x3ff000000000000L & l) != 0L && kind > 13) - kind = 13; - break; - case 19: - if (curChar == 39) - jjCheckNAddStates(4, 7); - break; - case 20: - if ((0xffffff7fffffdbffL & l) != 0L) - jjCheckNAddStates(4, 7); - break; - case 22: - if ((0x808400000000L & l) != 0L) - jjCheckNAddStates(4, 7); - break; - case 24: - if ((0x3ff000000000000L & l) != 0L) - jjstateSet[jjnewStateCnt++] = 25; - break; - case 25: - if ((0x3ff000000000000L & l) != 0L) - jjstateSet[jjnewStateCnt++] = 26; - break; - case 26: - if ((0x3ff000000000000L & l) != 0L) - jjstateSet[jjnewStateCnt++] = 27; - break; - case 27: - if ((0x3ff000000000000L & l) != 0L) - jjCheckNAddStates(4, 7); - break; - case 29: - if (curChar == 39 && kind > 15) - kind = 15; - break; - case 30: - if (curChar == 34) - jjCheckNAddStates(0, 3); - break; - case 31: - if ((0xfffffffbffffdbffL & l) != 0L) - jjCheckNAddStates(0, 3); - break; - case 33: - if ((0x808400000000L & l) != 0L) - jjCheckNAddStates(0, 3); - break; - case 35: - if ((0x3ff000000000000L & l) != 0L) - jjstateSet[jjnewStateCnt++] = 36; - break; - case 36: - if ((0x3ff000000000000L & l) != 0L) - jjstateSet[jjnewStateCnt++] = 37; - break; - case 37: - if ((0x3ff000000000000L & l) != 0L) - jjstateSet[jjnewStateCnt++] = 38; - break; - case 38: - if ((0x3ff000000000000L & l) != 0L) - jjCheckNAddStates(0, 3); - break; - case 40: - if (curChar == 34 && kind > 16) - kind = 16; - break; - default : break; - } - } while(i != startsAt); - } - else if (curChar < 128) - { - long l = 1L << (curChar & 077); - MatchLoop: do - { - switch(jjstateSet[--i]) - { - case 41: - if ((0xffffffffefffffffL & l) != 0L) - jjCheckNAddStates(0, 3); - else if (curChar == 92) - jjstateSet[jjnewStateCnt++] = 34; - if (curChar == 92) - jjstateSet[jjnewStateCnt++] = 33; - break; - case 0: - if ((0x7fffffe87fffffeL & l) != 0L) - { - if (kind > 11) - kind = 11; - jjCheckNAdd(12); - } - else if (curChar == 92) - jjstateSet[jjnewStateCnt++] = 13; - if ((0x2000000020L & l) != 0L) - { - if (kind > 5) - kind = 5; - jjstateSet[jjnewStateCnt++] = 1; - } - else if (curChar == 102) - jjstateSet[jjnewStateCnt++] = 9; - else if (curChar == 116) - jjstateSet[jjnewStateCnt++] = 5; - break; - case 3: - if (curChar == 101 && kind > 10) - kind = 10; - break; - case 4: - if (curChar == 117) - jjCheckNAdd(3); - break; - case 5: - if (curChar == 114) - jjstateSet[jjnewStateCnt++] = 4; - break; - case 6: - if (curChar == 116) - jjstateSet[jjnewStateCnt++] = 5; - break; - case 7: - if (curChar == 115) - jjCheckNAdd(3); - break; - case 8: - if (curChar == 108) - jjstateSet[jjnewStateCnt++] = 7; - break; - case 9: - if (curChar == 97) - jjstateSet[jjnewStateCnt++] = 8; - break; - case 10: - if (curChar == 102) - jjstateSet[jjnewStateCnt++] = 9; - break; - case 11: - case 12: - if ((0x7fffffe87fffffeL & l) == 0L) - break; - if (kind > 11) - kind = 11; - jjCheckNAdd(12); - break; - case 13: - if (curChar == 117) - jjstateSet[jjnewStateCnt++] = 14; - break; - case 14: - if ((0x7e0000007eL & l) != 0L) - jjstateSet[jjnewStateCnt++] = 15; - break; - case 15: - if ((0x7e0000007eL & l) != 0L) - jjstateSet[jjnewStateCnt++] = 16; - break; - case 16: - if ((0x7e0000007eL & l) != 0L) - jjstateSet[jjnewStateCnt++] = 17; - break; - case 17: - if ((0x7e0000007eL & l) != 0L && kind > 13) - kind = 13; - break; - case 18: - if (curChar == 92) - jjstateSet[jjnewStateCnt++] = 13; - break; - case 20: - if ((0xffffffffefffffffL & l) != 0L) - jjCheckNAddStates(4, 7); - break; - case 21: - if (curChar == 92) - jjstateSet[jjnewStateCnt++] = 22; - break; - case 22: - if ((0x14404410000000L & l) != 0L) - jjCheckNAddStates(4, 7); - break; - case 23: - if (curChar == 117) - jjstateSet[jjnewStateCnt++] = 24; - break; - case 24: - if ((0x7e0000007eL & l) != 0L) - jjstateSet[jjnewStateCnt++] = 25; - break; - case 25: - if ((0x7e0000007eL & l) != 0L) - jjstateSet[jjnewStateCnt++] = 26; - break; - case 26: - if ((0x7e0000007eL & l) != 0L) - jjstateSet[jjnewStateCnt++] = 27; - break; - case 27: - if ((0x7e0000007eL & l) != 0L) - jjCheckNAddStates(4, 7); - break; - case 28: - if (curChar == 92) - jjstateSet[jjnewStateCnt++] = 23; - break; - case 31: - if ((0xffffffffefffffffL & l) != 0L) - jjCheckNAddStates(0, 3); - break; - case 32: - if (curChar == 92) - jjstateSet[jjnewStateCnt++] = 33; - break; - case 33: - if ((0x14404410000000L & l) != 0L) - jjCheckNAddStates(0, 3); - break; - case 34: - if (curChar == 117) - jjstateSet[jjnewStateCnt++] = 35; - break; - case 35: - if ((0x7e0000007eL & l) != 0L) - jjstateSet[jjnewStateCnt++] = 36; - break; - case 36: - if ((0x7e0000007eL & l) != 0L) - jjstateSet[jjnewStateCnt++] = 37; - break; - case 37: - if ((0x7e0000007eL & l) != 0L) - jjstateSet[jjnewStateCnt++] = 38; - break; - case 38: - if ((0x7e0000007eL & l) != 0L) - jjCheckNAddStates(0, 3); - break; - case 39: - if (curChar == 92) - jjstateSet[jjnewStateCnt++] = 34; - break; - default : break; - } - } while(i != startsAt); - } - else - { - int hiByte = (int)(curChar >> 8); - int i1 = hiByte >> 6; - long l1 = 1L << (hiByte & 077); - int i2 = (curChar & 0xff) >> 6; - long l2 = 1L << (curChar & 077); - MatchLoop: do - { - switch(jjstateSet[--i]) - { - case 41: - case 31: - if (jjCanMove_0(hiByte, i1, i2, l1, l2)) - jjCheckNAddStates(0, 3); - break; - case 20: - if (jjCanMove_0(hiByte, i1, i2, l1, l2)) - jjAddStates(4, 7); - break; - default : break; - } - } while(i != startsAt); - } - if (kind != 0x7fffffff) - { - jjmatchedKind = kind; - jjmatchedPos = curPos; - kind = 0x7fffffff; - } - ++curPos; - if ((i = jjnewStateCnt) == (startsAt = 41 - (jjnewStateCnt = startsAt))) - return curPos; - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { return curPos; } - } -} +}; +private final int jjMoveNfa_0(int startState, int curPos) +{ + int[] nextStates; + int startsAt = 0; + jjnewStateCnt = 41; + int i = 1; + jjstateSet[0] = startState; + int j, kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + long l = 1L << curChar; + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 41: + if ((0xfffffffbffffdbffL & l) != 0L) + jjCheckNAddStates(0, 3); + else if (curChar == 34) + { + if (kind > 16) + kind = 16; + } + break; + case 0: + if ((0x3ff000000000000L & l) != 0L) + { + if (kind > 6) + kind = 6; + jjCheckNAdd(2); + } + else if (curChar == 34) + jjCheckNAddStates(0, 3); + else if (curChar == 39) + jjCheckNAddStates(4, 7); + break; + case 1: + if ((0x280000000000L & l) != 0L && kind > 5) + kind = 5; + break; + case 2: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 6) + kind = 6; + jjCheckNAdd(2); + break; + case 12: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 11) + kind = 11; + jjstateSet[jjnewStateCnt++] = 12; + break; + case 14: + if ((0x3ff000000000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 15; + break; + case 15: + if ((0x3ff000000000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 16; + break; + case 16: + if ((0x3ff000000000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 17; + break; + case 17: + if ((0x3ff000000000000L & l) != 0L && kind > 13) + kind = 13; + break; + case 19: + if (curChar == 39) + jjCheckNAddStates(4, 7); + break; + case 20: + if ((0xffffff7fffffdbffL & l) != 0L) + jjCheckNAddStates(4, 7); + break; + case 22: + if ((0x808400000000L & l) != 0L) + jjCheckNAddStates(4, 7); + break; + case 24: + if ((0x3ff000000000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 25; + break; + case 25: + if ((0x3ff000000000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 26; + break; + case 26: + if ((0x3ff000000000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 27; + break; + case 27: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(4, 7); + break; + case 29: + if (curChar == 39 && kind > 15) + kind = 15; + break; + case 30: + if (curChar == 34) + jjCheckNAddStates(0, 3); + break; + case 31: + if ((0xfffffffbffffdbffL & l) != 0L) + jjCheckNAddStates(0, 3); + break; + case 33: + if ((0x808400000000L & l) != 0L) + jjCheckNAddStates(0, 3); + break; + case 35: + if ((0x3ff000000000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 36; + break; + case 36: + if ((0x3ff000000000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 37; + break; + case 37: + if ((0x3ff000000000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 38; + break; + case 38: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(0, 3); + break; + case 40: + if (curChar == 34 && kind > 16) + kind = 16; + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + long l = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 41: + if ((0xffffffffefffffffL & l) != 0L) + jjCheckNAddStates(0, 3); + else if (curChar == 92) + jjstateSet[jjnewStateCnt++] = 34; + if (curChar == 92) + jjstateSet[jjnewStateCnt++] = 33; + break; + case 0: + if ((0x7fffffe87fffffeL & l) != 0L) + { + if (kind > 11) + kind = 11; + jjCheckNAdd(12); + } + else if (curChar == 92) + jjstateSet[jjnewStateCnt++] = 13; + if ((0x2000000020L & l) != 0L) + { + if (kind > 5) + kind = 5; + jjstateSet[jjnewStateCnt++] = 1; + } + else if (curChar == 102) + jjstateSet[jjnewStateCnt++] = 9; + else if (curChar == 116) + jjstateSet[jjnewStateCnt++] = 5; + break; + case 3: + if (curChar == 101 && kind > 10) + kind = 10; + break; + case 4: + if (curChar == 117) + jjCheckNAdd(3); + break; + case 5: + if (curChar == 114) + jjstateSet[jjnewStateCnt++] = 4; + break; + case 6: + if (curChar == 116) + jjstateSet[jjnewStateCnt++] = 5; + break; + case 7: + if (curChar == 115) + jjCheckNAdd(3); + break; + case 8: + if (curChar == 108) + jjstateSet[jjnewStateCnt++] = 7; + break; + case 9: + if (curChar == 97) + jjstateSet[jjnewStateCnt++] = 8; + break; + case 10: + if (curChar == 102) + jjstateSet[jjnewStateCnt++] = 9; + break; + case 11: + case 12: + if ((0x7fffffe87fffffeL & l) == 0L) + break; + if (kind > 11) + kind = 11; + jjCheckNAdd(12); + break; + case 13: + if (curChar == 117) + jjstateSet[jjnewStateCnt++] = 14; + break; + case 14: + if ((0x7e0000007eL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 15; + break; + case 15: + if ((0x7e0000007eL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 16; + break; + case 16: + if ((0x7e0000007eL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 17; + break; + case 17: + if ((0x7e0000007eL & l) != 0L && kind > 13) + kind = 13; + break; + case 18: + if (curChar == 92) + jjstateSet[jjnewStateCnt++] = 13; + break; + case 20: + if ((0xffffffffefffffffL & l) != 0L) + jjCheckNAddStates(4, 7); + break; + case 21: + if (curChar == 92) + jjstateSet[jjnewStateCnt++] = 22; + break; + case 22: + if ((0x14404410000000L & l) != 0L) + jjCheckNAddStates(4, 7); + break; + case 23: + if (curChar == 117) + jjstateSet[jjnewStateCnt++] = 24; + break; + case 24: + if ((0x7e0000007eL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 25; + break; + case 25: + if ((0x7e0000007eL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 26; + break; + case 26: + if ((0x7e0000007eL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 27; + break; + case 27: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(4, 7); + break; + case 28: + if (curChar == 92) + jjstateSet[jjnewStateCnt++] = 23; + break; + case 31: + if ((0xffffffffefffffffL & l) != 0L) + jjCheckNAddStates(0, 3); + break; + case 32: + if (curChar == 92) + jjstateSet[jjnewStateCnt++] = 33; + break; + case 33: + if ((0x14404410000000L & l) != 0L) + jjCheckNAddStates(0, 3); + break; + case 34: + if (curChar == 117) + jjstateSet[jjnewStateCnt++] = 35; + break; + case 35: + if ((0x7e0000007eL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 36; + break; + case 36: + if ((0x7e0000007eL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 37; + break; + case 37: + if ((0x7e0000007eL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 38; + break; + case 38: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(0, 3); + break; + case 39: + if (curChar == 92) + jjstateSet[jjnewStateCnt++] = 34; + break; + default : break; + } + } while(i != startsAt); + } + else + { + int hiByte = (int)(curChar >> 8); + int i1 = hiByte >> 6; + long l1 = 1L << (hiByte & 077); + int i2 = (curChar & 0xff) >> 6; + long l2 = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 41: + case 31: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + jjCheckNAddStates(0, 3); + break; + case 20: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + jjAddStates(4, 7); + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 41 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return curPos; } + } +} private final int jjStopStringLiteralDfa_2(int pos, long active0) -{ +{ switch (pos) - { - default : - return -1; - } -} + { + default : + return -1; + } +} private final int jjStartNfa_2(int pos, long active0) -{ - return jjMoveNfa_2(jjStopStringLiteralDfa_2(pos, active0), pos + 1); -} -private final int jjStartNfaWithStates_2(int pos, int kind, int state) -{ - jjmatchedKind = kind; - jjmatchedPos = pos; - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { return pos + 1; } - return jjMoveNfa_2(state, pos + 1); -} -private final int jjMoveStringLiteralDfa0_2() -{ - switch(curChar) - { - case 117: - return jjStopAtPos(0, 22); - default : - return jjMoveNfa_2(0, 0); - } -} -private final int jjMoveNfa_2(int startState, int curPos) -{ - int[] nextStates; - int startsAt = 0; - jjnewStateCnt = 1; - int i = 1; - jjstateSet[0] = startState; - int j, kind = 0x7fffffff; - for (;;) - { - if (++jjround == 0x7fffffff) - ReInitRounds(); - if (curChar < 64) - { - long l = 1L << curChar; - MatchLoop: do - { - switch(jjstateSet[--i]) - { - case 0: - if ((0x800400000000L & l) != 0L) - kind = 21; - break; - default : break; - } - } while(i != startsAt); - } - else if (curChar < 128) - { - long l = 1L << (curChar & 077); - MatchLoop: do - { - switch(jjstateSet[--i]) - { - case 0: - if ((0x14404410000000L & l) != 0L) - kind = 21; - break; - default : break; - } - } while(i != startsAt); - } - else - { - int hiByte = (int)(curChar >> 8); - int i1 = hiByte >> 6; - long l1 = 1L << (hiByte & 077); - int i2 = (curChar & 0xff) >> 6; - long l2 = 1L << (curChar & 077); - MatchLoop: do - { - switch(jjstateSet[--i]) - { - default : break; - } - } while(i != startsAt); - } - if (kind != 0x7fffffff) - { - jjmatchedKind = kind; - jjmatchedPos = curPos; - kind = 0x7fffffff; - } - ++curPos; - if ((i = jjnewStateCnt) == (startsAt = 1 - (jjnewStateCnt = startsAt))) - return curPos; - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { return curPos; } - } -} +{ + return jjMoveNfa_2(jjStopStringLiteralDfa_2(pos, active0), pos + 1); +} +private final int jjStartNfaWithStates_2(int pos, int kind, int state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return pos + 1; } + return jjMoveNfa_2(state, pos + 1); +} +private final int jjMoveStringLiteralDfa0_2() +{ + switch(curChar) + { + case 117: + return jjStopAtPos(0, 22); + default : + return jjMoveNfa_2(0, 0); + } +} +private final int jjMoveNfa_2(int startState, int curPos) +{ + int[] nextStates; + int startsAt = 0; + jjnewStateCnt = 1; + int i = 1; + jjstateSet[0] = startState; + int j, kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + long l = 1L << curChar; + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if ((0x800400000000L & l) != 0L) + kind = 21; + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + long l = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if ((0x14404410000000L & l) != 0L) + kind = 21; + break; + default : break; + } + } while(i != startsAt); + } + else + { + int hiByte = (int)(curChar >> 8); + int i1 = hiByte >> 6; + long l1 = 1L << (hiByte & 077); + int i2 = (curChar & 0xff) >> 6; + long l2 = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 1 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return curPos; } + } +} private final int jjStopStringLiteralDfa_1(int pos, long active0) -{ +{ switch (pos) - { - default : - return -1; - } -} + { + default : + return -1; + } +} private final int jjStartNfa_1(int pos, long active0) -{ - return jjMoveNfa_1(jjStopStringLiteralDfa_1(pos, active0), pos + 1); -} -private final int jjStartNfaWithStates_1(int pos, int kind, int state) -{ - jjmatchedKind = kind; - jjmatchedPos = pos; - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { return pos + 1; } - return jjMoveNfa_1(state, pos + 1); -} -private final int jjMoveStringLiteralDfa0_1() -{ - switch(curChar) - { - case 92: - return jjStopAtPos(0, 18); - default : - return jjMoveNfa_1(0, 0); - } -} -private final int jjMoveNfa_1(int startState, int curPos) -{ - int[] nextStates; - int startsAt = 0; - jjnewStateCnt = 2; - int i = 1; - jjstateSet[0] = startState; - int j, kind = 0x7fffffff; - for (;;) - { - if (++jjround == 0x7fffffff) - ReInitRounds(); - if (curChar < 64) - { - long l = 1L << curChar; - MatchLoop: do - { - switch(jjstateSet[--i]) - { - case 0: - if ((0xfffffffbffffffffL & l) != 0L) - { - if (kind > 20) - kind = 20; - } - else if (curChar == 34) - { - if (kind > 19) - kind = 19; - } - break; - case 1: - if ((0xfffffffbffffffffL & l) != 0L) - kind = 20; - break; - default : break; - } - } while(i != startsAt); - } - else if (curChar < 128) - { - long l = 1L << (curChar & 077); - MatchLoop: do - { - switch(jjstateSet[--i]) - { - case 0: - if ((0xffffffffefffffffL & l) != 0L) - kind = 20; - break; - default : break; - } - } while(i != startsAt); - } - else - { - int hiByte = (int)(curChar >> 8); - int i1 = hiByte >> 6; - long l1 = 1L << (hiByte & 077); - int i2 = (curChar & 0xff) >> 6; - long l2 = 1L << (curChar & 077); - MatchLoop: do - { - switch(jjstateSet[--i]) - { - case 0: - if (jjCanMove_0(hiByte, i1, i2, l1, l2) && kind > 20) - kind = 20; - break; - default : break; - } - } while(i != startsAt); - } - if (kind != 0x7fffffff) - { - jjmatchedKind = kind; - jjmatchedPos = curPos; - kind = 0x7fffffff; - } - ++curPos; - if ((i = jjnewStateCnt) == (startsAt = 2 - (jjnewStateCnt = startsAt))) - return curPos; - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { return curPos; } - } -} +{ + return jjMoveNfa_1(jjStopStringLiteralDfa_1(pos, active0), pos + 1); +} +private final int jjStartNfaWithStates_1(int pos, int kind, int state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return pos + 1; } + return jjMoveNfa_1(state, pos + 1); +} +private final int jjMoveStringLiteralDfa0_1() +{ + switch(curChar) + { + case 92: + return jjStopAtPos(0, 18); + default : + return jjMoveNfa_1(0, 0); + } +} +private final int jjMoveNfa_1(int startState, int curPos) +{ + int[] nextStates; + int startsAt = 0; + jjnewStateCnt = 2; + int i = 1; + jjstateSet[0] = startState; + int j, kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + long l = 1L << curChar; + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if ((0xfffffffbffffffffL & l) != 0L) + { + if (kind > 20) + kind = 20; + } + else if (curChar == 34) + { + if (kind > 19) + kind = 19; + } + break; + case 1: + if ((0xfffffffbffffffffL & l) != 0L) + kind = 20; + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + long l = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if ((0xffffffffefffffffL & l) != 0L) + kind = 20; + break; + default : break; + } + } while(i != startsAt); + } + else + { + int hiByte = (int)(curChar >> 8); + int i1 = hiByte >> 6; + long l1 = 1L << (hiByte & 077); + int i2 = (curChar & 0xff) >> 6; + long l2 = 1L << (curChar & 077); + MatchLoop: do + { + switch(jjstateSet[--i]) + { + case 0: + if (jjCanMove_0(hiByte, i1, i2, l1, l2) && kind > 20) + kind = 20; + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 2 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return curPos; } + } +} static final int[] jjnextStates = { 31, 32, 39, 40, 20, 21, 28, 29, -}; -private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2) -{ - switch(hiByte) - { - case 0: - return ((jjbitVec2[i2] & l2) != 0L); - default : - if ((jjbitVec0[i1] & l1) != 0L) - return true; - return false; - } -} -public static final String[] jjstrLiteralImages = { -"", null, null, null, null, null, null, "\156\165\154\154", "\116\141\116", -"\111\156\146\151\156\151\164\171", null, null, null, null, null, null, null, "\42", null, null, null, null, null, -null, null, "\173", "\175", "\54", "\72", "\133", "\135", "\55", "\56", }; -public static final String[] lexStateNames = { - "DEFAULT", - "STRING_STATE", - "ESC_STATE", - "HEX_STATE", -}; +}; +private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2) +{ + switch(hiByte) + { + case 0: + return ((jjbitVec2[i2] & l2) != 0L); + default : + if ((jjbitVec0[i1] & l1) != 0L) + return true; + return false; + } +} +public static final String[] jjstrLiteralImages = { +"", null, null, null, null, null, null, "\156\165\154\154", "\116\141\116", +"\111\156\146\151\156\151\164\171", null, null, null, null, null, null, null, "\42", null, null, null, null, null, +null, null, "\173", "\175", "\54", "\72", "\133", "\135", "\55", "\56", }; +public static final String[] lexStateNames = { + "DEFAULT", + "STRING_STATE", + "ESC_STATE", + "HEX_STATE", +}; public static final int[] jjnewLexState = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 0, -1, 1, 3, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -}; +}; static final long[] jjtoToken = { 0x1ff3bafe1L, -}; +}; static final long[] jjtoSkip = { 0x1eL, -}; +}; static final long[] jjtoMore = { 0x440000L, -}; -protected SimpleCharStream input_stream; -private final int[] jjrounds = new int[41]; -private final int[] jjstateSet = new int[82]; -protected char curChar; -public JsonParserTokenManager(SimpleCharStream stream){ - if (SimpleCharStream.staticFlag) - throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer."); - input_stream = stream; -} -public JsonParserTokenManager(SimpleCharStream stream, int lexState){ - this(stream); - SwitchTo(lexState); -} -public void ReInit(SimpleCharStream stream) -{ - jjmatchedPos = jjnewStateCnt = 0; - curLexState = defaultLexState; - input_stream = stream; - ReInitRounds(); -} -private final void ReInitRounds() -{ - int i; - jjround = 0x80000001; - for (i = 41; i-- > 0;) - jjrounds[i] = 0x80000000; -} -public void ReInit(SimpleCharStream stream, int lexState) -{ - ReInit(stream); - SwitchTo(lexState); -} -public void SwitchTo(int lexState) -{ - if (lexState >= 4 || lexState < 0) - throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE); - else - curLexState = lexState; -} - -protected Token jjFillToken() -{ - Token t = Token.newToken(jjmatchedKind); - t.kind = jjmatchedKind; - String im = jjstrLiteralImages[jjmatchedKind]; - t.image = (im == null) ? input_stream.GetImage() : im; - t.beginLine = input_stream.getBeginLine(); - t.beginColumn = input_stream.getBeginColumn(); - t.endLine = input_stream.getEndLine(); - t.endColumn = input_stream.getEndColumn(); - return t; -} - -int curLexState = 0; -int defaultLexState = 0; -int jjnewStateCnt; -int jjround; -int jjmatchedPos; -int jjmatchedKind; - -public Token getNextToken() -{ - int kind; - Token specialToken = null; - Token matchedToken; - int curPos = 0; - +}; +protected SimpleCharStream input_stream; +private final int[] jjrounds = new int[41]; +private final int[] jjstateSet = new int[82]; +protected char curChar; +public JsonParserImplTokenManager(SimpleCharStream stream){ + if (SimpleCharStream.staticFlag) + throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer."); + input_stream = stream; +} +public JsonParserImplTokenManager(SimpleCharStream stream, int lexState){ + this(stream); + SwitchTo(lexState); +} +public void ReInit(SimpleCharStream stream) +{ + jjmatchedPos = jjnewStateCnt = 0; + curLexState = defaultLexState; + input_stream = stream; + ReInitRounds(); +} +private final void ReInitRounds() +{ + int i; + jjround = 0x80000001; + for (i = 41; i-- > 0;) + jjrounds[i] = 0x80000000; +} +public void ReInit(SimpleCharStream stream, int lexState) +{ + ReInit(stream); + SwitchTo(lexState); +} +public void SwitchTo(int lexState) +{ + if (lexState >= 4 || lexState < 0) + throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE); + else + curLexState = lexState; +} + +protected Token jjFillToken() +{ + Token t = Token.newToken(jjmatchedKind); + t.kind = jjmatchedKind; + String im = jjstrLiteralImages[jjmatchedKind]; + t.image = (im == null) ? input_stream.GetImage() : im; + t.beginLine = input_stream.getBeginLine(); + t.beginColumn = input_stream.getBeginColumn(); + t.endLine = input_stream.getEndLine(); + t.endColumn = input_stream.getEndColumn(); + return t; +} + +int curLexState = 0; +int defaultLexState = 0; +int jjnewStateCnt; +int jjround; +int jjmatchedPos; +int jjmatchedKind; + +public Token getNextToken() +{ + int kind; + Token specialToken = null; + Token matchedToken; + int curPos = 0; + EOFLoop : - for (;;) - { - try - { - curChar = input_stream.BeginToken(); - } - catch(java.io.IOException e) - { - jjmatchedKind = 0; - matchedToken = jjFillToken(); - return matchedToken; - } - - for (;;) - { - switch(curLexState) - { - case 0: - try { input_stream.backup(0); - while (curChar <= 32 && (0x100002600L & (1L << curChar)) != 0L) - curChar = input_stream.BeginToken(); - } - catch (java.io.IOException e1) { continue EOFLoop; } - jjmatchedKind = 0x7fffffff; - jjmatchedPos = 0; - curPos = jjMoveStringLiteralDfa0_0(); - break; - case 1: - jjmatchedKind = 0x7fffffff; - jjmatchedPos = 0; - curPos = jjMoveStringLiteralDfa0_1(); - break; - case 2: - jjmatchedKind = 0x7fffffff; - jjmatchedPos = 0; - curPos = jjMoveStringLiteralDfa0_2(); - break; - case 3: - jjmatchedKind = 0x7fffffff; - jjmatchedPos = 0; - curPos = jjMoveStringLiteralDfa0_3(); - break; - } - if (jjmatchedKind != 0x7fffffff) - { - if (jjmatchedPos + 1 < curPos) - input_stream.backup(curPos - jjmatchedPos - 1); - if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L) - { - matchedToken = jjFillToken(); - if (jjnewLexState[jjmatchedKind] != -1) - curLexState = jjnewLexState[jjmatchedKind]; - return matchedToken; - } - else if ((jjtoSkip[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L) - { - if (jjnewLexState[jjmatchedKind] != -1) - curLexState = jjnewLexState[jjmatchedKind]; - continue EOFLoop; - } - if (jjnewLexState[jjmatchedKind] != -1) - curLexState = jjnewLexState[jjmatchedKind]; - curPos = 0; - jjmatchedKind = 0x7fffffff; - try { - curChar = input_stream.readChar(); - continue; - } - catch (java.io.IOException e1) { } - } - int error_line = input_stream.getEndLine(); - int error_column = input_stream.getEndColumn(); - String error_after = null; - boolean EOFSeen = false; - try { input_stream.readChar(); input_stream.backup(1); } - catch (java.io.IOException e1) { - EOFSeen = true; - error_after = curPos <= 1 ? "" : input_stream.GetImage(); - if (curChar == '\n' || curChar == '\r') { - error_line++; - error_column = 0; - } - else - error_column++; - } - if (!EOFSeen) { - input_stream.backup(1); - error_after = curPos <= 1 ? "" : input_stream.GetImage(); - } - throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR); - } - } -} - -} + for (;;) + { + try + { + curChar = input_stream.BeginToken(); + } + catch(java.io.IOException e) + { + jjmatchedKind = 0; + matchedToken = jjFillToken(); + return matchedToken; + } + + for (;;) + { + switch(curLexState) + { + case 0: + try { input_stream.backup(0); + while (curChar <= 32 && (0x100002600L & (1L << curChar)) != 0L) + curChar = input_stream.BeginToken(); + } + catch (java.io.IOException e1) { continue EOFLoop; } + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_0(); + break; + case 1: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_1(); + break; + case 2: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_2(); + break; + case 3: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_3(); + break; + } + if (jjmatchedKind != 0x7fffffff) + { + if (jjmatchedPos + 1 < curPos) + input_stream.backup(curPos - jjmatchedPos - 1); + if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L) + { + matchedToken = jjFillToken(); + if (jjnewLexState[jjmatchedKind] != -1) + curLexState = jjnewLexState[jjmatchedKind]; + return matchedToken; + } + else if ((jjtoSkip[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L) + { + if (jjnewLexState[jjmatchedKind] != -1) + curLexState = jjnewLexState[jjmatchedKind]; + continue EOFLoop; + } + if (jjnewLexState[jjmatchedKind] != -1) + curLexState = jjnewLexState[jjmatchedKind]; + curPos = 0; + jjmatchedKind = 0x7fffffff; + try { + curChar = input_stream.readChar(); + continue; + } + catch (java.io.IOException e1) { } + } + int error_line = input_stream.getEndLine(); + int error_column = input_stream.getEndColumn(); + String error_after = null; + boolean EOFSeen = false; + try { input_stream.readChar(); input_stream.backup(1); } + catch (java.io.IOException e1) { + EOFSeen = true; + error_after = curPos <= 1 ? "" : input_stream.GetImage(); + if (curChar == '\n' || curChar == '\r') { + error_line++; + error_column = 0; + } + else + error_column++; + } + if (!EOFSeen) { + input_stream.backup(1); + error_after = curPos <= 1 ? "" : input_stream.GetImage(); + } + throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR); + } + } +} + +} diff --git a/gson/src/main/javacc/JsonParser.jj b/gson/src/main/javacc/JsonParser.jj index d7af7cd6..afd4a94f 100755 --- a/gson/src/main/javacc/JsonParser.jj +++ b/gson/src/main/javacc/JsonParser.jj @@ -9,16 +9,16 @@ options { UNICODE_INPUT = true; } -PARSER_BEGIN(JsonParser) +PARSER_BEGIN(JsonParserImpl) package com.google.gson; @SuppressWarnings("all") -final class JsonParser { +final class JsonParserImpl { } -PARSER_END(JsonParser) +PARSER_END(JsonParserImpl) SKIP : { " " | "\t" | "\n" | "\r" } /* diff --git a/gson/src/test/java/com/google/gson/JsonParserTest.java b/gson/src/test/java/com/google/gson/JsonParserTest.java new file mode 100644 index 00000000..b349bf3d --- /dev/null +++ b/gson/src/test/java/com/google/gson/JsonParserTest.java @@ -0,0 +1,29 @@ +package com.google.gson; + +import junit.framework.TestCase; + +import java.io.StringReader; + +/** + * Unit test for {@link JsonParser} + * + * @author Inderjeet Singh + */ +public class JsonParserTest extends TestCase { + + public void testParseString() { + String json = "{a:10,b:'c'}"; + JsonElement e = JsonParser.parse(json); + assertTrue(e.isJsonObject()); + assertEquals(10, e.getAsJsonObject().get("a").getAsInt()); + assertEquals("c", e.getAsJsonObject().get("b").getAsString()); + } + + public void testParseReader() { + StringReader reader = new StringReader("{a:10,b:'c'}"); + JsonElement e = JsonParser.parse(reader); + assertTrue(e.isJsonObject()); + assertEquals(10, e.getAsJsonObject().get("a").getAsInt()); + assertEquals("c", e.getAsJsonObject().get("b").getAsString()); + } +}