001    /* Generated By:JJTree&JavaCC: Do not edit this line. JsonParser.java */
002    package net.sourceforge.javajson.parser;
003    
004    public class JsonParser/*@bgen(jjtree)*/implements JsonParserTreeConstants, JsonParserConstants {/*@bgen(jjtree)*/
005      protected JJTJsonParserState jjtree = new JJTJsonParserState();public static void main(String args[]) throws Exception {
006        System.out.println("Reading from standard input...");
007        JsonParser t = new JsonParser(System.in);
008            SimpleNode n = t.parse();
009            n.dump("");
010      }
011    
012      final public SimpleNode parse() throws ParseException {
013                          /*@bgen(jjtree) parse */
014      ASTparse jjtn000 = new ASTparse(this, JJTPARSE);
015      boolean jjtc000 = true;
016      jjtree.openNodeScope(jjtn000);
017        try {
018          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
019          case 22:
020            object();
021            jj_consume_token(0);
022                         jjtree.closeNodeScope(jjtn000, true);
023                         jjtc000 = false;
024                         {if (true) return jjtn000;}
025            break;
026          case 24:
027            array();
028            jj_consume_token(0);
029                        jjtree.closeNodeScope(jjtn000, true);
030                        jjtc000 = false;
031                        {if (true) return jjtn000;}
032            break;
033          default:
034            jj_la1[0] = jj_gen;
035            jj_consume_token(-1);
036            throw new ParseException();
037          }
038        } catch (Throwable jjte000) {
039        if (jjtc000) {
040          jjtree.clearNodeScope(jjtn000);
041          jjtc000 = false;
042        } else {
043          jjtree.popNode();
044        }
045        if (jjte000 instanceof RuntimeException) {
046          {if (true) throw (RuntimeException)jjte000;}
047        }
048        if (jjte000 instanceof ParseException) {
049          {if (true) throw (ParseException)jjte000;}
050        }
051        {if (true) throw (Error)jjte000;}
052        } finally {
053        if (jjtc000) {
054          jjtree.closeNodeScope(jjtn000, true);
055        }
056        }
057        throw new Error("Missing return statement in function");
058      }
059    
060      final public void object() throws ParseException {
061                     /*@bgen(jjtree) object */
062      ASTobject jjtn000 = new ASTobject(this, JJTOBJECT);
063      boolean jjtc000 = true;
064      jjtree.openNodeScope(jjtn000);
065        try {
066          jj_consume_token(22);
067          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
068          case KEY_LITERAL:
069          case STRING_LITERAL:
070          case STRING_LITERAL_SINGLE_QUOTES:
071            members();
072            break;
073          default:
074            jj_la1[1] = jj_gen;
075            ;
076          }
077          jj_consume_token(23);
078        } catch (Throwable jjte000) {
079        if (jjtc000) {
080          jjtree.clearNodeScope(jjtn000);
081          jjtc000 = false;
082        } else {
083          jjtree.popNode();
084        }
085        if (jjte000 instanceof RuntimeException) {
086          {if (true) throw (RuntimeException)jjte000;}
087        }
088        if (jjte000 instanceof ParseException) {
089          {if (true) throw (ParseException)jjte000;}
090        }
091        {if (true) throw (Error)jjte000;}
092        } finally {
093        if (jjtc000) {
094          jjtree.closeNodeScope(jjtn000, true);
095        }
096        }
097      }
098    
099      final public void array() throws ParseException {
100                    /*@bgen(jjtree) array */
101      ASTarray jjtn000 = new ASTarray(this, JJTARRAY);
102      boolean jjtc000 = true;
103      jjtree.openNodeScope(jjtn000);
104        try {
105          jj_consume_token(24);
106          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
107          case INTEGER_LITERAL:
108          case FLOATING_POINT_LITERAL:
109          case TRUE_LITERAL:
110          case FALSE_LITERAL:
111          case NULL_LITERAL:
112          case STRING_LITERAL:
113          case STRING_LITERAL_SINGLE_QUOTES:
114          case 22:
115          case 24:
116            elements();
117            break;
118          default:
119            jj_la1[2] = jj_gen;
120            ;
121          }
122          jj_consume_token(25);
123        } catch (Throwable jjte000) {
124        if (jjtc000) {
125          jjtree.clearNodeScope(jjtn000);
126          jjtc000 = false;
127        } else {
128          jjtree.popNode();
129        }
130        if (jjte000 instanceof RuntimeException) {
131          {if (true) throw (RuntimeException)jjte000;}
132        }
133        if (jjte000 instanceof ParseException) {
134          {if (true) throw (ParseException)jjte000;}
135        }
136        {if (true) throw (Error)jjte000;}
137        } finally {
138        if (jjtc000) {
139          jjtree.closeNodeScope(jjtn000, true);
140        }
141        }
142      }
143    
144      final public void members() throws ParseException {
145                      /*@bgen(jjtree) members */
146      ASTmembers jjtn000 = new ASTmembers(this, JJTMEMBERS);
147      boolean jjtc000 = true;
148      jjtree.openNodeScope(jjtn000);
149        try {
150          key();
151          jj_consume_token(26);
152          value();
153          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
154          case 27:
155            jj_consume_token(27);
156            members();
157            break;
158          default:
159            jj_la1[3] = jj_gen;
160            ;
161          }
162        } catch (Throwable jjte000) {
163        if (jjtc000) {
164          jjtree.clearNodeScope(jjtn000);
165          jjtc000 = false;
166        } else {
167          jjtree.popNode();
168        }
169        if (jjte000 instanceof RuntimeException) {
170          {if (true) throw (RuntimeException)jjte000;}
171        }
172        if (jjte000 instanceof ParseException) {
173          {if (true) throw (ParseException)jjte000;}
174        }
175        {if (true) throw (Error)jjte000;}
176        } finally {
177        if (jjtc000) {
178          jjtree.closeNodeScope(jjtn000, true);
179        }
180        }
181      }
182    
183      final public void elements() throws ParseException {
184                       /*@bgen(jjtree) elements */
185      ASTelements jjtn000 = new ASTelements(this, JJTELEMENTS);
186      boolean jjtc000 = true;
187      jjtree.openNodeScope(jjtn000);
188        try {
189          value();
190          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
191          case 27:
192            jj_consume_token(27);
193            elements();
194            break;
195          default:
196            jj_la1[4] = jj_gen;
197            ;
198          }
199        } catch (Throwable jjte000) {
200        if (jjtc000) {
201          jjtree.clearNodeScope(jjtn000);
202          jjtc000 = false;
203        } else {
204          jjtree.popNode();
205        }
206        if (jjte000 instanceof RuntimeException) {
207          {if (true) throw (RuntimeException)jjte000;}
208        }
209        if (jjte000 instanceof ParseException) {
210          {if (true) throw (ParseException)jjte000;}
211        }
212        {if (true) throw (Error)jjte000;}
213        } finally {
214        if (jjtc000) {
215          jjtree.closeNodeScope(jjtn000, true);
216        }
217        }
218      }
219    
220      final public void value() throws ParseException {
221     /*@bgen(jjtree) value */
222      ASTvalue jjtn000 = new ASTvalue(this, JJTVALUE);
223      boolean jjtc000 = true;
224      jjtree.openNodeScope(jjtn000);Token t;
225        try {
226          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
227          case STRING_LITERAL:
228          case STRING_LITERAL_SINGLE_QUOTES:
229            string();
230            break;
231          case INTEGER_LITERAL:
232          case FLOATING_POINT_LITERAL:
233            number();
234            break;
235          case 22:
236            object();
237            break;
238          case 24:
239            array();
240            break;
241          case TRUE_LITERAL:
242            t = jj_consume_token(TRUE_LITERAL);
243                           jjtree.closeNodeScope(jjtn000, true);
244                           jjtc000 = false;
245                           jjtn000.val = t.image;
246            break;
247          case FALSE_LITERAL:
248            t = jj_consume_token(FALSE_LITERAL);
249                            jjtree.closeNodeScope(jjtn000, true);
250                            jjtc000 = false;
251                            jjtn000.val = t.image;
252            break;
253          case NULL_LITERAL:
254            t = jj_consume_token(NULL_LITERAL);
255                           jjtree.closeNodeScope(jjtn000, true);
256                           jjtc000 = false;
257                           jjtn000.val = t.image;
258            break;
259          default:
260            jj_la1[5] = jj_gen;
261            jj_consume_token(-1);
262            throw new ParseException();
263          }
264        } catch (Throwable jjte000) {
265        if (jjtc000) {
266          jjtree.clearNodeScope(jjtn000);
267          jjtc000 = false;
268        } else {
269          jjtree.popNode();
270        }
271        if (jjte000 instanceof RuntimeException) {
272          {if (true) throw (RuntimeException)jjte000;}
273        }
274        if (jjte000 instanceof ParseException) {
275          {if (true) throw (ParseException)jjte000;}
276        }
277        {if (true) throw (Error)jjte000;}
278        } finally {
279        if (jjtc000) {
280          jjtree.closeNodeScope(jjtn000, true);
281        }
282        }
283      }
284    
285      final public void key() throws ParseException {
286     /*@bgen(jjtree) key */
287      ASTkey jjtn000 = new ASTkey(this, JJTKEY);
288      boolean jjtc000 = true;
289      jjtree.openNodeScope(jjtn000);Token t;
290        try {
291          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
292          case KEY_LITERAL:
293            t = jj_consume_token(KEY_LITERAL);
294                          jjtree.closeNodeScope(jjtn000, true);
295                          jjtc000 = false;
296                          jjtn000.val = t.image;
297            break;
298          case STRING_LITERAL:
299            t = jj_consume_token(STRING_LITERAL);
300                             jjtree.closeNodeScope(jjtn000, true);
301                             jjtc000 = false;
302                             jjtn000.val = t.image;
303            break;
304          case STRING_LITERAL_SINGLE_QUOTES:
305            t = jj_consume_token(STRING_LITERAL_SINGLE_QUOTES);
306                                           jjtree.closeNodeScope(jjtn000, true);
307                                           jjtc000 = false;
308                                           jjtn000.val = t.image;
309            break;
310          default:
311            jj_la1[6] = jj_gen;
312            jj_consume_token(-1);
313            throw new ParseException();
314          }
315        } finally {
316        if (jjtc000) {
317          jjtree.closeNodeScope(jjtn000, true);
318        }
319        }
320      }
321    
322      final public void string() throws ParseException {
323     /*@bgen(jjtree) string */
324      ASTstring jjtn000 = new ASTstring(this, JJTSTRING);
325      boolean jjtc000 = true;
326      jjtree.openNodeScope(jjtn000);Token t;
327        try {
328          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
329          case STRING_LITERAL:
330            t = jj_consume_token(STRING_LITERAL);
331                             jjtree.closeNodeScope(jjtn000, true);
332                             jjtc000 = false;
333                             jjtn000.val = t.image;
334            break;
335          case STRING_LITERAL_SINGLE_QUOTES:
336            t = jj_consume_token(STRING_LITERAL_SINGLE_QUOTES);
337                                           jjtree.closeNodeScope(jjtn000, true);
338                                           jjtc000 = false;
339                                           jjtn000.val = t.image;
340            break;
341          default:
342            jj_la1[7] = jj_gen;
343            jj_consume_token(-1);
344            throw new ParseException();
345          }
346        } finally {
347        if (jjtc000) {
348          jjtree.closeNodeScope(jjtn000, true);
349        }
350        }
351      }
352    
353      final public void number() throws ParseException {
354     /*@bgen(jjtree) number */
355      ASTnumber jjtn000 = new ASTnumber(this, JJTNUMBER);
356      boolean jjtc000 = true;
357      jjtree.openNodeScope(jjtn000);Token t;
358        try {
359          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
360          case INTEGER_LITERAL:
361            t = jj_consume_token(INTEGER_LITERAL);
362                              jjtree.closeNodeScope(jjtn000, true);
363                              jjtc000 = false;
364                              jjtn000.val = t.image;
365            break;
366          case FLOATING_POINT_LITERAL:
367            t = jj_consume_token(FLOATING_POINT_LITERAL);
368                                     jjtree.closeNodeScope(jjtn000, true);
369                                     jjtc000 = false;
370                                     jjtn000.val = t.image;
371            break;
372          default:
373            jj_la1[8] = jj_gen;
374            jj_consume_token(-1);
375            throw new ParseException();
376          }
377        } finally {
378        if (jjtc000) {
379          jjtree.closeNodeScope(jjtn000, true);
380        }
381        }
382      }
383    
384      public JsonParserTokenManager token_source;
385      SimpleCharStream jj_input_stream;
386      public Token token, jj_nt;
387      private int jj_ntk;
388      private int jj_gen;
389      final private int[] jj_la1 = new int[9];
390      static private int[] jj_la1_0;
391      static {
392          jj_la1_0();
393       }
394       private static void jj_la1_0() {
395          jj_la1_0 = new int[] {0x1400000,0x380000,0x1774200,0x8000000,0x8000000,0x1774200,0x380000,0x300000,0x4200,};
396       }
397    
398      public JsonParser(java.io.InputStream stream) {
399         this(stream, null);
400      }
401      public JsonParser(java.io.InputStream stream, String encoding) {
402        try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
403        token_source = new JsonParserTokenManager(jj_input_stream);
404        token = new Token();
405        jj_ntk = -1;
406        jj_gen = 0;
407        for (int i = 0; i < 9; i++) jj_la1[i] = -1;
408      }
409    
410      public void ReInit(java.io.InputStream stream) {
411         ReInit(stream, null);
412      }
413      public void ReInit(java.io.InputStream stream, String encoding) {
414        try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
415        token_source.ReInit(jj_input_stream);
416        token = new Token();
417        jj_ntk = -1;
418        jjtree.reset();
419        jj_gen = 0;
420        for (int i = 0; i < 9; i++) jj_la1[i] = -1;
421      }
422    
423      public JsonParser(java.io.Reader stream) {
424        jj_input_stream = new SimpleCharStream(stream, 1, 1);
425        token_source = new JsonParserTokenManager(jj_input_stream);
426        token = new Token();
427        jj_ntk = -1;
428        jj_gen = 0;
429        for (int i = 0; i < 9; i++) jj_la1[i] = -1;
430      }
431    
432      public void ReInit(java.io.Reader stream) {
433        jj_input_stream.ReInit(stream, 1, 1);
434        token_source.ReInit(jj_input_stream);
435        token = new Token();
436        jj_ntk = -1;
437        jjtree.reset();
438        jj_gen = 0;
439        for (int i = 0; i < 9; i++) jj_la1[i] = -1;
440      }
441    
442      public JsonParser(JsonParserTokenManager tm) {
443        token_source = tm;
444        token = new Token();
445        jj_ntk = -1;
446        jj_gen = 0;
447        for (int i = 0; i < 9; i++) jj_la1[i] = -1;
448      }
449    
450      public void ReInit(JsonParserTokenManager tm) {
451        token_source = tm;
452        token = new Token();
453        jj_ntk = -1;
454        jjtree.reset();
455        jj_gen = 0;
456        for (int i = 0; i < 9; i++) jj_la1[i] = -1;
457      }
458    
459      final private Token jj_consume_token(int kind) throws ParseException {
460        Token oldToken;
461        if ((oldToken = token).next != null) token = token.next;
462        else token = token.next = token_source.getNextToken();
463        jj_ntk = -1;
464        if (token.kind == kind) {
465          jj_gen++;
466          return token;
467        }
468        token = oldToken;
469        jj_kind = kind;
470        throw generateParseException();
471      }
472    
473      final public Token getNextToken() {
474        if (token.next != null) token = token.next;
475        else token = token.next = token_source.getNextToken();
476        jj_ntk = -1;
477        jj_gen++;
478        return token;
479      }
480    
481      final public Token getToken(int index) {
482        Token t = token;
483        for (int i = 0; i < index; i++) {
484          if (t.next != null) t = t.next;
485          else t = t.next = token_source.getNextToken();
486        }
487        return t;
488      }
489    
490      final private int jj_ntk() {
491        if ((jj_nt=token.next) == null)
492          return (jj_ntk = (token.next=token_source.getNextToken()).kind);
493        else
494          return (jj_ntk = jj_nt.kind);
495      }
496    
497      private java.util.Vector jj_expentries = new java.util.Vector();
498      private int[] jj_expentry;
499      private int jj_kind = -1;
500    
501      public ParseException generateParseException() {
502        jj_expentries.removeAllElements();
503        boolean[] la1tokens = new boolean[28];
504        for (int i = 0; i < 28; i++) {
505          la1tokens[i] = false;
506        }
507        if (jj_kind >= 0) {
508          la1tokens[jj_kind] = true;
509          jj_kind = -1;
510        }
511        for (int i = 0; i < 9; i++) {
512          if (jj_la1[i] == jj_gen) {
513            for (int j = 0; j < 32; j++) {
514              if ((jj_la1_0[i] & (1<<j)) != 0) {
515                la1tokens[j] = true;
516              }
517            }
518          }
519        }
520        for (int i = 0; i < 28; i++) {
521          if (la1tokens[i]) {
522            jj_expentry = new int[1];
523            jj_expentry[0] = i;
524            jj_expentries.addElement(jj_expentry);
525          }
526        }
527        int[][] exptokseq = new int[jj_expentries.size()][];
528        for (int i = 0; i < jj_expentries.size(); i++) {
529          exptokseq[i] = (int[])jj_expentries.elementAt(i);
530        }
531        return new ParseException(token, exptokseq, tokenImage);
532      }
533    
534      final public void enable_tracing() {
535      }
536    
537      final public void disable_tracing() {
538      }
539    
540    }