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