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