001/* Generated By:JavaCC: Do not edit this line. SelectorParser.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 019package org.apache.activemq.selector; 020 021import java.io.*; 022import java.util.*; 023 024import javax.jms.InvalidSelectorException; 025 026import org.apache.activemq.filter.*; 027import org.apache.activemq.filter.FunctionCallExpression.invalidFunctionExpressionException; 028import org.apache.activemq.util.LRUCache; 029 030/** 031 * JMS Selector Parser generated by JavaCC 032 * 033 * Do not edit this .java file directly - it is autogenerated from SelectorParser.jj 034 */ 035public class SelectorParser implements SelectorParserConstants { 036 037 private static final Map cache = Collections.synchronizedMap(new LRUCache(100)); 038 private static final String CONVERT_STRING_EXPRESSIONS_PREFIX = "convert_string_expressions:"; 039 040 public static BooleanExpression parse(String sql) throws InvalidSelectorException { 041 Object result = cache.get(sql); 042 if (result instanceof InvalidSelectorException) { 043 throw (InvalidSelectorException) result; 044 } else if (result instanceof BooleanExpression) { 045 return (BooleanExpression) result; 046 } else { 047 048 boolean convertStringExpressions = false; 049 if( sql.startsWith(CONVERT_STRING_EXPRESSIONS_PREFIX)) { 050 convertStringExpressions = true; 051 sql = sql.substring(CONVERT_STRING_EXPRESSIONS_PREFIX.length()); 052 } 053 054 if( convertStringExpressions ) { 055 ComparisonExpression.CONVERT_STRING_EXPRESSIONS.set(true); 056 } 057 try { 058 BooleanExpression e = new SelectorParser(sql).parse(); 059 cache.put(sql, e); 060 return e; 061 } catch (InvalidSelectorException t) { 062 cache.put(sql, t); 063 throw t; 064 } finally { 065 if( convertStringExpressions ) { 066 ComparisonExpression.CONVERT_STRING_EXPRESSIONS.remove(); 067 } 068 } 069 } 070 } 071 072 public static void clearCache() { 073 cache.clear(); 074 } 075 076 private String sql; 077 078 protected SelectorParser(String sql) { 079 this(new StringReader(sql)); 080 this.sql = sql; 081 } 082 083 protected BooleanExpression parse() throws InvalidSelectorException { 084 try { 085 return this.JmsSelector(); 086 } 087 catch (Throwable e) { 088 throw (InvalidSelectorException) new InvalidSelectorException(sql).initCause(e); 089 } 090 } 091 092 private BooleanExpression asBooleanExpression(Expression value) throws ParseException { 093 if (value instanceof BooleanExpression) { 094 return (BooleanExpression) value; 095 } 096 if (value instanceof PropertyExpression) { 097 return UnaryExpression.createBooleanCast( value ); 098 } 099 throw new ParseException("Expression will not result in a boolean value: " + value); 100 } 101 102// ---------------------------------------------------------------------------- 103// Grammer 104// ---------------------------------------------------------------------------- 105 final public BooleanExpression JmsSelector() throws ParseException { 106 Expression left=null; 107 left = orExpression(); 108 jj_consume_token(0); 109 {if (true) return asBooleanExpression(left);} 110 throw new Error("Missing return statement in function"); 111 } 112 113 final public Expression orExpression() throws ParseException { 114 Expression left; 115 Expression right; 116 left = andExpression(); 117 label_1: 118 while (true) { 119 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 120 case OR: 121 ; 122 break; 123 default: 124 break label_1; 125 } 126 jj_consume_token(OR); 127 right = andExpression(); 128 left = LogicExpression.createOR(asBooleanExpression(left), asBooleanExpression(right)); 129 } 130 {if (true) return left;} 131 throw new Error("Missing return statement in function"); 132 } 133 134 final public Expression andExpression() throws ParseException { 135 Expression left; 136 Expression right; 137 left = equalityExpression(); 138 label_2: 139 while (true) { 140 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 141 case AND: 142 ; 143 break; 144 default: 145 break label_2; 146 } 147 jj_consume_token(AND); 148 right = equalityExpression(); 149 left = LogicExpression.createAND(asBooleanExpression(left), asBooleanExpression(right)); 150 } 151 {if (true) return left;} 152 throw new Error("Missing return statement in function"); 153 } 154 155 final public Expression equalityExpression() throws ParseException { 156 Expression left; 157 Expression right; 158 left = comparisonExpression(); 159 label_3: 160 while (true) { 161 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 162 case IS: 163 case 28: 164 case 29: 165 ; 166 break; 167 default: 168 break label_3; 169 } 170 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 171 case 28: 172 jj_consume_token(28); 173 right = comparisonExpression(); 174 left = ComparisonExpression.createEqual(left, right); 175 break; 176 case 29: 177 jj_consume_token(29); 178 right = comparisonExpression(); 179 left = ComparisonExpression.createNotEqual(left, right); 180 break; 181 default: 182 if (jj_2_1(2)) { 183 jj_consume_token(IS); 184 jj_consume_token(NULL); 185 left = ComparisonExpression.createIsNull(left); 186 } else { 187 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 188 case IS: 189 jj_consume_token(IS); 190 jj_consume_token(NOT); 191 jj_consume_token(NULL); 192 left = ComparisonExpression.createIsNotNull(left); 193 break; 194 default: 195 jj_consume_token(-1); 196 throw new ParseException(); 197 } 198 } 199 } 200 } 201 {if (true) return left;} 202 throw new Error("Missing return statement in function"); 203 } 204 205 final public Expression comparisonExpression() throws ParseException { 206 Expression left; 207 Expression right; 208 Expression low; 209 Expression high; 210 String t, u; 211 boolean not; 212 ArrayList list; 213 left = addExpression(); 214 label_4: 215 while (true) { 216 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 217 case NOT: 218 case BETWEEN: 219 case LIKE: 220 case IN: 221 case 30: 222 case 31: 223 case 32: 224 case 33: 225 ; 226 break; 227 default: 228 break label_4; 229 } 230 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 231 case 30: 232 jj_consume_token(30); 233 right = addExpression(); 234 left = ComparisonExpression.createGreaterThan(left, right); 235 break; 236 case 31: 237 jj_consume_token(31); 238 right = addExpression(); 239 left = ComparisonExpression.createGreaterThanEqual(left, right); 240 break; 241 case 32: 242 jj_consume_token(32); 243 right = addExpression(); 244 left = ComparisonExpression.createLessThan(left, right); 245 break; 246 case 33: 247 jj_consume_token(33); 248 right = addExpression(); 249 left = ComparisonExpression.createLessThanEqual(left, right); 250 break; 251 case LIKE: 252 u=null; 253 jj_consume_token(LIKE); 254 t = stringLitteral(); 255 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 256 case ESCAPE: 257 jj_consume_token(ESCAPE); 258 u = stringLitteral(); 259 break; 260 default: 261 ; 262 } 263 left = ComparisonExpression.createLike(left, t, u); 264 break; 265 default: 266 if (jj_2_2(2)) { 267 u=null; 268 jj_consume_token(NOT); 269 jj_consume_token(LIKE); 270 t = stringLitteral(); 271 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 272 case ESCAPE: 273 jj_consume_token(ESCAPE); 274 u = stringLitteral(); 275 break; 276 default: 277 ; 278 } 279 left = ComparisonExpression.createNotLike(left, t, u); 280 } else { 281 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 282 case BETWEEN: 283 jj_consume_token(BETWEEN); 284 low = addExpression(); 285 jj_consume_token(AND); 286 high = addExpression(); 287 left = ComparisonExpression.createBetween(left, low, high); 288 break; 289 default: 290 if (jj_2_3(2)) { 291 jj_consume_token(NOT); 292 jj_consume_token(BETWEEN); 293 low = addExpression(); 294 jj_consume_token(AND); 295 high = addExpression(); 296 left = ComparisonExpression.createNotBetween(left, low, high); 297 } else { 298 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 299 case IN: 300 jj_consume_token(IN); 301 jj_consume_token(34); 302 t = stringLitteral(); 303 list = new ArrayList(); 304 list.add( t ); 305 label_5: 306 while (true) { 307 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 308 case 35: 309 ; 310 break; 311 default: 312 break label_5; 313 } 314 jj_consume_token(35); 315 t = stringLitteral(); 316 list.add( t ); 317 } 318 jj_consume_token(36); 319 left = ComparisonExpression.createInFilter(left, list); 320 break; 321 default: 322 if (jj_2_4(2)) { 323 jj_consume_token(NOT); 324 jj_consume_token(IN); 325 jj_consume_token(34); 326 t = stringLitteral(); 327 list = new ArrayList(); 328 list.add( t ); 329 label_6: 330 while (true) { 331 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 332 case 35: 333 ; 334 break; 335 default: 336 break label_6; 337 } 338 jj_consume_token(35); 339 t = stringLitteral(); 340 list.add( t ); 341 } 342 jj_consume_token(36); 343 left = ComparisonExpression.createNotInFilter(left, list); 344 } else { 345 jj_consume_token(-1); 346 throw new ParseException(); 347 } 348 } 349 } 350 } 351 } 352 } 353 } 354 {if (true) return left;} 355 throw new Error("Missing return statement in function"); 356 } 357 358 final public Expression addExpression() throws ParseException { 359 Expression left; 360 Expression right; 361 left = multExpr(); 362 label_7: 363 while (true) { 364 if (jj_2_5(2147483647)) { 365 ; 366 } else { 367 break label_7; 368 } 369 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 370 case 37: 371 jj_consume_token(37); 372 right = multExpr(); 373 left = ArithmeticExpression.createPlus(left, right); 374 break; 375 case 38: 376 jj_consume_token(38); 377 right = multExpr(); 378 left = ArithmeticExpression.createMinus(left, right); 379 break; 380 default: 381 jj_consume_token(-1); 382 throw new ParseException(); 383 } 384 } 385 {if (true) return left;} 386 throw new Error("Missing return statement in function"); 387 } 388 389 final public Expression multExpr() throws ParseException { 390 Expression left; 391 Expression right; 392 left = unaryExpr(); 393 label_8: 394 while (true) { 395 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 396 case 39: 397 case 40: 398 case 41: 399 ; 400 break; 401 default: 402 break label_8; 403 } 404 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 405 case 39: 406 jj_consume_token(39); 407 right = unaryExpr(); 408 left = ArithmeticExpression.createMultiply(left, right); 409 break; 410 case 40: 411 jj_consume_token(40); 412 right = unaryExpr(); 413 left = ArithmeticExpression.createDivide(left, right); 414 break; 415 case 41: 416 jj_consume_token(41); 417 right = unaryExpr(); 418 left = ArithmeticExpression.createMod(left, right); 419 break; 420 default: 421 jj_consume_token(-1); 422 throw new ParseException(); 423 } 424 } 425 {if (true) return left;} 426 throw new Error("Missing return statement in function"); 427 } 428 429 final public Expression unaryExpr() throws ParseException { 430 String s=null; 431 Expression left=null; 432 if (jj_2_6(2147483647)) { 433 jj_consume_token(37); 434 left = unaryExpr(); 435 } else { 436 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 437 case 38: 438 jj_consume_token(38); 439 left = unaryExpr(); 440 left = UnaryExpression.createNegate(left); 441 break; 442 case NOT: 443 jj_consume_token(NOT); 444 left = unaryExpr(); 445 left = UnaryExpression.createNOT( asBooleanExpression(left) ); 446 break; 447 case XPATH: 448 jj_consume_token(XPATH); 449 s = stringLitteral(); 450 left = UnaryExpression.createXPath( s ); 451 break; 452 case XQUERY: 453 jj_consume_token(XQUERY); 454 s = stringLitteral(); 455 left = UnaryExpression.createXQuery( s ); 456 break; 457 default: 458 if (jj_2_7(2147483647)) { 459 left = functionCallExpr(); 460 } else { 461 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 462 case TRUE: 463 case FALSE: 464 case NULL: 465 case DECIMAL_LITERAL: 466 case HEX_LITERAL: 467 case OCTAL_LITERAL: 468 case FLOATING_POINT_LITERAL: 469 case STRING_LITERAL: 470 case ID: 471 case 34: 472 left = primaryExpr(); 473 break; 474 default: 475 jj_consume_token(-1); 476 throw new ParseException(); 477 } 478 } 479 } 480 } 481 {if (true) return left;} 482 throw new Error("Missing return statement in function"); 483 } 484 485 final public Expression functionCallExpr() throws ParseException { 486 Token func_name; 487 FunctionCallExpression func_call = null; 488 Expression arg = null; 489 ArrayList arg_list = new ArrayList(); 490 func_name = jj_consume_token(ID); 491 jj_consume_token(34); 492 arg = unaryExpr(); 493 arg_list.add(arg); 494 label_9: 495 while (true) { 496 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 497 case 35: 498 ; 499 break; 500 default: 501 break label_9; 502 } 503 jj_consume_token(35); 504 arg = unaryExpr(); 505 arg_list.add(arg); 506 } 507 jj_consume_token(36); 508 try 509 { 510 {if (true) return FunctionCallExpression.createFunctionCall(func_name.image, arg_list);} 511 } 512 catch ( invalidFunctionExpressionException inv_exc ) 513 { 514 // Re-throw as an error to avoid the need to propogate the throws declaration. 515 {if (true) throw new Error("invalid function call expression", inv_exc);} 516 } 517 throw new Error("Missing return statement in function"); 518 } 519 520 final public Expression primaryExpr() throws ParseException { 521 Expression left=null; 522 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 523 case TRUE: 524 case FALSE: 525 case NULL: 526 case DECIMAL_LITERAL: 527 case HEX_LITERAL: 528 case OCTAL_LITERAL: 529 case FLOATING_POINT_LITERAL: 530 case STRING_LITERAL: 531 left = literal(); 532 break; 533 case ID: 534 left = variable(); 535 break; 536 case 34: 537 jj_consume_token(34); 538 left = orExpression(); 539 jj_consume_token(36); 540 break; 541 default: 542 jj_consume_token(-1); 543 throw new ParseException(); 544 } 545 {if (true) return left;} 546 throw new Error("Missing return statement in function"); 547 } 548 549 final public ConstantExpression literal() throws ParseException { 550 Token t; 551 String s; 552 ConstantExpression left=null; 553 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 554 case STRING_LITERAL: 555 s = stringLitteral(); 556 left = new ConstantExpression(s); 557 break; 558 case DECIMAL_LITERAL: 559 t = jj_consume_token(DECIMAL_LITERAL); 560 left = ConstantExpression.createFromDecimal(t.image); 561 break; 562 case HEX_LITERAL: 563 t = jj_consume_token(HEX_LITERAL); 564 left = ConstantExpression.createFromHex(t.image); 565 break; 566 case OCTAL_LITERAL: 567 t = jj_consume_token(OCTAL_LITERAL); 568 left = ConstantExpression.createFromOctal(t.image); 569 break; 570 case FLOATING_POINT_LITERAL: 571 t = jj_consume_token(FLOATING_POINT_LITERAL); 572 left = ConstantExpression.createFloat(t.image); 573 break; 574 case TRUE: 575 jj_consume_token(TRUE); 576 left = ConstantExpression.TRUE; 577 break; 578 case FALSE: 579 jj_consume_token(FALSE); 580 left = ConstantExpression.FALSE; 581 break; 582 case NULL: 583 jj_consume_token(NULL); 584 left = ConstantExpression.NULL; 585 break; 586 default: 587 jj_consume_token(-1); 588 throw new ParseException(); 589 } 590 {if (true) return left;} 591 throw new Error("Missing return statement in function"); 592 } 593 594 final public String stringLitteral() throws ParseException { 595 Token t; 596 StringBuffer rc = new StringBuffer(); 597 boolean first=true; 598 t = jj_consume_token(STRING_LITERAL); 599 // Decode the sting value. 600 String image = t.image; 601 for( int i=1; i < image.length()-1; i++ ) { 602 char c = image.charAt(i); 603 if( c == '\u005c'' ) 604 i++; 605 rc.append(c); 606 } 607 {if (true) return rc.toString();} 608 throw new Error("Missing return statement in function"); 609 } 610 611 final public PropertyExpression variable() throws ParseException { 612 Token t; 613 PropertyExpression left=null; 614 t = jj_consume_token(ID); 615 left = new PropertyExpression(t.image); 616 {if (true) return left;} 617 throw new Error("Missing return statement in function"); 618 } 619 620 private boolean jj_2_1(int xla) { 621 jj_la = xla; jj_lastpos = jj_scanpos = token; 622 try { return !jj_3_1(); } 623 catch(LookaheadSuccess ls) { return true; } 624 } 625 626 private boolean jj_2_2(int xla) { 627 jj_la = xla; jj_lastpos = jj_scanpos = token; 628 try { return !jj_3_2(); } 629 catch(LookaheadSuccess ls) { return true; } 630 } 631 632 private boolean jj_2_3(int xla) { 633 jj_la = xla; jj_lastpos = jj_scanpos = token; 634 try { return !jj_3_3(); } 635 catch(LookaheadSuccess ls) { return true; } 636 } 637 638 private boolean jj_2_4(int xla) { 639 jj_la = xla; jj_lastpos = jj_scanpos = token; 640 try { return !jj_3_4(); } 641 catch(LookaheadSuccess ls) { return true; } 642 } 643 644 private boolean jj_2_5(int xla) { 645 jj_la = xla; jj_lastpos = jj_scanpos = token; 646 try { return !jj_3_5(); } 647 catch(LookaheadSuccess ls) { return true; } 648 } 649 650 private boolean jj_2_6(int xla) { 651 jj_la = xla; jj_lastpos = jj_scanpos = token; 652 try { return !jj_3_6(); } 653 catch(LookaheadSuccess ls) { return true; } 654 } 655 656 private boolean jj_2_7(int xla) { 657 jj_la = xla; jj_lastpos = jj_scanpos = token; 658 try { return !jj_3_7(); } 659 catch(LookaheadSuccess ls) { return true; } 660 } 661 662 private boolean jj_3R_11() { 663 Token xsp; 664 xsp = jj_scanpos; 665 if (jj_3R_13()) { 666 jj_scanpos = xsp; 667 if (jj_3R_14()) { 668 jj_scanpos = xsp; 669 if (jj_3R_15()) { 670 jj_scanpos = xsp; 671 if (jj_3R_16()) { 672 jj_scanpos = xsp; 673 if (jj_3R_17()) { 674 jj_scanpos = xsp; 675 if (jj_3R_18()) { 676 jj_scanpos = xsp; 677 if (jj_3R_19()) return true; 678 } 679 } 680 } 681 } 682 } 683 } 684 return false; 685 } 686 687 private boolean jj_3R_59() { 688 if (jj_scan_token(IN)) return true; 689 if (jj_scan_token(34)) return true; 690 if (jj_3R_23()) return true; 691 Token xsp; 692 while (true) { 693 xsp = jj_scanpos; 694 if (jj_3R_64()) { jj_scanpos = xsp; break; } 695 } 696 if (jj_scan_token(36)) return true; 697 return false; 698 } 699 700 private boolean jj_3R_49() { 701 if (jj_scan_token(28)) return true; 702 if (jj_3R_45()) return true; 703 return false; 704 } 705 706 private boolean jj_3R_46() { 707 Token xsp; 708 xsp = jj_scanpos; 709 if (jj_3R_49()) { 710 jj_scanpos = xsp; 711 if (jj_3R_50()) { 712 jj_scanpos = xsp; 713 if (jj_3_1()) { 714 jj_scanpos = xsp; 715 if (jj_3R_51()) return true; 716 } 717 } 718 } 719 return false; 720 } 721 722 private boolean jj_3R_31() { 723 if (jj_scan_token(ID)) return true; 724 return false; 725 } 726 727 private boolean jj_3_3() { 728 if (jj_scan_token(NOT)) return true; 729 if (jj_scan_token(BETWEEN)) return true; 730 if (jj_3R_47()) return true; 731 if (jj_scan_token(AND)) return true; 732 if (jj_3R_47()) return true; 733 return false; 734 } 735 736 private boolean jj_3R_29() { 737 if (jj_scan_token(34)) return true; 738 if (jj_3R_32()) return true; 739 if (jj_scan_token(36)) return true; 740 return false; 741 } 742 743 private boolean jj_3R_28() { 744 if (jj_3R_31()) return true; 745 return false; 746 } 747 748 private boolean jj_3R_22() { 749 if (jj_scan_token(41)) return true; 750 if (jj_3R_11()) return true; 751 return false; 752 } 753 754 private boolean jj_3R_27() { 755 if (jj_3R_30()) return true; 756 return false; 757 } 758 759 private boolean jj_3R_58() { 760 if (jj_scan_token(BETWEEN)) return true; 761 if (jj_3R_47()) return true; 762 if (jj_scan_token(AND)) return true; 763 if (jj_3R_47()) return true; 764 return false; 765 } 766 767 private boolean jj_3R_43() { 768 if (jj_3R_45()) return true; 769 Token xsp; 770 while (true) { 771 xsp = jj_scanpos; 772 if (jj_3R_46()) { jj_scanpos = xsp; break; } 773 } 774 return false; 775 } 776 777 private boolean jj_3R_21() { 778 if (jj_scan_token(40)) return true; 779 if (jj_3R_11()) return true; 780 return false; 781 } 782 783 private boolean jj_3R_25() { 784 Token xsp; 785 xsp = jj_scanpos; 786 if (jj_3R_27()) { 787 jj_scanpos = xsp; 788 if (jj_3R_28()) { 789 jj_scanpos = xsp; 790 if (jj_3R_29()) return true; 791 } 792 } 793 return false; 794 } 795 796 private boolean jj_3R_62() { 797 if (jj_scan_token(ESCAPE)) return true; 798 if (jj_3R_23()) return true; 799 return false; 800 } 801 802 private boolean jj_3_2() { 803 if (jj_scan_token(NOT)) return true; 804 if (jj_scan_token(LIKE)) return true; 805 if (jj_3R_23()) return true; 806 Token xsp; 807 xsp = jj_scanpos; 808 if (jj_3R_63()) jj_scanpos = xsp; 809 return false; 810 } 811 812 private boolean jj_3R_12() { 813 Token xsp; 814 xsp = jj_scanpos; 815 if (jj_3R_20()) { 816 jj_scanpos = xsp; 817 if (jj_3R_21()) { 818 jj_scanpos = xsp; 819 if (jj_3R_22()) return true; 820 } 821 } 822 return false; 823 } 824 825 private boolean jj_3R_20() { 826 if (jj_scan_token(39)) return true; 827 if (jj_3R_11()) return true; 828 return false; 829 } 830 831 private boolean jj_3R_23() { 832 if (jj_scan_token(STRING_LITERAL)) return true; 833 return false; 834 } 835 836 private boolean jj_3R_44() { 837 if (jj_scan_token(AND)) return true; 838 if (jj_3R_43()) return true; 839 return false; 840 } 841 842 private boolean jj_3R_10() { 843 if (jj_3R_11()) return true; 844 Token xsp; 845 while (true) { 846 xsp = jj_scanpos; 847 if (jj_3R_12()) { jj_scanpos = xsp; break; } 848 } 849 return false; 850 } 851 852 private boolean jj_3R_57() { 853 if (jj_scan_token(LIKE)) return true; 854 if (jj_3R_23()) return true; 855 Token xsp; 856 xsp = jj_scanpos; 857 if (jj_3R_62()) jj_scanpos = xsp; 858 return false; 859 } 860 861 private boolean jj_3R_41() { 862 if (jj_3R_43()) return true; 863 Token xsp; 864 while (true) { 865 xsp = jj_scanpos; 866 if (jj_3R_44()) { jj_scanpos = xsp; break; } 867 } 868 return false; 869 } 870 871 private boolean jj_3R_26() { 872 if (jj_scan_token(35)) return true; 873 if (jj_3R_11()) return true; 874 return false; 875 } 876 877 private boolean jj_3R_56() { 878 if (jj_scan_token(33)) return true; 879 if (jj_3R_47()) return true; 880 return false; 881 } 882 883 private boolean jj_3R_40() { 884 if (jj_scan_token(NULL)) return true; 885 return false; 886 } 887 888 private boolean jj_3R_61() { 889 if (jj_scan_token(38)) return true; 890 if (jj_3R_10()) return true; 891 return false; 892 } 893 894 private boolean jj_3_5() { 895 Token xsp; 896 xsp = jj_scanpos; 897 if (jj_scan_token(37)) { 898 jj_scanpos = xsp; 899 if (jj_scan_token(38)) return true; 900 } 901 if (jj_3R_10()) return true; 902 return false; 903 } 904 905 private boolean jj_3R_55() { 906 if (jj_scan_token(32)) return true; 907 if (jj_3R_47()) return true; 908 return false; 909 } 910 911 private boolean jj_3R_60() { 912 if (jj_scan_token(37)) return true; 913 if (jj_3R_10()) return true; 914 return false; 915 } 916 917 private boolean jj_3R_39() { 918 if (jj_scan_token(FALSE)) return true; 919 return false; 920 } 921 922 private boolean jj_3R_42() { 923 if (jj_scan_token(OR)) return true; 924 if (jj_3R_41()) return true; 925 return false; 926 } 927 928 private boolean jj_3R_54() { 929 if (jj_scan_token(31)) return true; 930 if (jj_3R_47()) return true; 931 return false; 932 } 933 934 private boolean jj_3R_52() { 935 Token xsp; 936 xsp = jj_scanpos; 937 if (jj_3R_60()) { 938 jj_scanpos = xsp; 939 if (jj_3R_61()) return true; 940 } 941 return false; 942 } 943 944 private boolean jj_3_7() { 945 if (jj_scan_token(ID)) return true; 946 if (jj_scan_token(34)) return true; 947 return false; 948 } 949 950 private boolean jj_3R_24() { 951 if (jj_scan_token(ID)) return true; 952 if (jj_scan_token(34)) return true; 953 if (jj_3R_11()) return true; 954 Token xsp; 955 while (true) { 956 xsp = jj_scanpos; 957 if (jj_3R_26()) { jj_scanpos = xsp; break; } 958 } 959 if (jj_scan_token(36)) return true; 960 return false; 961 } 962 963 private boolean jj_3R_53() { 964 if (jj_scan_token(30)) return true; 965 if (jj_3R_47()) return true; 966 return false; 967 } 968 969 private boolean jj_3R_48() { 970 Token xsp; 971 xsp = jj_scanpos; 972 if (jj_3R_53()) { 973 jj_scanpos = xsp; 974 if (jj_3R_54()) { 975 jj_scanpos = xsp; 976 if (jj_3R_55()) { 977 jj_scanpos = xsp; 978 if (jj_3R_56()) { 979 jj_scanpos = xsp; 980 if (jj_3R_57()) { 981 jj_scanpos = xsp; 982 if (jj_3_2()) { 983 jj_scanpos = xsp; 984 if (jj_3R_58()) { 985 jj_scanpos = xsp; 986 if (jj_3_3()) { 987 jj_scanpos = xsp; 988 if (jj_3R_59()) { 989 jj_scanpos = xsp; 990 if (jj_3_4()) return true; 991 } 992 } 993 } 994 } 995 } 996 } 997 } 998 } 999 } 1000 return false; 1001 } 1002 1003 private boolean jj_3R_38() { 1004 if (jj_scan_token(TRUE)) return true; 1005 return false; 1006 } 1007 1008 private boolean jj_3R_47() { 1009 if (jj_3R_10()) return true; 1010 Token xsp; 1011 while (true) { 1012 xsp = jj_scanpos; 1013 if (jj_3R_52()) { jj_scanpos = xsp; break; } 1014 } 1015 return false; 1016 } 1017 1018 private boolean jj_3R_32() { 1019 if (jj_3R_41()) return true; 1020 Token xsp; 1021 while (true) { 1022 xsp = jj_scanpos; 1023 if (jj_3R_42()) { jj_scanpos = xsp; break; } 1024 } 1025 return false; 1026 } 1027 1028 private boolean jj_3R_37() { 1029 if (jj_scan_token(FLOATING_POINT_LITERAL)) return true; 1030 return false; 1031 } 1032 1033 private boolean jj_3R_65() { 1034 if (jj_scan_token(35)) return true; 1035 if (jj_3R_23()) return true; 1036 return false; 1037 } 1038 1039 private boolean jj_3R_18() { 1040 if (jj_3R_24()) return true; 1041 return false; 1042 } 1043 1044 private boolean jj_3R_19() { 1045 if (jj_3R_25()) return true; 1046 return false; 1047 } 1048 1049 private boolean jj_3R_36() { 1050 if (jj_scan_token(OCTAL_LITERAL)) return true; 1051 return false; 1052 } 1053 1054 private boolean jj_3R_45() { 1055 if (jj_3R_47()) return true; 1056 Token xsp; 1057 while (true) { 1058 xsp = jj_scanpos; 1059 if (jj_3R_48()) { jj_scanpos = xsp; break; } 1060 } 1061 return false; 1062 } 1063 1064 private boolean jj_3R_17() { 1065 if (jj_scan_token(XQUERY)) return true; 1066 if (jj_3R_23()) return true; 1067 return false; 1068 } 1069 1070 private boolean jj_3R_35() { 1071 if (jj_scan_token(HEX_LITERAL)) return true; 1072 return false; 1073 } 1074 1075 private boolean jj_3R_16() { 1076 if (jj_scan_token(XPATH)) return true; 1077 if (jj_3R_23()) return true; 1078 return false; 1079 } 1080 1081 private boolean jj_3R_63() { 1082 if (jj_scan_token(ESCAPE)) return true; 1083 if (jj_3R_23()) return true; 1084 return false; 1085 } 1086 1087 private boolean jj_3_4() { 1088 if (jj_scan_token(NOT)) return true; 1089 if (jj_scan_token(IN)) return true; 1090 if (jj_scan_token(34)) return true; 1091 if (jj_3R_23()) return true; 1092 Token xsp; 1093 while (true) { 1094 xsp = jj_scanpos; 1095 if (jj_3R_65()) { jj_scanpos = xsp; break; } 1096 } 1097 if (jj_scan_token(36)) return true; 1098 return false; 1099 } 1100 1101 private boolean jj_3_6() { 1102 if (jj_scan_token(37)) return true; 1103 if (jj_3R_11()) return true; 1104 return false; 1105 } 1106 1107 private boolean jj_3R_34() { 1108 if (jj_scan_token(DECIMAL_LITERAL)) return true; 1109 return false; 1110 } 1111 1112 private boolean jj_3R_15() { 1113 if (jj_scan_token(NOT)) return true; 1114 if (jj_3R_11()) return true; 1115 return false; 1116 } 1117 1118 private boolean jj_3R_64() { 1119 if (jj_scan_token(35)) return true; 1120 if (jj_3R_23()) return true; 1121 return false; 1122 } 1123 1124 private boolean jj_3R_51() { 1125 if (jj_scan_token(IS)) return true; 1126 if (jj_scan_token(NOT)) return true; 1127 if (jj_scan_token(NULL)) return true; 1128 return false; 1129 } 1130 1131 private boolean jj_3R_14() { 1132 if (jj_scan_token(38)) return true; 1133 if (jj_3R_11()) return true; 1134 return false; 1135 } 1136 1137 private boolean jj_3R_33() { 1138 if (jj_3R_23()) return true; 1139 return false; 1140 } 1141 1142 private boolean jj_3_1() { 1143 if (jj_scan_token(IS)) return true; 1144 if (jj_scan_token(NULL)) return true; 1145 return false; 1146 } 1147 1148 private boolean jj_3R_13() { 1149 if (jj_scan_token(37)) return true; 1150 if (jj_3R_11()) return true; 1151 return false; 1152 } 1153 1154 private boolean jj_3R_30() { 1155 Token xsp; 1156 xsp = jj_scanpos; 1157 if (jj_3R_33()) { 1158 jj_scanpos = xsp; 1159 if (jj_3R_34()) { 1160 jj_scanpos = xsp; 1161 if (jj_3R_35()) { 1162 jj_scanpos = xsp; 1163 if (jj_3R_36()) { 1164 jj_scanpos = xsp; 1165 if (jj_3R_37()) { 1166 jj_scanpos = xsp; 1167 if (jj_3R_38()) { 1168 jj_scanpos = xsp; 1169 if (jj_3R_39()) { 1170 jj_scanpos = xsp; 1171 if (jj_3R_40()) return true; 1172 } 1173 } 1174 } 1175 } 1176 } 1177 } 1178 } 1179 return false; 1180 } 1181 1182 private boolean jj_3R_50() { 1183 if (jj_scan_token(29)) return true; 1184 if (jj_3R_45()) return true; 1185 return false; 1186 } 1187 1188 /** Generated Token Manager. */ 1189 public SelectorParserTokenManager token_source; 1190 SimpleCharStream jj_input_stream; 1191 /** Current token. */ 1192 public Token token; 1193 /** Next token. */ 1194 public Token jj_nt; 1195 private int jj_ntk; 1196 private Token jj_scanpos, jj_lastpos; 1197 private int jj_la; 1198 1199 /** Constructor with InputStream. */ 1200 public SelectorParser(java.io.InputStream stream) { 1201 this(stream, null); 1202 } 1203 /** Constructor with InputStream and supplied encoding */ 1204 public SelectorParser(java.io.InputStream stream, String encoding) { 1205 try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } 1206 token_source = new SelectorParserTokenManager(jj_input_stream); 1207 token = new Token(); 1208 jj_ntk = -1; 1209 } 1210 1211 /** Reinitialise. */ 1212 public void ReInit(java.io.InputStream stream) { 1213 ReInit(stream, null); 1214 } 1215 /** Reinitialise. */ 1216 public void ReInit(java.io.InputStream stream, String encoding) { 1217 try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } 1218 token_source.ReInit(jj_input_stream); 1219 token = new Token(); 1220 jj_ntk = -1; 1221 } 1222 1223 /** Constructor. */ 1224 public SelectorParser(java.io.Reader stream) { 1225 jj_input_stream = new SimpleCharStream(stream, 1, 1); 1226 token_source = new SelectorParserTokenManager(jj_input_stream); 1227 token = new Token(); 1228 jj_ntk = -1; 1229 } 1230 1231 /** Reinitialise. */ 1232 public void ReInit(java.io.Reader stream) { 1233 jj_input_stream.ReInit(stream, 1, 1); 1234 token_source.ReInit(jj_input_stream); 1235 token = new Token(); 1236 jj_ntk = -1; 1237 } 1238 1239 /** Constructor with generated Token Manager. */ 1240 public SelectorParser(SelectorParserTokenManager tm) { 1241 token_source = tm; 1242 token = new Token(); 1243 jj_ntk = -1; 1244 } 1245 1246 /** Reinitialise. */ 1247 public void ReInit(SelectorParserTokenManager tm) { 1248 token_source = tm; 1249 token = new Token(); 1250 jj_ntk = -1; 1251 } 1252 1253 private Token jj_consume_token(int kind) throws ParseException { 1254 Token oldToken; 1255 if ((oldToken = token).next != null) token = token.next; 1256 else token = token.next = token_source.getNextToken(); 1257 jj_ntk = -1; 1258 if (token.kind == kind) { 1259 return token; 1260 } 1261 token = oldToken; 1262 throw generateParseException(); 1263 } 1264 1265 static private final class LookaheadSuccess extends java.lang.Error { } 1266 final private LookaheadSuccess jj_ls = new LookaheadSuccess(); 1267 private boolean jj_scan_token(int kind) { 1268 if (jj_scanpos == jj_lastpos) { 1269 jj_la--; 1270 if (jj_scanpos.next == null) { 1271 jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken(); 1272 } else { 1273 jj_lastpos = jj_scanpos = jj_scanpos.next; 1274 } 1275 } else { 1276 jj_scanpos = jj_scanpos.next; 1277 } 1278 if (jj_scanpos.kind != kind) return true; 1279 if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls; 1280 return false; 1281 } 1282 1283 1284/** Get the next Token. */ 1285 final public Token getNextToken() { 1286 if (token.next != null) token = token.next; 1287 else token = token.next = token_source.getNextToken(); 1288 jj_ntk = -1; 1289 return token; 1290 } 1291 1292/** Get the specific Token. */ 1293 final public Token getToken(int index) { 1294 Token t = token; 1295 for (int i = 0; i < index; i++) { 1296 if (t.next != null) t = t.next; 1297 else t = t.next = token_source.getNextToken(); 1298 } 1299 return t; 1300 } 1301 1302 private int jj_ntk() { 1303 if ((jj_nt=token.next) == null) 1304 return (jj_ntk = (token.next=token_source.getNextToken()).kind); 1305 else 1306 return (jj_ntk = jj_nt.kind); 1307 } 1308 1309 /** Generate ParseException. */ 1310 public ParseException generateParseException() { 1311 Token errortok = token.next; 1312 int line = errortok.beginLine, column = errortok.beginColumn; 1313 String mess = (errortok.kind == 0) ? tokenImage[0] : errortok.image; 1314 return new ParseException("Parse error at line " + line + ", column " + column + ". Encountered: " + mess); 1315 } 1316 1317 /** Enable tracing. */ 1318 final public void enable_tracing() { 1319 } 1320 1321 /** Disable tracing. */ 1322 final public void disable_tracing() { 1323 } 1324 1325}