001    /* Generated By:JavaCC: Do not edit this line. ProtoParser.java */
002    /**
003     * Licensed to the Apache Software Foundation (ASF) under one or more
004     * contributor license agreements.  See the NOTICE file distributed with
005     * this work for additional information regarding copyright ownership.
006     * The ASF licenses this file to You under the Apache License, Version 2.0
007     * (the "License"); you may not use this file except in compliance with
008     * the License.  You may obtain a copy of the License at
009     *
010     *      http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing, software
013     * distributed under the License is distributed on an "AS IS" BASIS,
014     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    package org.fusesource.hawtbuf.proto.compiler.parser;
019    
020    import org.fusesource.hawtbuf.proto.compiler.*;
021    import java.util.LinkedHashMap;
022    import java.util.ArrayList;
023    import java.util.Hashtable;
024    import java.util.Iterator;
025    import java.io.File;
026    import java.io.FileReader;
027    import java.io.FileNotFoundException;
028    import java.io.IOException;
029    
030    /**
031     * This class is generated with JavaCC. Do not modify manually.
032     */
033    public class ProtoParser implements ProtoParserConstants {
034    
035      final public ProtoDescriptor ProtoDescriptor() throws ParseException {
036            ProtoDescriptor proto = new ProtoDescriptor();
037            String packageName=null;
038        LinkedHashMap<String,OptionDescriptor> opts = new LinkedHashMap<String,OptionDescriptor>();
039        LinkedHashMap<String,MessageDescriptor> messages = new LinkedHashMap<String,MessageDescriptor>();
040        LinkedHashMap<String,EnumDescriptor> enums = new LinkedHashMap<String,EnumDescriptor>();
041        ArrayList<MessageDescriptor> extendsList = new ArrayList<MessageDescriptor>();
042        LinkedHashMap<String,ServiceDescriptor> services = new LinkedHashMap<String,ServiceDescriptor>();
043        ArrayList<String> imports = new ArrayList<String>();
044    
045        OptionDescriptor optionD;
046        MessageDescriptor messageD;
047        EnumDescriptor enumD;
048        ServiceDescriptor serviceD;
049        MessageDescriptor extendD;
050        String o;
051        label_1:
052        while (true) {
053          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
054          case PACKAGE:
055            jj_consume_token(PACKAGE);
056            packageName = PackageID();
057            jj_consume_token(SEMICOLON);
058            break;
059          case OPTION:
060            jj_consume_token(OPTION);
061            optionD = OptionDescriptor();
062            jj_consume_token(SEMICOLON);
063              opts.put(optionD.getName(),optionD);
064            break;
065          case IMPORT:
066            jj_consume_token(IMPORT);
067            o = StringLitteral();
068            jj_consume_token(SEMICOLON);
069              imports.add((String)o);
070            break;
071          case MESSAGE:
072            messageD = MessageDescriptor(proto, null);
073            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
074            case SEMICOLON:
075              jj_consume_token(SEMICOLON);
076              break;
077            default:
078              jj_la1[0] = jj_gen;
079              ;
080            }
081              messages.put(messageD.getName(),messageD);
082            break;
083          case ENUM:
084            enumD = EnumDescriptor(proto, null);
085            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
086            case SEMICOLON:
087              jj_consume_token(SEMICOLON);
088              break;
089            default:
090              jj_la1[1] = jj_gen;
091              ;
092            }
093              enums.put(enumD.getName(),enumD);
094            break;
095          case SERVICE:
096            serviceD = ServiceDescriptor(proto);
097            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
098            case SEMICOLON:
099              jj_consume_token(SEMICOLON);
100              break;
101            default:
102              jj_la1[2] = jj_gen;
103              ;
104            }
105              services.put(serviceD.getName(),serviceD);
106            break;
107          case EXTEND:
108            extendD = ExtendDescriptor(proto, null);
109            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
110            case SEMICOLON:
111              jj_consume_token(SEMICOLON);
112              break;
113            default:
114              jj_la1[3] = jj_gen;
115              ;
116            }
117              extendsList.add(extendD);
118            break;
119          default:
120            jj_la1[4] = jj_gen;
121            jj_consume_token(-1);
122            throw new ParseException();
123          }
124          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
125          case IMPORT:
126          case PACKAGE:
127          case SERVICE:
128          case OPTION:
129          case MESSAGE:
130          case EXTEND:
131          case ENUM:
132            ;
133            break;
134          default:
135            jj_la1[5] = jj_gen;
136            break label_1;
137          }
138        }
139        jj_consume_token(0);
140            proto.setPackageName(packageName);
141            proto.setImports(imports);
142            proto.setOptions(opts);
143            proto.setMessages(messages);
144            proto.setEnums(enums);
145            proto.setServices(services);
146            proto.setExtends(extendsList);
147            {if (true) return proto;}
148        throw new Error("Missing return statement in function");
149      }
150    
151      final public MessageDescriptor MessageDescriptor(ProtoDescriptor proto, MessageDescriptor parent) throws ParseException {
152        String name;
153        LinkedHashMap<String,FieldDescriptor> fields = new LinkedHashMap<String,FieldDescriptor>();
154        LinkedHashMap<String,MessageDescriptor> messages = new LinkedHashMap<String,MessageDescriptor>();
155        LinkedHashMap<String,EnumDescriptor> enums = new LinkedHashMap<String,EnumDescriptor>();
156        ArrayList<MessageDescriptor> extendsList = new ArrayList<MessageDescriptor>();
157        LinkedHashMap<String,OptionDescriptor> opts = new LinkedHashMap<String,OptionDescriptor>();
158    
159            MessageDescriptor rc = new MessageDescriptor(proto, parent);
160        OptionDescriptor optionD;
161        ExtensionsDescriptor extensionsD=null;
162            FieldDescriptor fieldD;
163            MessageDescriptor messageD;
164            EnumDescriptor enumD;
165            MessageDescriptor extendD;
166        jj_consume_token(MESSAGE);
167        name = ID();
168        jj_consume_token(LBRACE);
169        label_2:
170        while (true) {
171          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
172          case OPTION:
173          case MESSAGE:
174          case EXTENSIONS:
175          case EXTEND:
176          case ENUM:
177          case REQURIED:
178          case OPTIONAL:
179          case REPEATED:
180            ;
181            break;
182          default:
183            jj_la1[6] = jj_gen;
184            break label_2;
185          }
186          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
187          case OPTION:
188            jj_consume_token(OPTION);
189            optionD = OptionDescriptor();
190            jj_consume_token(SEMICOLON);
191              opts.put(optionD.getName(),optionD);
192            break;
193          case REQURIED:
194          case OPTIONAL:
195          case REPEATED:
196            fieldD = FieldDescriptor(rc);
197              fields.put(fieldD.getName(), fieldD);
198            break;
199          case MESSAGE:
200            messageD = MessageDescriptor(proto, rc);
201            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
202            case SEMICOLON:
203              jj_consume_token(SEMICOLON);
204              break;
205            default:
206              jj_la1[7] = jj_gen;
207              ;
208            }
209              messages.put(messageD.getName(),messageD);
210            break;
211          case ENUM:
212            enumD = EnumDescriptor(proto, rc);
213            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
214            case SEMICOLON:
215              jj_consume_token(SEMICOLON);
216              break;
217            default:
218              jj_la1[8] = jj_gen;
219              ;
220            }
221              enums.put(enumD.getName(), enumD);
222            break;
223          case EXTENSIONS:
224            extensionsD = ExtensionsDescriptor(rc);
225            jj_consume_token(SEMICOLON);
226            break;
227          case EXTEND:
228            extendD = ExtendDescriptor(proto, rc);
229            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
230            case SEMICOLON:
231              jj_consume_token(SEMICOLON);
232              break;
233            default:
234              jj_la1[9] = jj_gen;
235              ;
236            }
237              extendsList.add(extendD);
238            break;
239          default:
240            jj_la1[10] = jj_gen;
241            jj_consume_token(-1);
242            throw new ParseException();
243          }
244        }
245        jj_consume_token(RBRACE);
246            rc.setName(name);
247            rc.setFields(fields);
248            rc.setMessages(messages);
249            rc.setEnums(enums);
250            rc.setExtensions(extensionsD);
251            rc.setOptions(opts);
252            {if (true) return rc;}
253        throw new Error("Missing return statement in function");
254      }
255    
256    /**
257     * Parses something like:
258     * optional string foo = 1;
259     */
260      final public FieldDescriptor FieldDescriptor(MessageDescriptor parent) throws ParseException {
261        String rule;
262        String type;
263        String name;
264        int tag;
265        LinkedHashMap<String,OptionDescriptor> opts = new LinkedHashMap<String,OptionDescriptor>();
266        LinkedHashMap<String,FieldDescriptor> fields = new LinkedHashMap<String,FieldDescriptor>();
267        OptionDescriptor optionD;
268            FieldDescriptor fieldD;
269            FieldDescriptor rc = new FieldDescriptor(parent);
270            MessageDescriptor group = new MessageDescriptor(parent.getProtoDescriptor(), parent);
271        rule = Rule();
272        if (jj_2_1(5)) {
273          type = PackageID();
274          name = ID();
275          jj_consume_token(EQUALS);
276          tag = Integer();
277          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
278          case LBRACKET:
279            jj_consume_token(LBRACKET);
280            optionD = OptionDescriptor();
281                            opts.put(optionD.getName(), optionD);
282            label_3:
283            while (true) {
284              switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
285              case COMMA:
286                ;
287                break;
288              default:
289                jj_la1[11] = jj_gen;
290                break label_3;
291              }
292              jj_consume_token(COMMA);
293              optionD = OptionDescriptor();
294                                    opts.put(optionD.getName(), optionD);
295            }
296            jj_consume_token(RBRACKET);
297            break;
298          default:
299            jj_la1[12] = jj_gen;
300            ;
301          }
302          jj_consume_token(SEMICOLON);
303        } else {
304          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
305          case GROUP:
306    
307            jj_consume_token(GROUP);
308            name = ID();
309            jj_consume_token(EQUALS);
310            tag = Integer();
311            jj_consume_token(LBRACE);
312            label_4:
313            while (true) {
314              switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
315              case REQURIED:
316              case OPTIONAL:
317              case REPEATED:
318                ;
319                break;
320              default:
321                jj_la1[13] = jj_gen;
322                break label_4;
323              }
324              fieldD = FieldDescriptor(group);
325                            fields.put(fieldD.getName(), fieldD);
326            }
327            jj_consume_token(RBRACE);
328            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
329            case SEMICOLON:
330              jj_consume_token(SEMICOLON);
331              break;
332            default:
333              jj_la1[14] = jj_gen;
334              ;
335            }
336                    type = name;
337                    group.setName(name);
338                    group.setFields(fields);
339                    rc.setGroup(group);
340            break;
341          default:
342            jj_la1[15] = jj_gen;
343            jj_consume_token(-1);
344            throw new ParseException();
345          }
346        }
347            rc.setName(name);
348            rc.setType(type);
349            rc.setRule(rule);
350            rc.setTag(tag);
351            rc.setOptions(opts);
352                    {if (true) return rc;}
353        throw new Error("Missing return statement in function");
354      }
355    
356      final public ServiceDescriptor ServiceDescriptor(ProtoDescriptor proto) throws ParseException {
357        String name;
358        ArrayList<MethodDescriptor> methods = new ArrayList<MethodDescriptor>();
359        MethodDescriptor method;
360        jj_consume_token(SERVICE);
361        name = ID();
362        jj_consume_token(LBRACE);
363        label_5:
364        while (true) {
365          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
366          case RPC:
367            ;
368            break;
369          default:
370            jj_la1[16] = jj_gen;
371            break label_5;
372          }
373          method = MethodDescriptor(proto);
374          jj_consume_token(SEMICOLON);
375                    methods.add(method);
376        }
377        jj_consume_token(RBRACE);
378            ServiceDescriptor rc = new ServiceDescriptor(proto);
379            rc.setName(name);
380            rc.setMethods(methods);
381            {if (true) return rc;}
382        throw new Error("Missing return statement in function");
383      }
384    
385      final public MethodDescriptor MethodDescriptor(ProtoDescriptor proto) throws ParseException {
386        String name;
387        String input;
388        String output;
389        jj_consume_token(RPC);
390        name = ID();
391        jj_consume_token(LPAREN);
392        input = PackageID();
393        jj_consume_token(RPAREN);
394        jj_consume_token(RETURNS);
395        jj_consume_token(LPAREN);
396        output = PackageID();
397        jj_consume_token(RPAREN);
398            MethodDescriptor rc = new MethodDescriptor(proto);
399            rc.setName(name);
400            rc.setParameter(input);
401            rc.setReturns(output);
402            {if (true) return rc;}
403        throw new Error("Missing return statement in function");
404      }
405    
406      final public OptionDescriptor OptionDescriptor() throws ParseException {
407        String name;
408        String value;
409        name = ID();
410        jj_consume_token(EQUALS);
411        value = Value();
412            OptionDescriptor rc = new OptionDescriptor();
413            rc.setName(name);
414            rc.setValue(value);
415            {if (true) return rc;}
416        throw new Error("Missing return statement in function");
417      }
418    
419      final public MessageDescriptor ExtendDescriptor(ProtoDescriptor proto, MessageDescriptor parent) throws ParseException {
420        String name;
421        LinkedHashMap<String, FieldDescriptor> fields = new LinkedHashMap<String,FieldDescriptor>();
422            MessageDescriptor rc = new MessageDescriptor(proto, parent);
423        FieldDescriptor fieldD;
424        jj_consume_token(EXTEND);
425        name = ID();
426        jj_consume_token(LBRACE);
427        label_6:
428        while (true) {
429          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
430          case REQURIED:
431          case OPTIONAL:
432          case REPEATED:
433            ;
434            break;
435          default:
436            jj_la1[17] = jj_gen;
437            break label_6;
438          }
439          fieldD = FieldDescriptor(rc);
440              fields.put(fieldD.getName(), fieldD);
441        }
442        jj_consume_token(RBRACE);
443            rc.setName(name);
444            rc.setFields(fields);
445            {if (true) return rc;}
446        throw new Error("Missing return statement in function");
447      }
448    
449      final public ExtensionsDescriptor ExtensionsDescriptor(MessageDescriptor parent) throws ParseException {
450            int first;
451            int last;
452        jj_consume_token(EXTENSIONS);
453        first = Integer();
454        jj_consume_token(TO);
455        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
456        case INTEGER:
457          last = Integer();
458          break;
459        case MAX:
460          jj_consume_token(MAX);
461                    last=536870911;
462          break;
463        default:
464          jj_la1[18] = jj_gen;
465          jj_consume_token(-1);
466          throw new ParseException();
467        }
468            ExtensionsDescriptor rc = new ExtensionsDescriptor(parent);
469            rc.setFirst(first);
470            rc.setLast(last);
471            {if (true) return rc;}
472        throw new Error("Missing return statement in function");
473      }
474    
475      final public EnumDescriptor EnumDescriptor(ProtoDescriptor proto, MessageDescriptor parent) throws ParseException {
476        Token name;
477        LinkedHashMap<String,EnumFieldDescriptor> fields = new LinkedHashMap<String,EnumFieldDescriptor>();
478            EnumDescriptor rc = new EnumDescriptor(proto, parent);
479        LinkedHashMap<String,OptionDescriptor> opts = new LinkedHashMap<String,OptionDescriptor>();
480    
481        EnumFieldDescriptor enumD;
482        OptionDescriptor optionD;
483        jj_consume_token(ENUM);
484        name = jj_consume_token(ID);
485        jj_consume_token(LBRACE);
486        label_7:
487        while (true) {
488          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
489          case IMPORT:
490          case PACKAGE:
491          case SERVICE:
492          case RPC:
493          case OPTION:
494          case MESSAGE:
495          case EXTENSIONS:
496          case EXTEND:
497          case ENUM:
498          case GROUP:
499          case REQURIED:
500          case OPTIONAL:
501          case REPEATED:
502          case RETURNS:
503          case TO:
504          case MAX:
505          case ID:
506            ;
507            break;
508          default:
509            jj_la1[19] = jj_gen;
510            break label_7;
511          }
512          if (jj_2_2(2)) {
513            jj_consume_token(OPTION);
514            optionD = OptionDescriptor();
515            jj_consume_token(SEMICOLON);
516              opts.put(optionD.getName(),optionD);
517          } else {
518            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
519            case IMPORT:
520            case PACKAGE:
521            case SERVICE:
522            case RPC:
523            case OPTION:
524            case MESSAGE:
525            case EXTENSIONS:
526            case EXTEND:
527            case ENUM:
528            case GROUP:
529            case REQURIED:
530            case OPTIONAL:
531            case REPEATED:
532            case RETURNS:
533            case TO:
534            case MAX:
535            case ID:
536              enumD = EnumFieldDescriptor(rc);
537              jj_consume_token(SEMICOLON);
538              fields.put(enumD.getName(),enumD);
539              break;
540            default:
541              jj_la1[20] = jj_gen;
542              jj_consume_token(-1);
543              throw new ParseException();
544            }
545          }
546        }
547        jj_consume_token(RBRACE);
548            rc.setName(name.image);
549            rc.setFields(fields);
550            rc.setOptions(opts);
551            {if (true) return rc;}
552        throw new Error("Missing return statement in function");
553      }
554    
555    /**
556     * Parses something like:
557     * optional string foo = 1;
558     */
559      final public EnumFieldDescriptor EnumFieldDescriptor(EnumDescriptor parent) throws ParseException {
560        String name;
561        int value=0;
562        name = ID();
563        jj_consume_token(EQUALS);
564        value = Integer();
565            EnumFieldDescriptor rc = new EnumFieldDescriptor(parent);
566            rc.setName(name);
567            rc.setValue(value);
568            {if (true) return rc;}
569        throw new Error("Missing return statement in function");
570      }
571    
572      final public int Integer() throws ParseException {
573        Token t;
574        t = jj_consume_token(INTEGER);
575            {if (true) return Integer.parseInt(t.image);}
576        throw new Error("Missing return statement in function");
577      }
578    
579      final public String Rule() throws ParseException {
580        Token t;
581        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
582        case REQURIED:
583          t = jj_consume_token(REQURIED);
584          break;
585        case OPTIONAL:
586          t = jj_consume_token(OPTIONAL);
587          break;
588        case REPEATED:
589          t = jj_consume_token(REPEATED);
590          break;
591        default:
592          jj_la1[21] = jj_gen;
593          jj_consume_token(-1);
594          throw new ParseException();
595        }
596            {if (true) return t.image;}
597        throw new Error("Missing return statement in function");
598      }
599    
600      final public String Value() throws ParseException {
601        Token t;
602        String value=null;
603        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
604        case STRING:
605          value = StringLitteral();
606          break;
607        case IMPORT:
608        case PACKAGE:
609        case SERVICE:
610        case RPC:
611        case OPTION:
612        case MESSAGE:
613        case EXTENSIONS:
614        case EXTEND:
615        case ENUM:
616        case GROUP:
617        case REQURIED:
618        case OPTIONAL:
619        case REPEATED:
620        case RETURNS:
621        case TO:
622        case MAX:
623        case ID:
624          value = ID();
625          break;
626        case INTEGER:
627          t = jj_consume_token(INTEGER);
628                            value = t.image;
629          break;
630        case FLOAT:
631          t = jj_consume_token(FLOAT);
632                            value = t.image;
633          break;
634        default:
635          jj_la1[22] = jj_gen;
636          jj_consume_token(-1);
637          throw new ParseException();
638        }
639            {if (true) return value;}
640        throw new Error("Missing return statement in function");
641      }
642    
643      final public String ID() throws ParseException {
644        Token t;
645        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
646        case ID:
647          t = jj_consume_token(ID);
648          break;
649        case GROUP:
650          t = jj_consume_token(GROUP);
651          break;
652        case IMPORT:
653          t = jj_consume_token(IMPORT);
654          break;
655        case PACKAGE:
656          t = jj_consume_token(PACKAGE);
657          break;
658        case SERVICE:
659          t = jj_consume_token(SERVICE);
660          break;
661        case RPC:
662          t = jj_consume_token(RPC);
663          break;
664        case OPTION:
665          t = jj_consume_token(OPTION);
666          break;
667        case MESSAGE:
668          t = jj_consume_token(MESSAGE);
669          break;
670        case EXTENSIONS:
671          t = jj_consume_token(EXTENSIONS);
672          break;
673        case EXTEND:
674          t = jj_consume_token(EXTEND);
675          break;
676        case ENUM:
677          t = jj_consume_token(ENUM);
678          break;
679        case REQURIED:
680          t = jj_consume_token(REQURIED);
681          break;
682        case OPTIONAL:
683          t = jj_consume_token(OPTIONAL);
684          break;
685        case REPEATED:
686          t = jj_consume_token(REPEATED);
687          break;
688        case RETURNS:
689          t = jj_consume_token(RETURNS);
690          break;
691        case TO:
692          t = jj_consume_token(TO);
693          break;
694        case MAX:
695          t = jj_consume_token(MAX);
696          break;
697        default:
698          jj_la1[23] = jj_gen;
699          jj_consume_token(-1);
700          throw new ParseException();
701        }
702            {if (true) return t.image;}
703        throw new Error("Missing return statement in function");
704      }
705    
706      final public String PackageID() throws ParseException {
707        String t;
708        StringBuffer sb = new StringBuffer();
709        t = ID();
710                    sb.append(t);
711        label_8:
712        while (true) {
713          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
714          case PERIOD:
715            ;
716            break;
717          default:
718            jj_la1[24] = jj_gen;
719            break label_8;
720          }
721          jj_consume_token(PERIOD);
722          t = ID();
723                            sb.append(".");
724                            sb.append(t);
725        }
726                    {if (true) return sb.toString();}
727        throw new Error("Missing return statement in function");
728      }
729    
730      final public String StringLitteral() throws ParseException {
731        Token t;
732        t = jj_consume_token(STRING);
733                {if (true) return ParserSupport.decodeString(t);}
734        throw new Error("Missing return statement in function");
735      }
736    
737      final private boolean jj_2_1(int xla) {
738        jj_la = xla; jj_lastpos = jj_scanpos = token;
739        try { return !jj_3_1(); }
740        catch(LookaheadSuccess ls) { return true; }
741        finally { jj_save(0, xla); }
742      }
743    
744      final private boolean jj_2_2(int xla) {
745        jj_la = xla; jj_lastpos = jj_scanpos = token;
746        try { return !jj_3_2(); }
747        catch(LookaheadSuccess ls) { return true; }
748        finally { jj_save(1, xla); }
749      }
750    
751      final private boolean jj_3R_14() {
752        if (jj_scan_token(PERIOD)) return true;
753        if (jj_3R_10()) return true;
754        return false;
755      }
756    
757      final private boolean jj_3_2() {
758        if (jj_scan_token(OPTION)) return true;
759        if (jj_3R_13()) return true;
760        return false;
761      }
762    
763      final private boolean jj_3R_10() {
764        Token xsp;
765        xsp = jj_scanpos;
766        if (jj_scan_token(41)) {
767        jj_scanpos = xsp;
768        if (jj_scan_token(17)) {
769        jj_scanpos = xsp;
770        if (jj_scan_token(8)) {
771        jj_scanpos = xsp;
772        if (jj_scan_token(9)) {
773        jj_scanpos = xsp;
774        if (jj_scan_token(10)) {
775        jj_scanpos = xsp;
776        if (jj_scan_token(11)) {
777        jj_scanpos = xsp;
778        if (jj_scan_token(12)) {
779        jj_scanpos = xsp;
780        if (jj_scan_token(13)) {
781        jj_scanpos = xsp;
782        if (jj_scan_token(14)) {
783        jj_scanpos = xsp;
784        if (jj_scan_token(15)) {
785        jj_scanpos = xsp;
786        if (jj_scan_token(16)) {
787        jj_scanpos = xsp;
788        if (jj_scan_token(18)) {
789        jj_scanpos = xsp;
790        if (jj_scan_token(19)) {
791        jj_scanpos = xsp;
792        if (jj_scan_token(20)) {
793        jj_scanpos = xsp;
794        if (jj_scan_token(21)) {
795        jj_scanpos = xsp;
796        if (jj_scan_token(22)) {
797        jj_scanpos = xsp;
798        if (jj_scan_token(23)) return true;
799        }
800        }
801        }
802        }
803        }
804        }
805        }
806        }
807        }
808        }
809        }
810        }
811        }
812        }
813        }
814        }
815        return false;
816      }
817    
818      final private boolean jj_3R_11() {
819        if (jj_scan_token(INTEGER)) return true;
820        return false;
821      }
822    
823      final private boolean jj_3R_9() {
824        if (jj_3R_10()) return true;
825        Token xsp;
826        while (true) {
827          xsp = jj_scanpos;
828          if (jj_3R_14()) { jj_scanpos = xsp; break; }
829        }
830        return false;
831      }
832    
833      final private boolean jj_3R_12() {
834        if (jj_scan_token(LBRACKET)) return true;
835        return false;
836      }
837    
838      final private boolean jj_3_1() {
839        if (jj_3R_9()) return true;
840        if (jj_3R_10()) return true;
841        if (jj_scan_token(EQUALS)) return true;
842        if (jj_3R_11()) return true;
843        Token xsp;
844        xsp = jj_scanpos;
845        if (jj_3R_12()) jj_scanpos = xsp;
846        if (jj_scan_token(SEMICOLON)) return true;
847        return false;
848      }
849    
850      final private boolean jj_3R_13() {
851        if (jj_3R_10()) return true;
852        return false;
853      }
854    
855      public ProtoParserTokenManager token_source;
856      SimpleCharStream jj_input_stream;
857      public Token token, jj_nt;
858      private int jj_ntk;
859      private Token jj_scanpos, jj_lastpos;
860      private int jj_la;
861      public boolean lookingAhead = false;
862      private boolean jj_semLA;
863      private int jj_gen;
864      final private int[] jj_la1 = new int[25];
865      static private int[] jj_la1_0;
866      static private int[] jj_la1_1;
867      static {
868          jj_la1_0();
869          jj_la1_1();
870       }
871       private static void jj_la1_0() {
872          jj_la1_0 = new int[] {0x8000000,0x8000000,0x8000000,0x8000000,0x1b700,0x1b700,0x1df000,0x8000000,0x8000000,0x8000000,0x1df000,0x0,0x10000000,0x1c0000,0x8000000,0x20000,0x800,0x1c0000,0x800000,0xffff00,0xffff00,0x1c0000,0xffff00,0xffff00,0x0,};
873       }
874       private static void jj_la1_1() {
875          jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x200,0x200,0x0,0x344,0x200,0x1,};
876       }
877      final private JJCalls[] jj_2_rtns = new JJCalls[2];
878      private boolean jj_rescan = false;
879      private int jj_gc = 0;
880    
881      public ProtoParser(java.io.InputStream stream) {
882         this(stream, null);
883      }
884      public ProtoParser(java.io.InputStream stream, String encoding) {
885        try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
886        token_source = new ProtoParserTokenManager(jj_input_stream);
887        token = new Token();
888        jj_ntk = -1;
889        jj_gen = 0;
890        for (int i = 0; i < 25; i++) jj_la1[i] = -1;
891        for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
892      }
893    
894      public void ReInit(java.io.InputStream stream) {
895         ReInit(stream, null);
896      }
897      public void ReInit(java.io.InputStream stream, String encoding) {
898        try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
899        token_source.ReInit(jj_input_stream);
900        token = new Token();
901        jj_ntk = -1;
902        jj_gen = 0;
903        for (int i = 0; i < 25; i++) jj_la1[i] = -1;
904        for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
905      }
906    
907      public ProtoParser(java.io.Reader stream) {
908        jj_input_stream = new SimpleCharStream(stream, 1, 1);
909        token_source = new ProtoParserTokenManager(jj_input_stream);
910        token = new Token();
911        jj_ntk = -1;
912        jj_gen = 0;
913        for (int i = 0; i < 25; i++) jj_la1[i] = -1;
914        for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
915      }
916    
917      public void ReInit(java.io.Reader stream) {
918        jj_input_stream.ReInit(stream, 1, 1);
919        token_source.ReInit(jj_input_stream);
920        token = new Token();
921        jj_ntk = -1;
922        jj_gen = 0;
923        for (int i = 0; i < 25; i++) jj_la1[i] = -1;
924        for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
925      }
926    
927      public ProtoParser(ProtoParserTokenManager tm) {
928        token_source = tm;
929        token = new Token();
930        jj_ntk = -1;
931        jj_gen = 0;
932        for (int i = 0; i < 25; i++) jj_la1[i] = -1;
933        for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
934      }
935    
936      public void ReInit(ProtoParserTokenManager tm) {
937        token_source = tm;
938        token = new Token();
939        jj_ntk = -1;
940        jj_gen = 0;
941        for (int i = 0; i < 25; i++) jj_la1[i] = -1;
942        for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
943      }
944    
945      final private Token jj_consume_token(int kind) throws ParseException {
946        Token oldToken;
947        if ((oldToken = token).next != null) token = token.next;
948        else token = token.next = token_source.getNextToken();
949        jj_ntk = -1;
950        if (token.kind == kind) {
951          jj_gen++;
952          if (++jj_gc > 100) {
953            jj_gc = 0;
954            for (int i = 0; i < jj_2_rtns.length; i++) {
955              JJCalls c = jj_2_rtns[i];
956              while (c != null) {
957                if (c.gen < jj_gen) c.first = null;
958                c = c.next;
959              }
960            }
961          }
962          return token;
963        }
964        token = oldToken;
965        jj_kind = kind;
966        throw generateParseException();
967      }
968    
969      static private final class LookaheadSuccess extends java.lang.Error { }
970      final private LookaheadSuccess jj_ls = new LookaheadSuccess();
971      final private boolean jj_scan_token(int kind) {
972        if (jj_scanpos == jj_lastpos) {
973          jj_la--;
974          if (jj_scanpos.next == null) {
975            jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
976          } else {
977            jj_lastpos = jj_scanpos = jj_scanpos.next;
978          }
979        } else {
980          jj_scanpos = jj_scanpos.next;
981        }
982        if (jj_rescan) {
983          int i = 0; Token tok = token;
984          while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
985          if (tok != null) jj_add_error_token(kind, i);
986        }
987        if (jj_scanpos.kind != kind) return true;
988        if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
989        return false;
990      }
991    
992      final public Token getNextToken() {
993        if (token.next != null) token = token.next;
994        else token = token.next = token_source.getNextToken();
995        jj_ntk = -1;
996        jj_gen++;
997        return token;
998      }
999    
1000      final public Token getToken(int index) {
1001        Token t = lookingAhead ? jj_scanpos : token;
1002        for (int i = 0; i < index; i++) {
1003          if (t.next != null) t = t.next;
1004          else t = t.next = token_source.getNextToken();
1005        }
1006        return t;
1007      }
1008    
1009      final private int jj_ntk() {
1010        if ((jj_nt=token.next) == null)
1011          return (jj_ntk = (token.next=token_source.getNextToken()).kind);
1012        else
1013          return (jj_ntk = jj_nt.kind);
1014      }
1015    
1016      private java.util.Vector jj_expentries = new java.util.Vector();
1017      private int[] jj_expentry;
1018      private int jj_kind = -1;
1019      private int[] jj_lasttokens = new int[100];
1020      private int jj_endpos;
1021    
1022      private void jj_add_error_token(int kind, int pos) {
1023        if (pos >= 100) return;
1024        if (pos == jj_endpos + 1) {
1025          jj_lasttokens[jj_endpos++] = kind;
1026        } else if (jj_endpos != 0) {
1027          jj_expentry = new int[jj_endpos];
1028          for (int i = 0; i < jj_endpos; i++) {
1029            jj_expentry[i] = jj_lasttokens[i];
1030          }
1031          boolean exists = false;
1032          for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements();) {
1033            int[] oldentry = (int[])(e.nextElement());
1034            if (oldentry.length == jj_expentry.length) {
1035              exists = true;
1036              for (int i = 0; i < jj_expentry.length; i++) {
1037                if (oldentry[i] != jj_expentry[i]) {
1038                  exists = false;
1039                  break;
1040                }
1041              }
1042              if (exists) break;
1043            }
1044          }
1045          if (!exists) jj_expentries.addElement(jj_expentry);
1046          if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
1047        }
1048      }
1049    
1050      public ParseException generateParseException() {
1051        jj_expentries.removeAllElements();
1052        boolean[] la1tokens = new boolean[42];
1053        for (int i = 0; i < 42; i++) {
1054          la1tokens[i] = false;
1055        }
1056        if (jj_kind >= 0) {
1057          la1tokens[jj_kind] = true;
1058          jj_kind = -1;
1059        }
1060        for (int i = 0; i < 25; i++) {
1061          if (jj_la1[i] == jj_gen) {
1062            for (int j = 0; j < 32; j++) {
1063              if ((jj_la1_0[i] & (1<<j)) != 0) {
1064                la1tokens[j] = true;
1065              }
1066              if ((jj_la1_1[i] & (1<<j)) != 0) {
1067                la1tokens[32+j] = true;
1068              }
1069            }
1070          }
1071        }
1072        for (int i = 0; i < 42; i++) {
1073          if (la1tokens[i]) {
1074            jj_expentry = new int[1];
1075            jj_expentry[0] = i;
1076            jj_expentries.addElement(jj_expentry);
1077          }
1078        }
1079        jj_endpos = 0;
1080        jj_rescan_token();
1081        jj_add_error_token(0, 0);
1082        int[][] exptokseq = new int[jj_expentries.size()][];
1083        for (int i = 0; i < jj_expentries.size(); i++) {
1084          exptokseq[i] = (int[])jj_expentries.elementAt(i);
1085        }
1086        return new ParseException(token, exptokseq, tokenImage);
1087      }
1088    
1089      final public void enable_tracing() {
1090      }
1091    
1092      final public void disable_tracing() {
1093      }
1094    
1095      final private void jj_rescan_token() {
1096        jj_rescan = true;
1097        for (int i = 0; i < 2; i++) {
1098        try {
1099          JJCalls p = jj_2_rtns[i];
1100          do {
1101            if (p.gen > jj_gen) {
1102              jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
1103              switch (i) {
1104                case 0: jj_3_1(); break;
1105                case 1: jj_3_2(); break;
1106              }
1107            }
1108            p = p.next;
1109          } while (p != null);
1110          } catch(LookaheadSuccess ls) { }
1111        }
1112        jj_rescan = false;
1113      }
1114    
1115      final private void jj_save(int index, int xla) {
1116        JJCalls p = jj_2_rtns[index];
1117        while (p.gen > jj_gen) {
1118          if (p.next == null) { p = p.next = new JJCalls(); break; }
1119          p = p.next;
1120        }
1121        p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
1122      }
1123    
1124      static final class JJCalls {
1125        int gen;
1126        Token first;
1127        int arg;
1128        JJCalls next;
1129      }
1130    
1131    }