1 /* Generated By:JJTree&JavaCC: Do not edit this line. AddressListParser.java */ 2 /* 3 * Copyright 2004 the mime4j project 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.apache.james.mime4j.field.address.parser; 18 19 public class AddressListParser/*@bgen(jjtree)*/implements AddressListParserTreeConstants, AddressListParserConstants {/*@bgen(jjtree)*/ 20 protected JJTAddressListParserState jjtree = new JJTAddressListParserState();public static void main(String args[]) throws ParseException { 21 while (true) { 22 try { 23 AddressListParser parser = new AddressListParser(System.in); 24 parser.parseLine(); 25 ((SimpleNode)parser.jjtree.rootNode()).dump("> "); 26 } catch (Exception x) { 27 x.printStackTrace(); 28 return; 29 } 30 } 31 } 32 33 private static void log(String msg) { 34 System.out.print(msg); 35 } 36 37 public ASTaddress_list parse() throws ParseException { 38 try { 39 parseAll(); 40 return (ASTaddress_list)jjtree.rootNode(); 41 } catch (TokenMgrError tme) { 42 throw new ParseException(tme.getMessage()); 43 } 44 } 45 46 47 void jjtreeOpenNodeScope(Node n) { 48 ((SimpleNode)n).firstToken = getToken(1); 49 } 50 51 void jjtreeCloseNodeScope(Node n) { 52 ((SimpleNode)n).lastToken = getToken(0); 53 } 54 55 final public void parseLine() throws ParseException { 56 address_list(); 57 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 58 case 1: 59 jj_consume_token(1); 60 break; 61 default: 62 jj_la1[0] = jj_gen; 63 ; 64 } 65 jj_consume_token(2); 66 } 67 68 final public void parseAll() throws ParseException { 69 address_list(); 70 jj_consume_token(0); 71 } 72 73 final public void address_list() throws ParseException { 74 /*@bgen(jjtree) address_list */ 75 ASTaddress_list jjtn000 = new ASTaddress_list(JJTADDRESS_LIST); 76 boolean jjtc000 = true; 77 jjtree.openNodeScope(jjtn000); 78 jjtreeOpenNodeScope(jjtn000); 79 try { 80 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 81 case 6: 82 case DOTATOM: 83 case QUOTEDSTRING: 84 address(); 85 break; 86 default: 87 jj_la1[1] = jj_gen; 88 ; 89 } 90 label_1: 91 while (true) { 92 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 93 case 3: 94 ; 95 break; 96 default: 97 jj_la1[2] = jj_gen; 98 break label_1; 99 } 100 jj_consume_token(3); 101 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 102 case 6: 103 case DOTATOM: 104 case QUOTEDSTRING: 105 address(); 106 break; 107 default: 108 jj_la1[3] = jj_gen; 109 ; 110 } 111 } 112 } catch (Throwable jjte000) { 113 if (jjtc000) { 114 jjtree.clearNodeScope(jjtn000); 115 jjtc000 = false; 116 } else { 117 jjtree.popNode(); 118 } 119 if (jjte000 instanceof RuntimeException) { 120 {if (true) throw (RuntimeException)jjte000;} 121 } 122 if (jjte000 instanceof ParseException) { 123 {if (true) throw (ParseException)jjte000;} 124 } 125 {if (true) throw (Error)jjte000;} 126 } finally { 127 if (jjtc000) { 128 jjtree.closeNodeScope(jjtn000, true); 129 jjtreeCloseNodeScope(jjtn000); 130 } 131 } 132 } 133 134 final public void address() throws ParseException { 135 /*@bgen(jjtree) address */ 136 ASTaddress jjtn000 = new ASTaddress(JJTADDRESS); 137 boolean jjtc000 = true; 138 jjtree.openNodeScope(jjtn000); 139 jjtreeOpenNodeScope(jjtn000); 140 try { 141 if (jj_2_1(2147483647)) { 142 addr_spec(); 143 } else { 144 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 145 case 6: 146 angle_addr(); 147 break; 148 case DOTATOM: 149 case QUOTEDSTRING: 150 phrase(); 151 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 152 case 4: 153 group_body(); 154 break; 155 case 6: 156 angle_addr(); 157 break; 158 default: 159 jj_la1[4] = jj_gen; 160 jj_consume_token(-1); 161 throw new ParseException(); 162 } 163 break; 164 default: 165 jj_la1[5] = jj_gen; 166 jj_consume_token(-1); 167 throw new ParseException(); 168 } 169 } 170 } catch (Throwable jjte000) { 171 if (jjtc000) { 172 jjtree.clearNodeScope(jjtn000); 173 jjtc000 = false; 174 } else { 175 jjtree.popNode(); 176 } 177 if (jjte000 instanceof RuntimeException) { 178 {if (true) throw (RuntimeException)jjte000;} 179 } 180 if (jjte000 instanceof ParseException) { 181 {if (true) throw (ParseException)jjte000;} 182 } 183 {if (true) throw (Error)jjte000;} 184 } finally { 185 if (jjtc000) { 186 jjtree.closeNodeScope(jjtn000, true); 187 jjtreeCloseNodeScope(jjtn000); 188 } 189 } 190 } 191 192 final public void mailbox() throws ParseException { 193 /*@bgen(jjtree) mailbox */ 194 ASTmailbox jjtn000 = new ASTmailbox(JJTMAILBOX); 195 boolean jjtc000 = true; 196 jjtree.openNodeScope(jjtn000); 197 jjtreeOpenNodeScope(jjtn000); 198 try { 199 if (jj_2_2(2147483647)) { 200 addr_spec(); 201 } else { 202 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 203 case 6: 204 angle_addr(); 205 break; 206 case DOTATOM: 207 case QUOTEDSTRING: 208 name_addr(); 209 break; 210 default: 211 jj_la1[6] = jj_gen; 212 jj_consume_token(-1); 213 throw new ParseException(); 214 } 215 } 216 } catch (Throwable jjte000) { 217 if (jjtc000) { 218 jjtree.clearNodeScope(jjtn000); 219 jjtc000 = false; 220 } else { 221 jjtree.popNode(); 222 } 223 if (jjte000 instanceof RuntimeException) { 224 {if (true) throw (RuntimeException)jjte000;} 225 } 226 if (jjte000 instanceof ParseException) { 227 {if (true) throw (ParseException)jjte000;} 228 } 229 {if (true) throw (Error)jjte000;} 230 } finally { 231 if (jjtc000) { 232 jjtree.closeNodeScope(jjtn000, true); 233 jjtreeCloseNodeScope(jjtn000); 234 } 235 } 236 } 237 238 final public void name_addr() throws ParseException { 239 /*@bgen(jjtree) name_addr */ 240 ASTname_addr jjtn000 = new ASTname_addr(JJTNAME_ADDR); 241 boolean jjtc000 = true; 242 jjtree.openNodeScope(jjtn000); 243 jjtreeOpenNodeScope(jjtn000); 244 try { 245 phrase(); 246 angle_addr(); 247 } catch (Throwable jjte000) { 248 if (jjtc000) { 249 jjtree.clearNodeScope(jjtn000); 250 jjtc000 = false; 251 } else { 252 jjtree.popNode(); 253 } 254 if (jjte000 instanceof RuntimeException) { 255 {if (true) throw (RuntimeException)jjte000;} 256 } 257 if (jjte000 instanceof ParseException) { 258 {if (true) throw (ParseException)jjte000;} 259 } 260 {if (true) throw (Error)jjte000;} 261 } finally { 262 if (jjtc000) { 263 jjtree.closeNodeScope(jjtn000, true); 264 jjtreeCloseNodeScope(jjtn000); 265 } 266 } 267 } 268 269 final public void group_body() throws ParseException { 270 /*@bgen(jjtree) group_body */ 271 ASTgroup_body jjtn000 = new ASTgroup_body(JJTGROUP_BODY); 272 boolean jjtc000 = true; 273 jjtree.openNodeScope(jjtn000); 274 jjtreeOpenNodeScope(jjtn000); 275 try { 276 jj_consume_token(4); 277 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 278 case 6: 279 case DOTATOM: 280 case QUOTEDSTRING: 281 mailbox(); 282 break; 283 default: 284 jj_la1[7] = jj_gen; 285 ; 286 } 287 label_2: 288 while (true) { 289 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 290 case 3: 291 ; 292 break; 293 default: 294 jj_la1[8] = jj_gen; 295 break label_2; 296 } 297 jj_consume_token(3); 298 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 299 case 6: 300 case DOTATOM: 301 case QUOTEDSTRING: 302 mailbox(); 303 break; 304 default: 305 jj_la1[9] = jj_gen; 306 ; 307 } 308 } 309 jj_consume_token(5); 310 } catch (Throwable jjte000) { 311 if (jjtc000) { 312 jjtree.clearNodeScope(jjtn000); 313 jjtc000 = false; 314 } else { 315 jjtree.popNode(); 316 } 317 if (jjte000 instanceof RuntimeException) { 318 {if (true) throw (RuntimeException)jjte000;} 319 } 320 if (jjte000 instanceof ParseException) { 321 {if (true) throw (ParseException)jjte000;} 322 } 323 {if (true) throw (Error)jjte000;} 324 } finally { 325 if (jjtc000) { 326 jjtree.closeNodeScope(jjtn000, true); 327 jjtreeCloseNodeScope(jjtn000); 328 } 329 } 330 } 331 332 final public void angle_addr() throws ParseException { 333 /*@bgen(jjtree) angle_addr */ 334 ASTangle_addr jjtn000 = new ASTangle_addr(JJTANGLE_ADDR); 335 boolean jjtc000 = true; 336 jjtree.openNodeScope(jjtn000); 337 jjtreeOpenNodeScope(jjtn000); 338 try { 339 jj_consume_token(6); 340 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 341 case 8: 342 route(); 343 break; 344 default: 345 jj_la1[10] = jj_gen; 346 ; 347 } 348 addr_spec(); 349 jj_consume_token(7); 350 } catch (Throwable jjte000) { 351 if (jjtc000) { 352 jjtree.clearNodeScope(jjtn000); 353 jjtc000 = false; 354 } else { 355 jjtree.popNode(); 356 } 357 if (jjte000 instanceof RuntimeException) { 358 {if (true) throw (RuntimeException)jjte000;} 359 } 360 if (jjte000 instanceof ParseException) { 361 {if (true) throw (ParseException)jjte000;} 362 } 363 {if (true) throw (Error)jjte000;} 364 } finally { 365 if (jjtc000) { 366 jjtree.closeNodeScope(jjtn000, true); 367 jjtreeCloseNodeScope(jjtn000); 368 } 369 } 370 } 371 372 final public void route() throws ParseException { 373 /*@bgen(jjtree) route */ 374 ASTroute jjtn000 = new ASTroute(JJTROUTE); 375 boolean jjtc000 = true; 376 jjtree.openNodeScope(jjtn000); 377 jjtreeOpenNodeScope(jjtn000); 378 try { 379 jj_consume_token(8); 380 domain(); 381 label_3: 382 while (true) { 383 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 384 case 3: 385 case 8: 386 ; 387 break; 388 default: 389 jj_la1[11] = jj_gen; 390 break label_3; 391 } 392 label_4: 393 while (true) { 394 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 395 case 3: 396 ; 397 break; 398 default: 399 jj_la1[12] = jj_gen; 400 break label_4; 401 } 402 jj_consume_token(3); 403 } 404 jj_consume_token(8); 405 domain(); 406 } 407 jj_consume_token(4); 408 } catch (Throwable jjte000) { 409 if (jjtc000) { 410 jjtree.clearNodeScope(jjtn000); 411 jjtc000 = false; 412 } else { 413 jjtree.popNode(); 414 } 415 if (jjte000 instanceof RuntimeException) { 416 {if (true) throw (RuntimeException)jjte000;} 417 } 418 if (jjte000 instanceof ParseException) { 419 {if (true) throw (ParseException)jjte000;} 420 } 421 {if (true) throw (Error)jjte000;} 422 } finally { 423 if (jjtc000) { 424 jjtree.closeNodeScope(jjtn000, true); 425 jjtreeCloseNodeScope(jjtn000); 426 } 427 } 428 } 429 430 final public void phrase() throws ParseException { 431 /*@bgen(jjtree) phrase */ 432 ASTphrase jjtn000 = new ASTphrase(JJTPHRASE); 433 boolean jjtc000 = true; 434 jjtree.openNodeScope(jjtn000); 435 jjtreeOpenNodeScope(jjtn000); 436 try { 437 label_5: 438 while (true) { 439 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 440 case DOTATOM: 441 jj_consume_token(DOTATOM); 442 break; 443 case QUOTEDSTRING: 444 jj_consume_token(QUOTEDSTRING); 445 break; 446 default: 447 jj_la1[13] = jj_gen; 448 jj_consume_token(-1); 449 throw new ParseException(); 450 } 451 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 452 case DOTATOM: 453 case QUOTEDSTRING: 454 ; 455 break; 456 default: 457 jj_la1[14] = jj_gen; 458 break label_5; 459 } 460 } 461 } finally { 462 if (jjtc000) { 463 jjtree.closeNodeScope(jjtn000, true); 464 jjtreeCloseNodeScope(jjtn000); 465 } 466 } 467 } 468 469 final public void addr_spec() throws ParseException { 470 /*@bgen(jjtree) addr_spec */ 471 ASTaddr_spec jjtn000 = new ASTaddr_spec(JJTADDR_SPEC); 472 boolean jjtc000 = true; 473 jjtree.openNodeScope(jjtn000); 474 jjtreeOpenNodeScope(jjtn000); 475 try { 476 local_part(); 477 jj_consume_token(8); 478 domain(); 479 } catch (Throwable jjte000) { 480 if (jjtc000) { 481 jjtree.clearNodeScope(jjtn000); 482 jjtc000 = false; 483 } else { 484 jjtree.popNode(); 485 } 486 if (jjte000 instanceof RuntimeException) { 487 {if (true) throw (RuntimeException)jjte000;} 488 } 489 if (jjte000 instanceof ParseException) { 490 {if (true) throw (ParseException)jjte000;} 491 } 492 {if (true) throw (Error)jjte000;} 493 } finally { 494 if (jjtc000) { 495 jjtree.closeNodeScope(jjtn000, true); 496 jjtreeCloseNodeScope(jjtn000); 497 } 498 } 499 } 500 501 final public void local_part() throws ParseException { 502 /*@bgen(jjtree) local_part */ 503 ASTlocal_part jjtn000 = new ASTlocal_part(JJTLOCAL_PART); 504 boolean jjtc000 = true; 505 jjtree.openNodeScope(jjtn000); 506 jjtreeOpenNodeScope(jjtn000);Token t; 507 try { 508 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 509 case DOTATOM: 510 t = jj_consume_token(DOTATOM); 511 break; 512 case QUOTEDSTRING: 513 t = jj_consume_token(QUOTEDSTRING); 514 break; 515 default: 516 jj_la1[15] = jj_gen; 517 jj_consume_token(-1); 518 throw new ParseException(); 519 } 520 label_6: 521 while (true) { 522 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 523 case 9: 524 case DOTATOM: 525 case QUOTEDSTRING: 526 ; 527 break; 528 default: 529 jj_la1[16] = jj_gen; 530 break label_6; 531 } 532 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 533 case 9: 534 t = jj_consume_token(9); 535 break; 536 default: 537 jj_la1[17] = jj_gen; 538 ; 539 } 540 if (t.image.charAt(t.image.length() - 1) != '.' || t.kind == AddressListParserConstants.QUOTEDSTRING) 541 {if (true) throw new ParseException("Words in local part must be separated by '.'");} 542 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 543 case DOTATOM: 544 t = jj_consume_token(DOTATOM); 545 break; 546 case QUOTEDSTRING: 547 t = jj_consume_token(QUOTEDSTRING); 548 break; 549 default: 550 jj_la1[18] = jj_gen; 551 jj_consume_token(-1); 552 throw new ParseException(); 553 } 554 } 555 } finally { 556 if (jjtc000) { 557 jjtree.closeNodeScope(jjtn000, true); 558 jjtreeCloseNodeScope(jjtn000); 559 } 560 } 561 } 562 563 final public void domain() throws ParseException { 564 /*@bgen(jjtree) domain */ 565 ASTdomain jjtn000 = new ASTdomain(JJTDOMAIN); 566 boolean jjtc000 = true; 567 jjtree.openNodeScope(jjtn000); 568 jjtreeOpenNodeScope(jjtn000);Token t; 569 try { 570 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 571 case DOTATOM: 572 t = jj_consume_token(DOTATOM); 573 label_7: 574 while (true) { 575 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 576 case 9: 577 case DOTATOM: 578 ; 579 break; 580 default: 581 jj_la1[19] = jj_gen; 582 break label_7; 583 } 584 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 585 case 9: 586 t = jj_consume_token(9); 587 break; 588 default: 589 jj_la1[20] = jj_gen; 590 ; 591 } 592 if (t.image.charAt(t.image.length() - 1) != '.') 593 {if (true) throw new ParseException("Atoms in domain names must be separated by '.'");} 594 t = jj_consume_token(DOTATOM); 595 } 596 break; 597 case DOMAINLITERAL: 598 jj_consume_token(DOMAINLITERAL); 599 break; 600 default: 601 jj_la1[21] = jj_gen; 602 jj_consume_token(-1); 603 throw new ParseException(); 604 } 605 } finally { 606 if (jjtc000) { 607 jjtree.closeNodeScope(jjtn000, true); 608 jjtreeCloseNodeScope(jjtn000); 609 } 610 } 611 } 612 613 final private boolean jj_2_1(int xla) { 614 jj_la = xla; jj_lastpos = jj_scanpos = token; 615 try { return !jj_3_1(); } 616 catch(LookaheadSuccess ls) { return true; } 617 finally { jj_save(0, xla); } 618 } 619 620 final private boolean jj_2_2(int xla) { 621 jj_la = xla; jj_lastpos = jj_scanpos = token; 622 try { return !jj_3_2(); } 623 catch(LookaheadSuccess ls) { return true; } 624 finally { jj_save(1, xla); } 625 } 626 627 final private boolean jj_3R_11() { 628 Token xsp; 629 xsp = jj_scanpos; 630 if (jj_scan_token(9)) jj_scanpos = xsp; 631 xsp = jj_scanpos; 632 if (jj_scan_token(14)) { 633 jj_scanpos = xsp; 634 if (jj_scan_token(31)) return true; 635 } 636 return false; 637 } 638 639 final private boolean jj_3R_13() { 640 Token xsp; 641 xsp = jj_scanpos; 642 if (jj_scan_token(9)) jj_scanpos = xsp; 643 if (jj_scan_token(DOTATOM)) return true; 644 return false; 645 } 646 647 final private boolean jj_3R_8() { 648 if (jj_3R_9()) return true; 649 if (jj_scan_token(8)) return true; 650 if (jj_3R_10()) return true; 651 return false; 652 } 653 654 final private boolean jj_3_1() { 655 if (jj_3R_8()) return true; 656 return false; 657 } 658 659 final private boolean jj_3R_12() { 660 if (jj_scan_token(DOTATOM)) return true; 661 Token xsp; 662 while (true) { 663 xsp = jj_scanpos; 664 if (jj_3R_13()) { jj_scanpos = xsp; break; } 665 } 666 return false; 667 } 668 669 final private boolean jj_3R_10() { 670 Token xsp; 671 xsp = jj_scanpos; 672 if (jj_3R_12()) { 673 jj_scanpos = xsp; 674 if (jj_scan_token(18)) return true; 675 } 676 return false; 677 } 678 679 final private boolean jj_3_2() { 680 if (jj_3R_8()) return true; 681 return false; 682 } 683 684 final private boolean jj_3R_9() { 685 Token xsp; 686 xsp = jj_scanpos; 687 if (jj_scan_token(14)) { 688 jj_scanpos = xsp; 689 if (jj_scan_token(31)) return true; 690 } 691 while (true) { 692 xsp = jj_scanpos; 693 if (jj_3R_11()) { jj_scanpos = xsp; break; } 694 } 695 return false; 696 } 697 698 public AddressListParserTokenManager token_source; 699 SimpleCharStream jj_input_stream; 700 public Token token, jj_nt; 701 private int jj_ntk; 702 private Token jj_scanpos, jj_lastpos; 703 private int jj_la; 704 public boolean lookingAhead = false; 705 private boolean jj_semLA; 706 private int jj_gen; 707 final private int[] jj_la1 = new int[22]; 708 static private int[] jj_la1_0; 709 static private int[] jj_la1_1; 710 static { 711 jj_la1_0(); 712 jj_la1_1(); 713 } 714 private static void jj_la1_0() { 715 jj_la1_0 = new int[] {0x2,0x80004040,0x8,0x80004040,0x50,0x80004040,0x80004040,0x80004040,0x8,0x80004040,0x100,0x108,0x8,0x80004000,0x80004000,0x80004000,0x80004200,0x200,0x80004000,0x4200,0x200,0x44000,}; 716 } 717 private static void jj_la1_1() { 718 jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,}; 719 } 720 final private JJCalls[] jj_2_rtns = new JJCalls[2]; 721 private boolean jj_rescan = false; 722 private int jj_gc = 0; 723 724 public AddressListParser(java.io.InputStream stream) { 725 this(stream, null); 726 } 727 public AddressListParser(java.io.InputStream stream, String encoding) { 728 try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } 729 token_source = new AddressListParserTokenManager(jj_input_stream); 730 token = new Token(); 731 jj_ntk = -1; 732 jj_gen = 0; 733 for (int i = 0; i < 22; i++) jj_la1[i] = -1; 734 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 735 } 736 737 public void ReInit(java.io.InputStream stream) { 738 ReInit(stream, null); 739 } 740 public void ReInit(java.io.InputStream stream, String encoding) { 741 try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } 742 token_source.ReInit(jj_input_stream); 743 token = new Token(); 744 jj_ntk = -1; 745 jjtree.reset(); 746 jj_gen = 0; 747 for (int i = 0; i < 22; i++) jj_la1[i] = -1; 748 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 749 } 750 751 public AddressListParser(java.io.Reader stream) { 752 jj_input_stream = new SimpleCharStream(stream, 1, 1); 753 token_source = new AddressListParserTokenManager(jj_input_stream); 754 token = new Token(); 755 jj_ntk = -1; 756 jj_gen = 0; 757 for (int i = 0; i < 22; i++) jj_la1[i] = -1; 758 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 759 } 760 761 public void ReInit(java.io.Reader stream) { 762 jj_input_stream.ReInit(stream, 1, 1); 763 token_source.ReInit(jj_input_stream); 764 token = new Token(); 765 jj_ntk = -1; 766 jjtree.reset(); 767 jj_gen = 0; 768 for (int i = 0; i < 22; i++) jj_la1[i] = -1; 769 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 770 } 771 772 public AddressListParser(AddressListParserTokenManager tm) { 773 token_source = tm; 774 token = new Token(); 775 jj_ntk = -1; 776 jj_gen = 0; 777 for (int i = 0; i < 22; i++) jj_la1[i] = -1; 778 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 779 } 780 781 public void ReInit(AddressListParserTokenManager tm) { 782 token_source = tm; 783 token = new Token(); 784 jj_ntk = -1; 785 jjtree.reset(); 786 jj_gen = 0; 787 for (int i = 0; i < 22; i++) jj_la1[i] = -1; 788 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 789 } 790 791 final private Token jj_consume_token(int kind) throws ParseException { 792 Token oldToken; 793 if ((oldToken = token).next != null) token = token.next; 794 else token = token.next = token_source.getNextToken(); 795 jj_ntk = -1; 796 if (token.kind == kind) { 797 jj_gen++; 798 if (++jj_gc > 100) { 799 jj_gc = 0; 800 for (int i = 0; i < jj_2_rtns.length; i++) { 801 JJCalls c = jj_2_rtns[i]; 802 while (c != null) { 803 if (c.gen < jj_gen) c.first = null; 804 c = c.next; 805 } 806 } 807 } 808 return token; 809 } 810 token = oldToken; 811 jj_kind = kind; 812 throw generateParseException(); 813 } 814 815 static private final class LookaheadSuccess extends java.lang.Error { } 816 final private LookaheadSuccess jj_ls = new LookaheadSuccess(); 817 final private boolean jj_scan_token(int kind) { 818 if (jj_scanpos == jj_lastpos) { 819 jj_la--; 820 if (jj_scanpos.next == null) { 821 jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken(); 822 } else { 823 jj_lastpos = jj_scanpos = jj_scanpos.next; 824 } 825 } else { 826 jj_scanpos = jj_scanpos.next; 827 } 828 if (jj_rescan) { 829 int i = 0; Token tok = token; 830 while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; } 831 if (tok != null) jj_add_error_token(kind, i); 832 } 833 if (jj_scanpos.kind != kind) return true; 834 if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls; 835 return false; 836 } 837 838 final public Token getNextToken() { 839 if (token.next != null) token = token.next; 840 else token = token.next = token_source.getNextToken(); 841 jj_ntk = -1; 842 jj_gen++; 843 return token; 844 } 845 846 final public Token getToken(int index) { 847 Token t = lookingAhead ? jj_scanpos : token; 848 for (int i = 0; i < index; i++) { 849 if (t.next != null) t = t.next; 850 else t = t.next = token_source.getNextToken(); 851 } 852 return t; 853 } 854 855 final private int jj_ntk() { 856 if ((jj_nt=token.next) == null) 857 return (jj_ntk = (token.next=token_source.getNextToken()).kind); 858 else 859 return (jj_ntk = jj_nt.kind); 860 } 861 862 private java.util.Vector<int[]> jj_expentries = new java.util.Vector<int[]>(); 863 private int[] jj_expentry; 864 private int jj_kind = -1; 865 private int[] jj_lasttokens = new int[100]; 866 private int jj_endpos; 867 868 private void jj_add_error_token(int kind, int pos) { 869 if (pos >= 100) return; 870 if (pos == jj_endpos + 1) { 871 jj_lasttokens[jj_endpos++] = kind; 872 } else if (jj_endpos != 0) { 873 jj_expentry = new int[jj_endpos]; 874 for (int i = 0; i < jj_endpos; i++) { 875 jj_expentry[i] = jj_lasttokens[i]; 876 } 877 boolean exists = false; 878 for (java.util.Enumeration<int[]> e = jj_expentries.elements(); e.hasMoreElements();) { 879 int[] oldentry = e.nextElement(); 880 if (oldentry.length == jj_expentry.length) { 881 exists = true; 882 for (int i = 0; i < jj_expentry.length; i++) { 883 if (oldentry[i] != jj_expentry[i]) { 884 exists = false; 885 break; 886 } 887 } 888 if (exists) break; 889 } 890 } 891 if (!exists) jj_expentries.addElement(jj_expentry); 892 if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind; 893 } 894 } 895 896 public ParseException generateParseException() { 897 jj_expentries.removeAllElements(); 898 boolean[] la1tokens = new boolean[34]; 899 for (int i = 0; i < 34; i++) { 900 la1tokens[i] = false; 901 } 902 if (jj_kind >= 0) { 903 la1tokens[jj_kind] = true; 904 jj_kind = -1; 905 } 906 for (int i = 0; i < 22; i++) { 907 if (jj_la1[i] == jj_gen) { 908 for (int j = 0; j < 32; j++) { 909 if ((jj_la1_0[i] & (1<<j)) != 0) { 910 la1tokens[j] = true; 911 } 912 if ((jj_la1_1[i] & (1<<j)) != 0) { 913 la1tokens[32+j] = true; 914 } 915 } 916 } 917 } 918 for (int i = 0; i < 34; i++) { 919 if (la1tokens[i]) { 920 jj_expentry = new int[1]; 921 jj_expentry[0] = i; 922 jj_expentries.addElement(jj_expentry); 923 } 924 } 925 jj_endpos = 0; 926 jj_rescan_token(); 927 jj_add_error_token(0, 0); 928 int[][] exptokseq = new int[jj_expentries.size()][]; 929 for (int i = 0; i < jj_expentries.size(); i++) { 930 exptokseq[i] = jj_expentries.elementAt(i); 931 } 932 return new ParseException(token, exptokseq, tokenImage); 933 } 934 935 final public void enable_tracing() { 936 } 937 938 final public void disable_tracing() { 939 } 940 941 final private void jj_rescan_token() { 942 jj_rescan = true; 943 for (int i = 0; i < 2; i++) { 944 try { 945 JJCalls p = jj_2_rtns[i]; 946 do { 947 if (p.gen > jj_gen) { 948 jj_la = p.arg; jj_lastpos = jj_scanpos = p.first; 949 switch (i) { 950 case 0: jj_3_1(); break; 951 case 1: jj_3_2(); break; 952 } 953 } 954 p = p.next; 955 } while (p != null); 956 } catch(LookaheadSuccess ls) { } 957 } 958 jj_rescan = false; 959 } 960 961 final private void jj_save(int index, int xla) { 962 JJCalls p = jj_2_rtns[index]; 963 while (p.gen > jj_gen) { 964 if (p.next == null) { p = p.next = new JJCalls(); break; } 965 p = p.next; 966 } 967 p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla; 968 } 969 970 static final class JJCalls { 971 int gen; 972 Token first; 973 int arg; 974 JJCalls next; 975 } 976 977 } 978