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
020package org.granite.gravity.selector;
021
022import java.io.StringReader;
023import 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"})
031public 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}