1 2 package com.jsptags.navigation.pager.parser; 3 4 import java.util.Hashtable ; 5 import java.io.StringReader ; 6 7 public class TagExportParser implements TagExportParserConstants { 8 9 private static Hashtable pagerTagExportCache = new Hashtable (); 10 private static Hashtable indexTagExportCache = new Hashtable (); 11 private static Hashtable pageTagExportCache = new Hashtable (); 12 13 public static PagerTagExport parsePagerTagExport(String expression) 14 throws ParseException 15 { 16 synchronized (pagerTagExportCache) { 17 PagerTagExport pagerTagExport = 18 (PagerTagExport) pagerTagExportCache.get(expression); 19 if (pagerTagExport == null) { 20 StringReader reader = new StringReader (expression); 21 TagExportParser parser = new TagExportParser(reader); 22 pagerTagExport = parser.parsePagerTagExport(); 23 pagerTagExportCache.put(expression, pagerTagExport); 24 } 25 return pagerTagExport; 26 } 27 } 28 29 public static IndexTagExport parseIndexTagExport(String expression) 30 throws ParseException 31 { 32 synchronized (indexTagExportCache) { 33 IndexTagExport indexTagExport = 34 (IndexTagExport) indexTagExportCache.get(expression); 35 if (indexTagExport == null) { 36 StringReader reader = new StringReader (expression); 37 TagExportParser parser = new TagExportParser(reader); 38 indexTagExport = parser.parseIndexTagExport(); 39 indexTagExportCache.put(expression, indexTagExport); 40 } 41 return indexTagExport; 42 } 43 } 44 45 public static PageTagExport parsePageTagExport(String expression) 46 throws ParseException 47 { 48 synchronized (pageTagExportCache) { 49 PageTagExport pageTagExport = 50 (PageTagExport) pageTagExportCache.get(expression); 51 if (pageTagExport == null) { 52 StringReader reader = new StringReader (expression); 53 TagExportParser parser = new TagExportParser(reader); 54 pageTagExport = parser.parsePageTagExport(); 55 pageTagExportCache.put(expression, pageTagExport); 56 } 57 return pageTagExport; 58 } 59 } 60 61 final public PagerTagExport parsePagerTagExport() throws ParseException { 62 PagerTagExport pagerTagExport = new PagerTagExport(); 63 token_source.SwitchTo(PAGER_STATE); 64 pagerExportDeclaration(pagerTagExport); 65 jj_consume_token(0); 66 {if (true) return pagerTagExport;} 67 throw new Error ("Missing return statement in function"); 68 } 69 70 final public void pagerExportDeclaration(PagerTagExport pagerTagExport) throws ParseException { 71 label_1: 72 while (true) { 73 pagerExportList(pagerTagExport); 74 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 75 case PAGER_NUMBER: 76 case PAGER_OFFSET: 77 case PAGER_PAGE: 78 case PAGER_PAGENUMBER: 79 case PAGER_PAGEOFFSET: 80 case IDENTIFIER: 81 ; 82 break; 83 default: 84 jj_la1[0] = jj_gen; 85 break label_1; 86 } 87 } 88 } 89 90 final public void pagerExportList(PagerTagExport pagerTagExport) throws ParseException { 91 pagerExport(pagerTagExport); 92 label_2: 93 while (true) { 94 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 95 case COMMA: 96 ; 97 break; 98 default: 99 jj_la1[1] = jj_gen; 100 break label_2; 101 } 102 jj_consume_token(COMMA); 103 pagerExport(pagerTagExport); 104 } 105 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 106 case SEMICOLON: 107 jj_consume_token(SEMICOLON); 108 break; 109 default: 110 jj_la1[2] = jj_gen; 111 ; 112 } 113 } 114 115 final public void pagerExport(PagerTagExport pagerTagExport) throws ParseException { 116 Token t = null; 117 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 118 case PAGER_OFFSET: 119 case PAGER_PAGEOFFSET: 120 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 121 case PAGER_OFFSET: 122 t = jj_consume_token(PAGER_OFFSET); 123 break; 124 case PAGER_PAGEOFFSET: 125 t = jj_consume_token(PAGER_PAGEOFFSET); 126 break; 127 default: 128 jj_la1[3] = jj_gen; 129 jj_consume_token(-1); 130 throw new ParseException(); 131 } 132 pagerTagExport.setPageOffset(t.image); 133 break; 134 case PAGER_NUMBER: 135 case PAGER_PAGE: 136 case PAGER_PAGENUMBER: 137 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 138 case PAGER_PAGE: 139 t = jj_consume_token(PAGER_PAGE); 140 break; 141 case PAGER_NUMBER: 142 t = jj_consume_token(PAGER_NUMBER); 143 break; 144 case PAGER_PAGENUMBER: 145 t = jj_consume_token(PAGER_PAGENUMBER); 146 break; 147 default: 148 jj_la1[4] = jj_gen; 149 jj_consume_token(-1); 150 throw new ParseException(); 151 } 152 pagerTagExport.setPageNumber(t.image); 153 break; 154 case IDENTIFIER: 155 t = jj_consume_token(IDENTIFIER); 156 jj_consume_token(EQUALS); 157 pagerVar(pagerTagExport, t); 158 break; 159 default: 160 jj_la1[5] = jj_gen; 161 jj_consume_token(-1); 162 throw new ParseException(); 163 } 164 } 165 166 final public void pagerVar(PagerTagExport pagerTagExport, Token id) throws ParseException { 167 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 168 case PAGER_OFFSET: 169 case PAGER_PAGEOFFSET: 170 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 171 case PAGER_OFFSET: 172 jj_consume_token(PAGER_OFFSET); 173 break; 174 case PAGER_PAGEOFFSET: 175 jj_consume_token(PAGER_PAGEOFFSET); 176 break; 177 default: 178 jj_la1[6] = jj_gen; 179 jj_consume_token(-1); 180 throw new ParseException(); 181 } 182 pagerTagExport.setPageOffset(id.image); 183 break; 184 case PAGER_NUMBER: 185 case PAGER_PAGE: 186 case PAGER_PAGENUMBER: 187 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 188 case PAGER_PAGE: 189 jj_consume_token(PAGER_PAGE); 190 break; 191 case PAGER_NUMBER: 192 jj_consume_token(PAGER_NUMBER); 193 break; 194 case PAGER_PAGENUMBER: 195 jj_consume_token(PAGER_PAGENUMBER); 196 break; 197 default: 198 jj_la1[7] = jj_gen; 199 jj_consume_token(-1); 200 throw new ParseException(); 201 } 202 pagerTagExport.setPageNumber(id.image); 203 break; 204 default: 205 jj_la1[8] = jj_gen; 206 jj_consume_token(-1); 207 throw new ParseException(); 208 } 209 } 210 211 final public IndexTagExport parseIndexTagExport() throws ParseException { 212 IndexTagExport indexTagExport = new IndexTagExport(); 213 token_source.SwitchTo(INDEX_STATE); 214 indexExportDeclaration(indexTagExport); 215 jj_consume_token(0); 216 {if (true) return indexTagExport;} 217 throw new Error ("Missing return statement in function"); 218 } 219 220 final public void indexExportDeclaration(IndexTagExport indexTagExport) throws ParseException { 221 label_3: 222 while (true) { 223 indexExportList(indexTagExport); 224 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 225 case INDEX_ITEMCOUNT: 226 case INDEX_ITEMS: 227 case INDEX_PAGECOUNT: 228 case INDEX_PAGES: 229 case IDENTIFIER: 230 ; 231 break; 232 default: 233 jj_la1[9] = jj_gen; 234 break label_3; 235 } 236 } 237 } 238 239 final public void indexExportList(IndexTagExport indexTagExport) throws ParseException { 240 indexExport(indexTagExport); 241 label_4: 242 while (true) { 243 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 244 case COMMA: 245 ; 246 break; 247 default: 248 jj_la1[10] = jj_gen; 249 break label_4; 250 } 251 jj_consume_token(COMMA); 252 indexExport(indexTagExport); 253 } 254 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 255 case SEMICOLON: 256 jj_consume_token(SEMICOLON); 257 break; 258 default: 259 jj_la1[11] = jj_gen; 260 ; 261 } 262 } 263 264 final public void indexExport(IndexTagExport indexTagExport) throws ParseException { 265 Token t = null; 266 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 267 case INDEX_ITEMCOUNT: 268 case INDEX_ITEMS: 269 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 270 case INDEX_ITEMS: 271 t = jj_consume_token(INDEX_ITEMS); 272 break; 273 case INDEX_ITEMCOUNT: 274 t = jj_consume_token(INDEX_ITEMCOUNT); 275 break; 276 default: 277 jj_la1[12] = jj_gen; 278 jj_consume_token(-1); 279 throw new ParseException(); 280 } 281 indexTagExport.setItemCount(t.image); 282 break; 283 case INDEX_PAGECOUNT: 284 case INDEX_PAGES: 285 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 286 case INDEX_PAGES: 287 t = jj_consume_token(INDEX_PAGES); 288 break; 289 case INDEX_PAGECOUNT: 290 t = jj_consume_token(INDEX_PAGECOUNT); 291 break; 292 default: 293 jj_la1[13] = jj_gen; 294 jj_consume_token(-1); 295 throw new ParseException(); 296 } 297 indexTagExport.setPageCount(t.image); 298 break; 299 case IDENTIFIER: 300 t = jj_consume_token(IDENTIFIER); 301 jj_consume_token(EQUALS); 302 indexVar(indexTagExport, t); 303 break; 304 default: 305 jj_la1[14] = jj_gen; 306 jj_consume_token(-1); 307 throw new ParseException(); 308 } 309 } 310 311 final public void indexVar(IndexTagExport indexTagExport, Token id) throws ParseException { 312 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 313 case INDEX_ITEMCOUNT: 314 case INDEX_ITEMS: 315 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 316 case INDEX_ITEMS: 317 jj_consume_token(INDEX_ITEMS); 318 break; 319 case INDEX_ITEMCOUNT: 320 jj_consume_token(INDEX_ITEMCOUNT); 321 break; 322 default: 323 jj_la1[15] = jj_gen; 324 jj_consume_token(-1); 325 throw new ParseException(); 326 } 327 indexTagExport.setItemCount(id.image); 328 break; 329 case INDEX_PAGECOUNT: 330 case INDEX_PAGES: 331 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 332 case INDEX_PAGES: 333 jj_consume_token(INDEX_PAGES); 334 break; 335 case INDEX_PAGECOUNT: 336 jj_consume_token(INDEX_PAGECOUNT); 337 break; 338 default: 339 jj_la1[16] = jj_gen; 340 jj_consume_token(-1); 341 throw new ParseException(); 342 } 343 indexTagExport.setPageCount(id.image); 344 break; 345 default: 346 jj_la1[17] = jj_gen; 347 jj_consume_token(-1); 348 throw new ParseException(); 349 } 350 } 351 352 final public PageTagExport parsePageTagExport() throws ParseException { 353 PageTagExport pageTagExport = new PageTagExport(); 354 token_source.SwitchTo(PAGE_STATE); 355 pageExportDeclaration(pageTagExport); 356 jj_consume_token(0); 357 {if (true) return pageTagExport;} 358 throw new Error ("Missing return statement in function"); 359 } 360 361 final public void pageExportDeclaration(PageTagExport pageTagExport) throws ParseException { 362 label_5: 363 while (true) { 364 pageExportList(pageTagExport); 365 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 366 case PAGE_FIRST: 367 case PAGE_FIRSTITEM: 368 case PAGE_LAST: 369 case PAGE_LASTITEM: 370 case PAGE_NUMBER: 371 case PAGE_PAGE: 372 case PAGE_PAGENUMBER: 373 case PAGE_PAGEURL: 374 case PAGE_URL: 375 case IDENTIFIER: 376 ; 377 break; 378 default: 379 jj_la1[18] = jj_gen; 380 break label_5; 381 } 382 } 383 } 384 385 final public void pageExportList(PageTagExport pageTagExport) throws ParseException { 386 pageExport(pageTagExport); 387 label_6: 388 while (true) { 389 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 390 case COMMA: 391 ; 392 break; 393 default: 394 jj_la1[19] = jj_gen; 395 break label_6; 396 } 397 jj_consume_token(COMMA); 398 pageExport(pageTagExport); 399 } 400 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 401 case SEMICOLON: 402 jj_consume_token(SEMICOLON); 403 break; 404 default: 405 jj_la1[20] = jj_gen; 406 ; 407 } 408 } 409 410 final public void pageExport(PageTagExport pageTagExport) throws ParseException { 411 Token t = null; 412 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 413 case PAGE_PAGEURL: 414 case PAGE_URL: 415 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 416 case PAGE_URL: 417 t = jj_consume_token(PAGE_URL); 418 break; 419 case PAGE_PAGEURL: 420 t = jj_consume_token(PAGE_PAGEURL); 421 break; 422 default: 423 jj_la1[21] = jj_gen; 424 jj_consume_token(-1); 425 throw new ParseException(); 426 } 427 pageTagExport.setPageUrl(t.image); 428 break; 429 case PAGE_NUMBER: 430 case PAGE_PAGE: 431 case PAGE_PAGENUMBER: 432 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 433 case PAGE_PAGE: 434 t = jj_consume_token(PAGE_PAGE); 435 break; 436 case PAGE_NUMBER: 437 t = jj_consume_token(PAGE_NUMBER); 438 break; 439 case PAGE_PAGENUMBER: 440 t = jj_consume_token(PAGE_PAGENUMBER); 441 break; 442 default: 443 jj_la1[22] = jj_gen; 444 jj_consume_token(-1); 445 throw new ParseException(); 446 } 447 pageTagExport.setPageNumber(t.image); 448 break; 449 case PAGE_FIRST: 450 case PAGE_FIRSTITEM: 451 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 452 case PAGE_FIRST: 453 t = jj_consume_token(PAGE_FIRST); 454 break; 455 case PAGE_FIRSTITEM: 456 t = jj_consume_token(PAGE_FIRSTITEM); 457 break; 458 default: 459 jj_la1[23] = jj_gen; 460 jj_consume_token(-1); 461 throw new ParseException(); 462 } 463 pageTagExport.setFirstItem(t.image); 464 break; 465 case PAGE_LAST: 466 case PAGE_LASTITEM: 467 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 468 case PAGE_LAST: 469 t = jj_consume_token(PAGE_LAST); 470 break; 471 case PAGE_LASTITEM: 472 t = jj_consume_token(PAGE_LASTITEM); 473 break; 474 default: 475 jj_la1[24] = jj_gen; 476 jj_consume_token(-1); 477 throw new ParseException(); 478 } 479 pageTagExport.setLastItem(t.image); 480 break; 481 case IDENTIFIER: 482 t = jj_consume_token(IDENTIFIER); 483 jj_consume_token(EQUALS); 484 pageVar(pageTagExport, t); 485 break; 486 default: 487 jj_la1[25] = jj_gen; 488 jj_consume_token(-1); 489 throw new ParseException(); 490 } 491 } 492 493 final public void pageVar(PageTagExport pageTagExport, Token id) throws ParseException { 494 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 495 case PAGE_PAGEURL: 496 case PAGE_URL: 497 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 498 case PAGE_URL: 499 jj_consume_token(PAGE_URL); 500 break; 501 case PAGE_PAGEURL: 502 jj_consume_token(PAGE_PAGEURL); 503 break; 504 default: 505 jj_la1[26] = jj_gen; 506 jj_consume_token(-1); 507 throw new ParseException(); 508 } 509 pageTagExport.setPageUrl(id.image); 510 break; 511 case PAGE_NUMBER: 512 case PAGE_PAGE: 513 case PAGE_PAGENUMBER: 514 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 515 case PAGE_PAGE: 516 jj_consume_token(PAGE_PAGE); 517 break; 518 case PAGE_NUMBER: 519 jj_consume_token(PAGE_NUMBER); 520 break; 521 case PAGE_PAGENUMBER: 522 jj_consume_token(PAGE_PAGENUMBER); 523 break; 524 default: 525 jj_la1[27] = jj_gen; 526 jj_consume_token(-1); 527 throw new ParseException(); 528 } 529 pageTagExport.setPageNumber(id.image); 530 break; 531 case PAGE_FIRST: 532 case PAGE_FIRSTITEM: 533 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 534 case PAGE_FIRST: 535 jj_consume_token(PAGE_FIRST); 536 break; 537 case PAGE_FIRSTITEM: 538 jj_consume_token(PAGE_FIRSTITEM); 539 break; 540 default: 541 jj_la1[28] = jj_gen; 542 jj_consume_token(-1); 543 throw new ParseException(); 544 } 545 pageTagExport.setFirstItem(id.image); 546 break; 547 case PAGE_LAST: 548 case PAGE_LASTITEM: 549 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 550 case PAGE_LAST: 551 jj_consume_token(PAGE_LAST); 552 break; 553 case PAGE_LASTITEM: 554 jj_consume_token(PAGE_LASTITEM); 555 break; 556 default: 557 jj_la1[29] = jj_gen; 558 jj_consume_token(-1); 559 throw new ParseException(); 560 } 561 pageTagExport.setLastItem(id.image); 562 break; 563 default: 564 jj_la1[30] = jj_gen; 565 jj_consume_token(-1); 566 throw new ParseException(); 567 } 568 } 569 570 public TagExportParserTokenManager token_source; 571 JavaCharStream jj_input_stream; 572 public Token token, jj_nt; 573 private int jj_ntk; 574 private int jj_gen; 575 final private int[] jj_la1 = new int[31]; 576 final private int[] jj_la1_0 = {0x8003e00,0x80,0x100,0x2400,0x1a00,0x8003e00,0x2400,0x1a00,0x3e00,0x803c000,0x80,0x100,0xc000,0x30000,0x803c000,0xc000,0x30000,0x3c000,0xffc0000,0x80,0x100,0x6000000,0x1c00000,0xc0000,0x300000,0xffc0000,0x6000000,0x1c00000,0xc0000,0x300000,0x7fc0000,}; 577 578 public TagExportParser(java.io.InputStream stream) { 579 jj_input_stream = new JavaCharStream(stream, 1, 1); 580 token_source = new TagExportParserTokenManager(jj_input_stream); 581 token = new Token(); 582 jj_ntk = -1; 583 jj_gen = 0; 584 for (int i = 0; i < 31; i++) jj_la1[i] = -1; 585 } 586 587 public void ReInit(java.io.InputStream stream) { 588 jj_input_stream.ReInit(stream, 1, 1); 589 token_source.ReInit(jj_input_stream); 590 token = new Token(); 591 jj_ntk = -1; 592 jj_gen = 0; 593 for (int i = 0; i < 31; i++) jj_la1[i] = -1; 594 } 595 596 public TagExportParser(java.io.Reader stream) { 597 jj_input_stream = new JavaCharStream(stream, 1, 1); 598 token_source = new TagExportParserTokenManager(jj_input_stream); 599 token = new Token(); 600 jj_ntk = -1; 601 jj_gen = 0; 602 for (int i = 0; i < 31; i++) jj_la1[i] = -1; 603 } 604 605 public void ReInit(java.io.Reader stream) { 606 jj_input_stream.ReInit(stream, 1, 1); 607 token_source.ReInit(jj_input_stream); 608 token = new Token(); 609 jj_ntk = -1; 610 jj_gen = 0; 611 for (int i = 0; i < 31; i++) jj_la1[i] = -1; 612 } 613 614 public TagExportParser(TagExportParserTokenManager tm) { 615 token_source = tm; 616 token = new Token(); 617 jj_ntk = -1; 618 jj_gen = 0; 619 for (int i = 0; i < 31; i++) jj_la1[i] = -1; 620 } 621 622 public void ReInit(TagExportParserTokenManager tm) { 623 token_source = tm; 624 token = new Token(); 625 jj_ntk = -1; 626 jj_gen = 0; 627 for (int i = 0; i < 31; i++) jj_la1[i] = -1; 628 } 629 630 final private Token jj_consume_token(int kind) throws ParseException { 631 Token oldToken; 632 if ((oldToken = token).next != null) token = token.next; 633 else token = token.next = token_source.getNextToken(); 634 jj_ntk = -1; 635 if (token.kind == kind) { 636 jj_gen++; 637 return token; 638 } 639 token = oldToken; 640 jj_kind = kind; 641 throw generateParseException(); 642 } 643 644 final public Token getNextToken() { 645 if (token.next != null) token = token.next; 646 else token = token.next = token_source.getNextToken(); 647 jj_ntk = -1; 648 jj_gen++; 649 return token; 650 } 651 652 final public Token getToken(int index) { 653 Token t = token; 654 for (int i = 0; i < index; i++) { 655 if (t.next != null) t = t.next; 656 else t = t.next = token_source.getNextToken(); 657 } 658 return t; 659 } 660 661 final private int jj_ntk() { 662 if ((jj_nt=token.next) == null) 663 return (jj_ntk = (token.next=token_source.getNextToken()).kind); 664 else 665 return (jj_ntk = jj_nt.kind); 666 } 667 668 private java.util.Vector jj_expentries = new java.util.Vector (); 669 private int[] jj_expentry; 670 private int jj_kind = -1; 671 672 final public ParseException generateParseException() { 673 jj_expentries.removeAllElements(); 674 boolean[] la1tokens = new boolean[30]; 675 for (int i = 0; i < 30; i++) { 676 la1tokens[i] = false; 677 } 678 if (jj_kind >= 0) { 679 la1tokens[jj_kind] = true; 680 jj_kind = -1; 681 } 682 for (int i = 0; i < 31; i++) { 683 if (jj_la1[i] == jj_gen) { 684 for (int j = 0; j < 32; j++) { 685 if ((jj_la1_0[i] & (1<<j)) != 0) { 686 la1tokens[j] = true; 687 } 688 } 689 } 690 } 691 for (int i = 0; i < 30; i++) { 692 if (la1tokens[i]) { 693 jj_expentry = new int[1]; 694 jj_expentry[0] = i; 695 jj_expentries.addElement(jj_expentry); 696 } 697 } 698 int[][] exptokseq = new int[jj_expentries.size()][]; 699 for (int i = 0; i < jj_expentries.size(); i++) { 700 exptokseq[i] = (int[])jj_expentries.elementAt(i); 701 } 702 return new ParseException(token, exptokseq, tokenImage); 703 } 704 705 final public void enable_tracing() { 706 } 707 708 final public void disable_tracing() { 709 } 710 711 } 712 | Popular Tags |