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