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    
041    package org.granite.gravity.selector;
042    
043    import java.io.StringReader;
044    import 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"})
052    public 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    }