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