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 }