001    /* Generated By:JavaCC: Do not edit this line. OgnlParser.java */
002    package org.apache.commons.ognl;
003    
004    import java.math.*;
005    
006    /**
007     * OgnlParser is a JavaCC parser class; it translates OGNL expressions into abstract
008     * syntax trees (ASTs) that can then be interpreted by the getValue and setValue methods.
009     */
010    public class OgnlParser/*@bgen(jjtree)*/implements OgnlParserTreeConstants, OgnlParserConstants {/*@bgen(jjtree)*/
011      protected JJTOgnlParserState jjtree = new JJTOgnlParserState();
012    
013    /**
014     * This is the top-level construct of OGNL.
015     */
016      final public Node topLevelExpression() throws ParseException {
017        expression();
018        jj_consume_token(0);
019                             {if (true) return jjtree.rootNode();}
020        throw new Error("Missing return statement in function");
021      }
022    
023    // sequence (level 14)
024      final public void expression() throws ParseException {
025        assignmentExpression();
026        label_1:
027        while (true) {
028          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
029          case 1:
030            ;
031            break;
032          default:
033            jj_la1[0] = jj_gen;
034            break label_1;
035          }
036          jj_consume_token(1);
037                                       ASTSequence jjtn001 = new ASTSequence(JJTSEQUENCE);
038                                       boolean jjtc001 = true;
039                                       jjtree.openNodeScope(jjtn001);
040          try {
041            assignmentExpression();
042          } catch (Throwable jjte001) {
043                                       if (jjtc001) {
044                                         jjtree.clearNodeScope(jjtn001);
045                                         jjtc001 = false;
046                                       } else {
047                                         jjtree.popNode();
048                                       }
049                                       if (jjte001 instanceof RuntimeException) {
050                                         {if (true) throw (RuntimeException)jjte001;}
051                                       }
052                                       if (jjte001 instanceof ParseException) {
053                                         {if (true) throw (ParseException)jjte001;}
054                                       }
055                                       {if (true) throw (Error)jjte001;}
056          } finally {
057                                       if (jjtc001) {
058                                         jjtree.closeNodeScope(jjtn001,  2);
059                                       }
060          }
061        }
062      }
063    
064    // assignment expression (level 13)
065      final public void assignmentExpression() throws ParseException {
066        conditionalTestExpression();
067        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
068        case 2:
069          jj_consume_token(2);
070                                            ASTAssign jjtn001 = new ASTAssign(JJTASSIGN);
071                                            boolean jjtc001 = true;
072                                            jjtree.openNodeScope(jjtn001);
073          try {
074            assignmentExpression();
075          } catch (Throwable jjte001) {
076                                            if (jjtc001) {
077                                              jjtree.clearNodeScope(jjtn001);
078                                              jjtc001 = false;
079                                            } else {
080                                              jjtree.popNode();
081                                            }
082                                            if (jjte001 instanceof RuntimeException) {
083                                              {if (true) throw (RuntimeException)jjte001;}
084                                            }
085                                            if (jjte001 instanceof ParseException) {
086                                              {if (true) throw (ParseException)jjte001;}
087                                            }
088                                            {if (true) throw (Error)jjte001;}
089          } finally {
090                                            if (jjtc001) {
091                                              jjtree.closeNodeScope(jjtn001,  2);
092                                            }
093          }
094          break;
095        default:
096          jj_la1[1] = jj_gen;
097          ;
098        }
099      }
100    
101    // conditional test (level 12)
102      final public void conditionalTestExpression() throws ParseException {
103        logicalOrExpression();
104        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
105        case 3:
106          jj_consume_token(3);
107          conditionalTestExpression();
108          jj_consume_token(4);
109                                                    ASTTest jjtn001 = new ASTTest(JJTTEST);
110                                                    boolean jjtc001 = true;
111                                                    jjtree.openNodeScope(jjtn001);
112          try {
113            conditionalTestExpression();
114          } catch (Throwable jjte001) {
115                                                    if (jjtc001) {
116                                                      jjtree.clearNodeScope(jjtn001);
117                                                      jjtc001 = false;
118                                                    } else {
119                                                      jjtree.popNode();
120                                                    }
121                                                    if (jjte001 instanceof RuntimeException) {
122                                                      {if (true) throw (RuntimeException)jjte001;}
123                                                    }
124                                                    if (jjte001 instanceof ParseException) {
125                                                      {if (true) throw (ParseException)jjte001;}
126                                                    }
127                                                    {if (true) throw (Error)jjte001;}
128          } finally {
129                                                    if (jjtc001) {
130                                                      jjtree.closeNodeScope(jjtn001,  3);
131                                                    }
132          }
133          break;
134        default:
135          jj_la1[2] = jj_gen;
136          ;
137        }
138      }
139    
140    // logical or (||)  (level 11)
141      final public void logicalOrExpression() throws ParseException {
142        logicalAndExpression();
143        label_2:
144        while (true) {
145          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
146          case 5:
147          case 6:
148            ;
149            break;
150          default:
151            jj_la1[3] = jj_gen;
152            break label_2;
153          }
154          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
155          case 5:
156            jj_consume_token(5);
157            break;
158          case 6:
159            jj_consume_token(6);
160            break;
161          default:
162            jj_la1[4] = jj_gen;
163            jj_consume_token(-1);
164            throw new ParseException();
165          }
166                                                ASTOr jjtn001 = new ASTOr(JJTOR);
167                                                boolean jjtc001 = true;
168                                                jjtree.openNodeScope(jjtn001);
169          try {
170            logicalAndExpression();
171          } catch (Throwable jjte001) {
172                                                if (jjtc001) {
173                                                  jjtree.clearNodeScope(jjtn001);
174                                                  jjtc001 = false;
175                                                } else {
176                                                  jjtree.popNode();
177                                                }
178                                                if (jjte001 instanceof RuntimeException) {
179                                                  {if (true) throw (RuntimeException)jjte001;}
180                                                }
181                                                if (jjte001 instanceof ParseException) {
182                                                  {if (true) throw (ParseException)jjte001;}
183                                                }
184                                                {if (true) throw (Error)jjte001;}
185          } finally {
186                                                if (jjtc001) {
187                                                  jjtree.closeNodeScope(jjtn001,  2);
188                                                }
189          }
190        }
191      }
192    
193    // logical and (&&)  (level 10)
194      final public void logicalAndExpression() throws ParseException {
195        inclusiveOrExpression();
196        label_3:
197        while (true) {
198          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
199          case 7:
200          case 8:
201            ;
202            break;
203          default:
204            jj_la1[5] = jj_gen;
205            break label_3;
206          }
207          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
208          case 7:
209            jj_consume_token(7);
210            break;
211          case 8:
212            jj_consume_token(8);
213            break;
214          default:
215            jj_la1[6] = jj_gen;
216            jj_consume_token(-1);
217            throw new ParseException();
218          }
219                                                  ASTAnd jjtn001 = new ASTAnd(JJTAND);
220                                                  boolean jjtc001 = true;
221                                                  jjtree.openNodeScope(jjtn001);
222          try {
223            inclusiveOrExpression();
224          } catch (Throwable jjte001) {
225                                                  if (jjtc001) {
226                                                    jjtree.clearNodeScope(jjtn001);
227                                                    jjtc001 = false;
228                                                  } else {
229                                                    jjtree.popNode();
230                                                  }
231                                                  if (jjte001 instanceof RuntimeException) {
232                                                    {if (true) throw (RuntimeException)jjte001;}
233                                                  }
234                                                  if (jjte001 instanceof ParseException) {
235                                                    {if (true) throw (ParseException)jjte001;}
236                                                  }
237                                                  {if (true) throw (Error)jjte001;}
238          } finally {
239                                                  if (jjtc001) {
240                                                    jjtree.closeNodeScope(jjtn001,  2);
241                                                  }
242          }
243        }
244      }
245    
246    // bitwise or non-short-circuiting or (|)  (level 9)
247      final public void inclusiveOrExpression() throws ParseException {
248        exclusiveOrExpression();
249        label_4:
250        while (true) {
251          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
252          case 9:
253          case 10:
254            ;
255            break;
256          default:
257            jj_la1[7] = jj_gen;
258            break label_4;
259          }
260          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
261          case 9:
262            jj_consume_token(9);
263            break;
264          case 10:
265            jj_consume_token(10);
266            break;
267          default:
268            jj_la1[8] = jj_gen;
269            jj_consume_token(-1);
270            throw new ParseException();
271          }
272                                                 ASTBitOr jjtn001 = new ASTBitOr(JJTBITOR);
273                                                 boolean jjtc001 = true;
274                                                 jjtree.openNodeScope(jjtn001);
275          try {
276            exclusiveOrExpression();
277          } catch (Throwable jjte001) {
278                                                 if (jjtc001) {
279                                                   jjtree.clearNodeScope(jjtn001);
280                                                   jjtc001 = false;
281                                                 } else {
282                                                   jjtree.popNode();
283                                                 }
284                                                 if (jjte001 instanceof RuntimeException) {
285                                                   {if (true) throw (RuntimeException)jjte001;}
286                                                 }
287                                                 if (jjte001 instanceof ParseException) {
288                                                   {if (true) throw (ParseException)jjte001;}
289                                                 }
290                                                 {if (true) throw (Error)jjte001;}
291          } finally {
292                                                 if (jjtc001) {
293                                                   jjtree.closeNodeScope(jjtn001,  2);
294                                                 }
295          }
296        }
297      }
298    
299    // exclusive or (^)  (level 8)
300      final public void exclusiveOrExpression() throws ParseException {
301        andExpression();
302        label_5:
303        while (true) {
304          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
305          case 11:
306          case 12:
307            ;
308            break;
309          default:
310            jj_la1[9] = jj_gen;
311            break label_5;
312          }
313          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
314          case 11:
315            jj_consume_token(11);
316            break;
317          case 12:
318            jj_consume_token(12);
319            break;
320          default:
321            jj_la1[10] = jj_gen;
322            jj_consume_token(-1);
323            throw new ParseException();
324          }
325                                         ASTXor jjtn001 = new ASTXor(JJTXOR);
326                                         boolean jjtc001 = true;
327                                         jjtree.openNodeScope(jjtn001);
328          try {
329            andExpression();
330          } catch (Throwable jjte001) {
331                                         if (jjtc001) {
332                                           jjtree.clearNodeScope(jjtn001);
333                                           jjtc001 = false;
334                                         } else {
335                                           jjtree.popNode();
336                                         }
337                                         if (jjte001 instanceof RuntimeException) {
338                                           {if (true) throw (RuntimeException)jjte001;}
339                                         }
340                                         if (jjte001 instanceof ParseException) {
341                                           {if (true) throw (ParseException)jjte001;}
342                                         }
343                                         {if (true) throw (Error)jjte001;}
344          } finally {
345                                         if (jjtc001) {
346                                           jjtree.closeNodeScope(jjtn001,  2);
347                                         }
348          }
349        }
350      }
351    
352    // bitwise or non-short-circuiting and (&)  (level 7)
353      final public void andExpression() throws ParseException {
354        equalityExpression();
355        label_6:
356        while (true) {
357          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
358          case 13:
359          case 14:
360            ;
361            break;
362          default:
363            jj_la1[11] = jj_gen;
364            break label_6;
365          }
366          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
367          case 13:
368            jj_consume_token(13);
369            break;
370          case 14:
371            jj_consume_token(14);
372            break;
373          default:
374            jj_la1[12] = jj_gen;
375            jj_consume_token(-1);
376            throw new ParseException();
377          }
378                                               ASTBitAnd jjtn001 = new ASTBitAnd(JJTBITAND);
379                                               boolean jjtc001 = true;
380                                               jjtree.openNodeScope(jjtn001);
381          try {
382            equalityExpression();
383          } catch (Throwable jjte001) {
384                                               if (jjtc001) {
385                                                 jjtree.clearNodeScope(jjtn001);
386                                                 jjtc001 = false;
387                                               } else {
388                                                 jjtree.popNode();
389                                               }
390                                               if (jjte001 instanceof RuntimeException) {
391                                                 {if (true) throw (RuntimeException)jjte001;}
392                                               }
393                                               if (jjte001 instanceof ParseException) {
394                                                 {if (true) throw (ParseException)jjte001;}
395                                               }
396                                               {if (true) throw (Error)jjte001;}
397          } finally {
398                                               if (jjtc001) {
399                                                 jjtree.closeNodeScope(jjtn001,  2);
400                                               }
401          }
402        }
403      }
404    
405    // equality/inequality (==/!=) (level 6)
406      final public void equalityExpression() throws ParseException {
407        relationalExpression();
408        label_7:
409        while (true) {
410          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
411          case 15:
412          case 16:
413          case 17:
414          case 18:
415            ;
416            break;
417          default:
418            jj_la1[13] = jj_gen;
419            break label_7;
420          }
421          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
422          case 15:
423          case 16:
424            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
425            case 15:
426              jj_consume_token(15);
427              break;
428            case 16:
429              jj_consume_token(16);
430              break;
431            default:
432              jj_la1[14] = jj_gen;
433              jj_consume_token(-1);
434              throw new ParseException();
435            }
436                            ASTEq jjtn001 = new ASTEq(JJTEQ);
437                            boolean jjtc001 = true;
438                            jjtree.openNodeScope(jjtn001);
439            try {
440              relationalExpression();
441            } catch (Throwable jjte001) {
442                            if (jjtc001) {
443                              jjtree.clearNodeScope(jjtn001);
444                              jjtc001 = false;
445                            } else {
446                              jjtree.popNode();
447                            }
448                            if (jjte001 instanceof RuntimeException) {
449                              {if (true) throw (RuntimeException)jjte001;}
450                            }
451                            if (jjte001 instanceof ParseException) {
452                              {if (true) throw (ParseException)jjte001;}
453                            }
454                            {if (true) throw (Error)jjte001;}
455            } finally {
456                            if (jjtc001) {
457                              jjtree.closeNodeScope(jjtn001,  2);
458                            }
459            }
460            break;
461          case 17:
462          case 18:
463            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
464            case 17:
465              jj_consume_token(17);
466              break;
467            case 18:
468              jj_consume_token(18);
469              break;
470            default:
471              jj_la1[15] = jj_gen;
472              jj_consume_token(-1);
473              throw new ParseException();
474            }
475                             ASTNotEq jjtn002 = new ASTNotEq(JJTNOTEQ);
476                             boolean jjtc002 = true;
477                             jjtree.openNodeScope(jjtn002);
478            try {
479              relationalExpression();
480            } catch (Throwable jjte002) {
481                             if (jjtc002) {
482                               jjtree.clearNodeScope(jjtn002);
483                               jjtc002 = false;
484                             } else {
485                               jjtree.popNode();
486                             }
487                             if (jjte002 instanceof RuntimeException) {
488                               {if (true) throw (RuntimeException)jjte002;}
489                             }
490                             if (jjte002 instanceof ParseException) {
491                               {if (true) throw (ParseException)jjte002;}
492                             }
493                             {if (true) throw (Error)jjte002;}
494            } finally {
495                             if (jjtc002) {
496                               jjtree.closeNodeScope(jjtn002,  2);
497                             }
498            }
499            break;
500          default:
501            jj_la1[16] = jj_gen;
502            jj_consume_token(-1);
503            throw new ParseException();
504          }
505        }
506      }
507    
508    // boolean relational expressions (level 5)
509      final public void relationalExpression() throws ParseException {
510        shiftExpression();
511        label_8:
512        while (true) {
513          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
514          case 19:
515          case 20:
516          case 21:
517          case 22:
518          case 23:
519          case 24:
520          case 25:
521          case 26:
522          case 27:
523          case 28:
524            ;
525            break;
526          default:
527            jj_la1[17] = jj_gen;
528            break label_8;
529          }
530          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
531          case 19:
532          case 20:
533            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
534            case 19:
535              jj_consume_token(19);
536              break;
537            case 20:
538              jj_consume_token(20);
539              break;
540            default:
541              jj_la1[18] = jj_gen;
542              jj_consume_token(-1);
543              throw new ParseException();
544            }
545                           ASTLess jjtn001 = new ASTLess(JJTLESS);
546                           boolean jjtc001 = true;
547                           jjtree.openNodeScope(jjtn001);
548            try {
549              shiftExpression();
550            } catch (Throwable jjte001) {
551                           if (jjtc001) {
552                             jjtree.clearNodeScope(jjtn001);
553                             jjtc001 = false;
554                           } else {
555                             jjtree.popNode();
556                           }
557                           if (jjte001 instanceof RuntimeException) {
558                             {if (true) throw (RuntimeException)jjte001;}
559                           }
560                           if (jjte001 instanceof ParseException) {
561                             {if (true) throw (ParseException)jjte001;}
562                           }
563                           {if (true) throw (Error)jjte001;}
564            } finally {
565                           if (jjtc001) {
566                             jjtree.closeNodeScope(jjtn001,  2);
567                           }
568            }
569            break;
570          case 21:
571          case 22:
572            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
573            case 21:
574              jj_consume_token(21);
575              break;
576            case 22:
577              jj_consume_token(22);
578              break;
579            default:
580              jj_la1[19] = jj_gen;
581              jj_consume_token(-1);
582              throw new ParseException();
583            }
584                           ASTGreater jjtn002 = new ASTGreater(JJTGREATER);
585                           boolean jjtc002 = true;
586                           jjtree.openNodeScope(jjtn002);
587            try {
588              shiftExpression();
589            } catch (Throwable jjte002) {
590                           if (jjtc002) {
591                             jjtree.clearNodeScope(jjtn002);
592                             jjtc002 = false;
593                           } else {
594                             jjtree.popNode();
595                           }
596                           if (jjte002 instanceof RuntimeException) {
597                             {if (true) throw (RuntimeException)jjte002;}
598                           }
599                           if (jjte002 instanceof ParseException) {
600                             {if (true) throw (ParseException)jjte002;}
601                           }
602                           {if (true) throw (Error)jjte002;}
603            } finally {
604                           if (jjtc002) {
605                             jjtree.closeNodeScope(jjtn002,  2);
606                           }
607            }
608            break;
609          case 23:
610          case 24:
611            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
612            case 23:
613              jj_consume_token(23);
614              break;
615            case 24:
616              jj_consume_token(24);
617              break;
618            default:
619              jj_la1[20] = jj_gen;
620              jj_consume_token(-1);
621              throw new ParseException();
622            }
623                             ASTLessEq jjtn003 = new ASTLessEq(JJTLESSEQ);
624                             boolean jjtc003 = true;
625                             jjtree.openNodeScope(jjtn003);
626            try {
627              shiftExpression();
628            } catch (Throwable jjte003) {
629                             if (jjtc003) {
630                               jjtree.clearNodeScope(jjtn003);
631                               jjtc003 = false;
632                             } else {
633                               jjtree.popNode();
634                             }
635                             if (jjte003 instanceof RuntimeException) {
636                               {if (true) throw (RuntimeException)jjte003;}
637                             }
638                             if (jjte003 instanceof ParseException) {
639                               {if (true) throw (ParseException)jjte003;}
640                             }
641                             {if (true) throw (Error)jjte003;}
642            } finally {
643                             if (jjtc003) {
644                               jjtree.closeNodeScope(jjtn003,  2);
645                             }
646            }
647            break;
648          case 25:
649          case 26:
650            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
651            case 25:
652              jj_consume_token(25);
653              break;
654            case 26:
655              jj_consume_token(26);
656              break;
657            default:
658              jj_la1[21] = jj_gen;
659              jj_consume_token(-1);
660              throw new ParseException();
661            }
662                             ASTGreaterEq jjtn004 = new ASTGreaterEq(JJTGREATEREQ);
663                             boolean jjtc004 = true;
664                             jjtree.openNodeScope(jjtn004);
665            try {
666              shiftExpression();
667            } catch (Throwable jjte004) {
668                             if (jjtc004) {
669                               jjtree.clearNodeScope(jjtn004);
670                               jjtc004 = false;
671                             } else {
672                               jjtree.popNode();
673                             }
674                             if (jjte004 instanceof RuntimeException) {
675                               {if (true) throw (RuntimeException)jjte004;}
676                             }
677                             if (jjte004 instanceof ParseException) {
678                               {if (true) throw (ParseException)jjte004;}
679                             }
680                             {if (true) throw (Error)jjte004;}
681            } finally {
682                             if (jjtc004) {
683                               jjtree.closeNodeScope(jjtn004,  2);
684                             }
685            }
686            break;
687          case 27:
688            jj_consume_token(27);
689                   ASTIn jjtn005 = new ASTIn(JJTIN);
690                   boolean jjtc005 = true;
691                   jjtree.openNodeScope(jjtn005);
692            try {
693              shiftExpression();
694            } catch (Throwable jjte005) {
695                   if (jjtc005) {
696                     jjtree.clearNodeScope(jjtn005);
697                     jjtc005 = false;
698                   } else {
699                     jjtree.popNode();
700                   }
701                   if (jjte005 instanceof RuntimeException) {
702                     {if (true) throw (RuntimeException)jjte005;}
703                   }
704                   if (jjte005 instanceof ParseException) {
705                     {if (true) throw (ParseException)jjte005;}
706                   }
707                   {if (true) throw (Error)jjte005;}
708            } finally {
709                   if (jjtc005) {
710                     jjtree.closeNodeScope(jjtn005,  2);
711                   }
712            }
713            break;
714          case 28:
715            jj_consume_token(28);
716            jj_consume_token(27);
717                         ASTNotIn jjtn006 = new ASTNotIn(JJTNOTIN);
718                         boolean jjtc006 = true;
719                         jjtree.openNodeScope(jjtn006);
720            try {
721              shiftExpression();
722            } catch (Throwable jjte006) {
723                         if (jjtc006) {
724                           jjtree.clearNodeScope(jjtn006);
725                           jjtc006 = false;
726                         } else {
727                           jjtree.popNode();
728                         }
729                         if (jjte006 instanceof RuntimeException) {
730                           {if (true) throw (RuntimeException)jjte006;}
731                         }
732                         if (jjte006 instanceof ParseException) {
733                           {if (true) throw (ParseException)jjte006;}
734                         }
735                         {if (true) throw (Error)jjte006;}
736            } finally {
737                         if (jjtc006) {
738                           jjtree.closeNodeScope(jjtn006,  2);
739                         }
740            }
741            break;
742          default:
743            jj_la1[22] = jj_gen;
744            jj_consume_token(-1);
745            throw new ParseException();
746          }
747        }
748      }
749    
750    // bit shift expressions (level 4)
751      final public void shiftExpression() throws ParseException {
752        additiveExpression();
753        label_9:
754        while (true) {
755          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
756          case 29:
757          case 30:
758          case 31:
759          case 32:
760          case 33:
761          case 34:
762            ;
763            break;
764          default:
765            jj_la1[23] = jj_gen;
766            break label_9;
767          }
768          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
769          case 29:
770          case 30:
771            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
772            case 29:
773              jj_consume_token(29);
774              break;
775            case 30:
776              jj_consume_token(30);
777              break;
778            default:
779              jj_la1[24] = jj_gen;
780              jj_consume_token(-1);
781              throw new ParseException();
782            }
783                             ASTShiftLeft jjtn001 = new ASTShiftLeft(JJTSHIFTLEFT);
784                             boolean jjtc001 = true;
785                             jjtree.openNodeScope(jjtn001);
786            try {
787              additiveExpression();
788            } catch (Throwable jjte001) {
789                             if (jjtc001) {
790                               jjtree.clearNodeScope(jjtn001);
791                               jjtc001 = false;
792                             } else {
793                               jjtree.popNode();
794                             }
795                             if (jjte001 instanceof RuntimeException) {
796                               {if (true) throw (RuntimeException)jjte001;}
797                             }
798                             if (jjte001 instanceof ParseException) {
799                               {if (true) throw (ParseException)jjte001;}
800                             }
801                             {if (true) throw (Error)jjte001;}
802            } finally {
803                             if (jjtc001) {
804                               jjtree.closeNodeScope(jjtn001,  2);
805                             }
806            }
807            break;
808          case 31:
809          case 32:
810            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
811            case 31:
812              jj_consume_token(31);
813              break;
814            case 32:
815              jj_consume_token(32);
816              break;
817            default:
818              jj_la1[25] = jj_gen;
819              jj_consume_token(-1);
820              throw new ParseException();
821            }
822                             ASTShiftRight jjtn002 = new ASTShiftRight(JJTSHIFTRIGHT);
823                             boolean jjtc002 = true;
824                             jjtree.openNodeScope(jjtn002);
825            try {
826              additiveExpression();
827            } catch (Throwable jjte002) {
828                             if (jjtc002) {
829                               jjtree.clearNodeScope(jjtn002);
830                               jjtc002 = false;
831                             } else {
832                               jjtree.popNode();
833                             }
834                             if (jjte002 instanceof RuntimeException) {
835                               {if (true) throw (RuntimeException)jjte002;}
836                             }
837                             if (jjte002 instanceof ParseException) {
838                               {if (true) throw (ParseException)jjte002;}
839                             }
840                             {if (true) throw (Error)jjte002;}
841            } finally {
842                             if (jjtc002) {
843                               jjtree.closeNodeScope(jjtn002,  2);
844                             }
845            }
846            break;
847          case 33:
848          case 34:
849            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
850            case 33:
851              jj_consume_token(33);
852              break;
853            case 34:
854              jj_consume_token(34);
855              break;
856            default:
857              jj_la1[26] = jj_gen;
858              jj_consume_token(-1);
859              throw new ParseException();
860            }
861                               ASTUnsignedShiftRight jjtn003 = new ASTUnsignedShiftRight(JJTUNSIGNEDSHIFTRIGHT);
862                               boolean jjtc003 = true;
863                               jjtree.openNodeScope(jjtn003);
864            try {
865              additiveExpression();
866            } catch (Throwable jjte003) {
867                               if (jjtc003) {
868                                 jjtree.clearNodeScope(jjtn003);
869                                 jjtc003 = false;
870                               } else {
871                                 jjtree.popNode();
872                               }
873                               if (jjte003 instanceof RuntimeException) {
874                                 {if (true) throw (RuntimeException)jjte003;}
875                               }
876                               if (jjte003 instanceof ParseException) {
877                                 {if (true) throw (ParseException)jjte003;}
878                               }
879                               {if (true) throw (Error)jjte003;}
880            } finally {
881                               if (jjtc003) {
882                                 jjtree.closeNodeScope(jjtn003,  2);
883                               }
884            }
885            break;
886          default:
887            jj_la1[27] = jj_gen;
888            jj_consume_token(-1);
889            throw new ParseException();
890          }
891        }
892      }
893    
894    // binary addition/subtraction (level 3)
895      final public void additiveExpression() throws ParseException {
896        multiplicativeExpression();
897        label_10:
898        while (true) {
899          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
900          case 35:
901          case 36:
902            ;
903            break;
904          default:
905            jj_la1[28] = jj_gen;
906            break label_10;
907          }
908          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
909          case 35:
910            jj_consume_token(35);
911                  ASTAdd jjtn001 = new ASTAdd(JJTADD);
912                  boolean jjtc001 = true;
913                  jjtree.openNodeScope(jjtn001);
914            try {
915              multiplicativeExpression();
916            } catch (Throwable jjte001) {
917                  if (jjtc001) {
918                    jjtree.clearNodeScope(jjtn001);
919                    jjtc001 = false;
920                  } else {
921                    jjtree.popNode();
922                  }
923                  if (jjte001 instanceof RuntimeException) {
924                    {if (true) throw (RuntimeException)jjte001;}
925                  }
926                  if (jjte001 instanceof ParseException) {
927                    {if (true) throw (ParseException)jjte001;}
928                  }
929                  {if (true) throw (Error)jjte001;}
930            } finally {
931                  if (jjtc001) {
932                    jjtree.closeNodeScope(jjtn001,  2);
933                  }
934            }
935            break;
936          case 36:
937            jj_consume_token(36);
938                  ASTSubtract jjtn002 = new ASTSubtract(JJTSUBTRACT);
939                  boolean jjtc002 = true;
940                  jjtree.openNodeScope(jjtn002);
941            try {
942              multiplicativeExpression();
943            } catch (Throwable jjte002) {
944                  if (jjtc002) {
945                    jjtree.clearNodeScope(jjtn002);
946                    jjtc002 = false;
947                  } else {
948                    jjtree.popNode();
949                  }
950                  if (jjte002 instanceof RuntimeException) {
951                    {if (true) throw (RuntimeException)jjte002;}
952                  }
953                  if (jjte002 instanceof ParseException) {
954                    {if (true) throw (ParseException)jjte002;}
955                  }
956                  {if (true) throw (Error)jjte002;}
957            } finally {
958                  if (jjtc002) {
959                    jjtree.closeNodeScope(jjtn002,  2);
960                  }
961            }
962            break;
963          default:
964            jj_la1[29] = jj_gen;
965            jj_consume_token(-1);
966            throw new ParseException();
967          }
968        }
969      }
970    
971    // multiplication/division/remainder (level 2)
972      final public void multiplicativeExpression() throws ParseException {
973        unaryExpression();
974        label_11:
975        while (true) {
976          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
977          case 37:
978          case 38:
979          case 39:
980            ;
981            break;
982          default:
983            jj_la1[30] = jj_gen;
984            break label_11;
985          }
986          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
987          case 37:
988            jj_consume_token(37);
989                  ASTMultiply jjtn001 = new ASTMultiply(JJTMULTIPLY);
990                  boolean jjtc001 = true;
991                  jjtree.openNodeScope(jjtn001);
992            try {
993              unaryExpression();
994            } catch (Throwable jjte001) {
995                  if (jjtc001) {
996                    jjtree.clearNodeScope(jjtn001);
997                    jjtc001 = false;
998                  } else {
999                    jjtree.popNode();
1000                  }
1001                  if (jjte001 instanceof RuntimeException) {
1002                    {if (true) throw (RuntimeException)jjte001;}
1003                  }
1004                  if (jjte001 instanceof ParseException) {
1005                    {if (true) throw (ParseException)jjte001;}
1006                  }
1007                  {if (true) throw (Error)jjte001;}
1008            } finally {
1009                  if (jjtc001) {
1010                    jjtree.closeNodeScope(jjtn001,  2);
1011                  }
1012            }
1013            break;
1014          case 38:
1015            jj_consume_token(38);
1016                  ASTDivide jjtn002 = new ASTDivide(JJTDIVIDE);
1017                  boolean jjtc002 = true;
1018                  jjtree.openNodeScope(jjtn002);
1019            try {
1020              unaryExpression();
1021            } catch (Throwable jjte002) {
1022                  if (jjtc002) {
1023                    jjtree.clearNodeScope(jjtn002);
1024                    jjtc002 = false;
1025                  } else {
1026                    jjtree.popNode();
1027                  }
1028                  if (jjte002 instanceof RuntimeException) {
1029                    {if (true) throw (RuntimeException)jjte002;}
1030                  }
1031                  if (jjte002 instanceof ParseException) {
1032                    {if (true) throw (ParseException)jjte002;}
1033                  }
1034                  {if (true) throw (Error)jjte002;}
1035            } finally {
1036                  if (jjtc002) {
1037                    jjtree.closeNodeScope(jjtn002,  2);
1038                  }
1039            }
1040            break;
1041          case 39:
1042            jj_consume_token(39);
1043                  ASTRemainder jjtn003 = new ASTRemainder(JJTREMAINDER);
1044                  boolean jjtc003 = true;
1045                  jjtree.openNodeScope(jjtn003);
1046            try {
1047              unaryExpression();
1048            } catch (Throwable jjte003) {
1049                  if (jjtc003) {
1050                    jjtree.clearNodeScope(jjtn003);
1051                    jjtc003 = false;
1052                  } else {
1053                    jjtree.popNode();
1054                  }
1055                  if (jjte003 instanceof RuntimeException) {
1056                    {if (true) throw (RuntimeException)jjte003;}
1057                  }
1058                  if (jjte003 instanceof ParseException) {
1059                    {if (true) throw (ParseException)jjte003;}
1060                  }
1061                  {if (true) throw (Error)jjte003;}
1062            } finally {
1063                  if (jjtc003) {
1064                    jjtree.closeNodeScope(jjtn003,  2);
1065                  }
1066            }
1067            break;
1068          default:
1069            jj_la1[31] = jj_gen;
1070            jj_consume_token(-1);
1071            throw new ParseException();
1072          }
1073        }
1074      }
1075    
1076    // unary (level 1)
1077      final public void unaryExpression() throws ParseException {
1078        StringBuilder stringBuilder;
1079        Token token;
1080        ASTInstanceof ionode;
1081        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1082        case 36:
1083          jj_consume_token(36);
1084                  ASTNegate jjtn001 = new ASTNegate(JJTNEGATE);
1085                  boolean jjtc001 = true;
1086                  jjtree.openNodeScope(jjtn001);
1087          try {
1088            unaryExpression();
1089          } catch (Throwable jjte001) {
1090                  if (jjtc001) {
1091                    jjtree.clearNodeScope(jjtn001);
1092                    jjtc001 = false;
1093                  } else {
1094                    jjtree.popNode();
1095                  }
1096                  if (jjte001 instanceof RuntimeException) {
1097                    {if (true) throw (RuntimeException)jjte001;}
1098                  }
1099                  if (jjte001 instanceof ParseException) {
1100                    {if (true) throw (ParseException)jjte001;}
1101                  }
1102                  {if (true) throw (Error)jjte001;}
1103          } finally {
1104                  if (jjtc001) {
1105                    jjtree.closeNodeScope(jjtn001,  1);
1106                  }
1107          }
1108          break;
1109        case 35:
1110          jj_consume_token(35);
1111          unaryExpression();
1112          break;
1113        case 40:
1114          jj_consume_token(40);
1115                  ASTBitNegate jjtn002 = new ASTBitNegate(JJTBITNEGATE);
1116                  boolean jjtc002 = true;
1117                  jjtree.openNodeScope(jjtn002);
1118          try {
1119            unaryExpression();
1120          } catch (Throwable jjte002) {
1121                  if (jjtc002) {
1122                    jjtree.clearNodeScope(jjtn002);
1123                    jjtc002 = false;
1124                  } else {
1125                    jjtree.popNode();
1126                  }
1127                  if (jjte002 instanceof RuntimeException) {
1128                    {if (true) throw (RuntimeException)jjte002;}
1129                  }
1130                  if (jjte002 instanceof ParseException) {
1131                    {if (true) throw (ParseException)jjte002;}
1132                  }
1133                  {if (true) throw (Error)jjte002;}
1134          } finally {
1135                  if (jjtc002) {
1136                    jjtree.closeNodeScope(jjtn002,  1);
1137                  }
1138          }
1139          break;
1140        case 28:
1141        case 41:
1142          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1143          case 41:
1144            jj_consume_token(41);
1145            break;
1146          case 28:
1147            jj_consume_token(28);
1148            break;
1149          default:
1150            jj_la1[32] = jj_gen;
1151            jj_consume_token(-1);
1152            throw new ParseException();
1153          }
1154                            ASTNot jjtn003 = new ASTNot(JJTNOT);
1155                            boolean jjtc003 = true;
1156                            jjtree.openNodeScope(jjtn003);
1157          try {
1158            unaryExpression();
1159          } catch (Throwable jjte003) {
1160                            if (jjtc003) {
1161                              jjtree.clearNodeScope(jjtn003);
1162                              jjtc003 = false;
1163                            } else {
1164                              jjtree.popNode();
1165                            }
1166                            if (jjte003 instanceof RuntimeException) {
1167                              {if (true) throw (RuntimeException)jjte003;}
1168                            }
1169                            if (jjte003 instanceof ParseException) {
1170                              {if (true) throw (ParseException)jjte003;}
1171                            }
1172                            {if (true) throw (Error)jjte003;}
1173          } finally {
1174                            if (jjtc003) {
1175                              jjtree.closeNodeScope(jjtn003,  1);
1176                            }
1177          }
1178          break;
1179        case 4:
1180        case 44:
1181        case 46:
1182        case 47:
1183        case 48:
1184        case 49:
1185        case 50:
1186        case 51:
1187        case 52:
1188        case 54:
1189        case 56:
1190        case 57:
1191        case IDENT:
1192        case DYNAMIC_SUBSCRIPT:
1193        case CHAR_LITERAL:
1194        case BACK_CHAR_LITERAL:
1195        case STRING_LITERAL:
1196        case INT_LITERAL:
1197        case FLT_LITERAL:
1198          navigationChain();
1199          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1200          case 42:
1201            jj_consume_token(42);
1202            token = jj_consume_token(IDENT);
1203                               ASTInstanceof jjtn004 = new ASTInstanceof(JJTINSTANCEOF);
1204                               boolean jjtc004 = true;
1205                               jjtree.openNodeScope(jjtn004);
1206            try {
1207                               jjtree.closeNodeScope(jjtn004,  1);
1208                               jjtc004 = false;
1209                                   stringBuilder = new StringBuilder(token.image); ionode = jjtn004;
1210            } finally {
1211                               if (jjtc004) {
1212                                 jjtree.closeNodeScope(jjtn004,  1);
1213                               }
1214            }
1215            label_12:
1216            while (true) {
1217              switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1218              case 43:
1219                ;
1220                break;
1221              default:
1222                jj_la1[33] = jj_gen;
1223                break label_12;
1224              }
1225              jj_consume_token(43);
1226              token = jj_consume_token(IDENT);
1227                                                  stringBuilder.append('.').append( token.image );
1228            }
1229                                              ionode.setTargetType( stringBuilder.toString() );
1230            break;
1231          default:
1232            jj_la1[34] = jj_gen;
1233            ;
1234          }
1235          break;
1236        default:
1237          jj_la1[35] = jj_gen;
1238          jj_consume_token(-1);
1239          throw new ParseException();
1240        }
1241      }
1242    
1243    // navigation chain: property references, method calls, projections, selections, etc.
1244      final public void navigationChain() throws ParseException {
1245        primaryExpression();
1246        label_13:
1247        while (true) {
1248          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1249          case 43:
1250          case 44:
1251          case 52:
1252          case DYNAMIC_SUBSCRIPT:
1253            ;
1254            break;
1255          default:
1256            jj_la1[36] = jj_gen;
1257            break label_13;
1258          }
1259          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1260          case 43:
1261            jj_consume_token(43);
1262              ASTChain jjtn001 = new ASTChain(JJTCHAIN);
1263              boolean jjtc001 = true;
1264              jjtree.openNodeScope(jjtn001);
1265            try {
1266              switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1267              case IDENT:
1268                if (jj_2_1(2)) {
1269                  methodCall();
1270                } else {
1271                  switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1272                  case IDENT:
1273                    propertyName();
1274                    break;
1275                  default:
1276                    jj_la1[37] = jj_gen;
1277                    jj_consume_token(-1);
1278                    throw new ParseException();
1279                  }
1280                }
1281                break;
1282              case 54:
1283                if (jj_2_2(2)) {
1284                  projection();
1285                } else {
1286                  switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1287                  case 54:
1288                    selection();
1289                    break;
1290                  default:
1291                    jj_la1[38] = jj_gen;
1292                    jj_consume_token(-1);
1293                    throw new ParseException();
1294                  }
1295                }
1296                break;
1297              case 44:
1298                jj_consume_token(44);
1299                expression();
1300                jj_consume_token(45);
1301                break;
1302              default:
1303                jj_la1[39] = jj_gen;
1304                jj_consume_token(-1);
1305                throw new ParseException();
1306              }
1307            } catch (Throwable jjte001) {
1308              if (jjtc001) {
1309                jjtree.clearNodeScope(jjtn001);
1310                jjtc001 = false;
1311              } else {
1312                jjtree.popNode();
1313              }
1314              if (jjte001 instanceof RuntimeException) {
1315                {if (true) throw (RuntimeException)jjte001;}
1316              }
1317              if (jjte001 instanceof ParseException) {
1318                {if (true) throw (ParseException)jjte001;}
1319              }
1320              {if (true) throw (Error)jjte001;}
1321            } finally {
1322              if (jjtc001) {
1323                jjtree.closeNodeScope(jjtn001,  2);
1324              }
1325            }
1326            break;
1327          case 52:
1328          case DYNAMIC_SUBSCRIPT:
1329              ASTChain jjtn002 = new ASTChain(JJTCHAIN);
1330              boolean jjtc002 = true;
1331              jjtree.openNodeScope(jjtn002);
1332            try {
1333              index();
1334            } catch (Throwable jjte002) {
1335              if (jjtc002) {
1336                jjtree.clearNodeScope(jjtn002);
1337                jjtc002 = false;
1338              } else {
1339                jjtree.popNode();
1340              }
1341              if (jjte002 instanceof RuntimeException) {
1342                {if (true) throw (RuntimeException)jjte002;}
1343              }
1344              if (jjte002 instanceof ParseException) {
1345                {if (true) throw (ParseException)jjte002;}
1346              }
1347              {if (true) throw (Error)jjte002;}
1348            } finally {
1349              if (jjtc002) {
1350                jjtree.closeNodeScope(jjtn002,  2);
1351              }
1352            }
1353            break;
1354          case 44:
1355            jj_consume_token(44);
1356            expression();
1357                               ASTEval jjtn003 = new ASTEval(JJTEVAL);
1358                               boolean jjtc003 = true;
1359                               jjtree.openNodeScope(jjtn003);
1360            try {
1361              jj_consume_token(45);
1362            } finally {
1363                               if (jjtc003) {
1364                                 jjtree.closeNodeScope(jjtn003,  2);
1365                               }
1366            }
1367            break;
1368          default:
1369            jj_la1[40] = jj_gen;
1370            jj_consume_token(-1);
1371            throw new ParseException();
1372          }
1373        }
1374      }
1375    
1376      final public void primaryExpression() throws ParseException {
1377        Token   token;
1378        String  className = null;
1379        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1380        case CHAR_LITERAL:
1381        case BACK_CHAR_LITERAL:
1382        case STRING_LITERAL:
1383        case INT_LITERAL:
1384        case FLT_LITERAL:
1385          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1386          case CHAR_LITERAL:
1387            jj_consume_token(CHAR_LITERAL);
1388            break;
1389          case BACK_CHAR_LITERAL:
1390            jj_consume_token(BACK_CHAR_LITERAL);
1391            break;
1392          case STRING_LITERAL:
1393            jj_consume_token(STRING_LITERAL);
1394            break;
1395          case INT_LITERAL:
1396            jj_consume_token(INT_LITERAL);
1397            break;
1398          case FLT_LITERAL:
1399            jj_consume_token(FLT_LITERAL);
1400            break;
1401          default:
1402            jj_la1[41] = jj_gen;
1403            jj_consume_token(-1);
1404            throw new ParseException();
1405          }
1406                                                      ASTConst jjtn001 = new ASTConst(JJTCONST);
1407                                                      boolean jjtc001 = true;
1408                                                      jjtree.openNodeScope(jjtn001);
1409          try {
1410                                                      jjtree.closeNodeScope(jjtn001,  0);
1411                                                      jjtc001 = false;
1412                                                      jjtn001.setValue( token_source.literalValue );
1413          } finally {
1414                                                      if (jjtc001) {
1415                                                        jjtree.closeNodeScope(jjtn001,  0);
1416                                                      }
1417          }
1418          break;
1419        case 46:
1420          jj_consume_token(46);
1421                                                      ASTConst jjtn002 = new ASTConst(JJTCONST);
1422                                                      boolean jjtc002 = true;
1423                                                      jjtree.openNodeScope(jjtn002);
1424          try {
1425                                                      jjtree.closeNodeScope(jjtn002,  0);
1426                                                      jjtc002 = false;
1427                                                      jjtn002.setValue( Boolean.TRUE );
1428          } finally {
1429                                                      if (jjtc002) {
1430                                                        jjtree.closeNodeScope(jjtn002,  0);
1431                                                      }
1432          }
1433          break;
1434        case 47:
1435          jj_consume_token(47);
1436                                                      ASTConst jjtn003 = new ASTConst(JJTCONST);
1437                                                      boolean jjtc003 = true;
1438                                                      jjtree.openNodeScope(jjtn003);
1439          try {
1440                                                      jjtree.closeNodeScope(jjtn003,  0);
1441                                                      jjtc003 = false;
1442                                                      jjtn003.setValue( Boolean.FALSE );
1443          } finally {
1444                                                      if (jjtc003) {
1445                                                        jjtree.closeNodeScope(jjtn003,  0);
1446                                                      }
1447          }
1448          break;
1449        case 48:
1450              ASTConst jjtn004 = new ASTConst(JJTCONST);
1451              boolean jjtc004 = true;
1452              jjtree.openNodeScope(jjtn004);
1453          try {
1454            jj_consume_token(48);
1455          } finally {
1456              if (jjtc004) {
1457                jjtree.closeNodeScope(jjtn004,  0);
1458              }
1459          }
1460          break;
1461        default:
1462          jj_la1[48] = jj_gen;
1463          if (jj_2_4(2)) {
1464            jj_consume_token(49);
1465                                                   ASTThisVarRef jjtn005 = new ASTThisVarRef(JJTTHISVARREF);
1466                                                   boolean jjtc005 = true;
1467                                                   jjtree.openNodeScope(jjtn005);
1468            try {
1469                                                   jjtree.closeNodeScope(jjtn005,  0);
1470                                                   jjtc005 = false;
1471                                                   jjtn005.setName( "this" );
1472            } finally {
1473                                                   if (jjtc005) {
1474                                                     jjtree.closeNodeScope(jjtn005,  0);
1475                                                   }
1476            }
1477          } else if (jj_2_5(2)) {
1478            jj_consume_token(50);
1479                                                   ASTRootVarRef jjtn006 = new ASTRootVarRef(JJTROOTVARREF);
1480                                                   boolean jjtc006 = true;
1481                                                   jjtree.openNodeScope(jjtn006);
1482            try {
1483                                                   jjtree.closeNodeScope(jjtn006,  0);
1484                                                   jjtc006 = false;
1485                                                   jjtn006.setName( "root" );
1486            } finally {
1487                                                   if (jjtc006) {
1488                                                     jjtree.closeNodeScope(jjtn006,  0);
1489                                                   }
1490            }
1491          } else if (jj_2_6(2)) {
1492            jj_consume_token(51);
1493            token = jj_consume_token(IDENT);
1494                                                      ASTVarRef jjtn007 = new ASTVarRef(JJTVARREF);
1495                                                      boolean jjtc007 = true;
1496                                                      jjtree.openNodeScope(jjtn007);
1497            try {
1498                                                      jjtree.closeNodeScope(jjtn007,  0);
1499                                                      jjtc007 = false;
1500                                                          jjtn007.setName( token.image );
1501            } finally {
1502                                                      if (jjtc007) {
1503                                                        jjtree.closeNodeScope(jjtn007,  0);
1504                                                      }
1505            }
1506          } else if (jj_2_7(2)) {
1507            jj_consume_token(4);
1508            jj_consume_token(52);
1509            expression();
1510            jj_consume_token(53);
1511                                                      ASTConst jjtn008 = new ASTConst(JJTCONST);
1512                                                      boolean jjtc008 = true;
1513                                                      jjtree.openNodeScope(jjtn008);
1514            try {
1515                                                      jjtree.closeNodeScope(jjtn008,  1);
1516                                                      jjtc008 = false;
1517                                                      jjtn008.setValue( jjtn008.jjtGetChild(0) );
1518            } finally {
1519                                                      if (jjtc008) {
1520                                                        jjtree.closeNodeScope(jjtn008,  1);
1521                                                      }
1522            }
1523          } else {
1524            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1525            case 56:
1526              staticReference();
1527              break;
1528            default:
1529              jj_la1[49] = jj_gen;
1530              if (jj_2_8(2)) {
1531                constructorCall();
1532              } else {
1533                switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1534                case IDENT:
1535                  if (jj_2_3(2)) {
1536                    methodCall();
1537                  } else {
1538                    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1539                    case IDENT:
1540                      propertyName();
1541                      break;
1542                    default:
1543                      jj_la1[42] = jj_gen;
1544                      jj_consume_token(-1);
1545                      throw new ParseException();
1546                    }
1547                  }
1548                  break;
1549                case 52:
1550                case DYNAMIC_SUBSCRIPT:
1551                  index();
1552                  break;
1553                case 44:
1554                  jj_consume_token(44);
1555                  expression();
1556                  jj_consume_token(45);
1557                  break;
1558                case 54:
1559                  jj_consume_token(54);
1560                  ASTList jjtn009 = new ASTList(JJTLIST);
1561                  boolean jjtc009 = true;
1562                  jjtree.openNodeScope(jjtn009);
1563                  try {
1564                    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1565                    case 4:
1566                    case 28:
1567                    case 35:
1568                    case 36:
1569                    case 40:
1570                    case 41:
1571                    case 44:
1572                    case 46:
1573                    case 47:
1574                    case 48:
1575                    case 49:
1576                    case 50:
1577                    case 51:
1578                    case 52:
1579                    case 54:
1580                    case 56:
1581                    case 57:
1582                    case IDENT:
1583                    case DYNAMIC_SUBSCRIPT:
1584                    case CHAR_LITERAL:
1585                    case BACK_CHAR_LITERAL:
1586                    case STRING_LITERAL:
1587                    case INT_LITERAL:
1588                    case FLT_LITERAL:
1589                      assignmentExpression();
1590                      label_14:
1591                      while (true) {
1592                        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1593                        case 1:
1594                          ;
1595                          break;
1596                        default:
1597                          jj_la1[43] = jj_gen;
1598                          break label_14;
1599                        }
1600                        jj_consume_token(1);
1601                        assignmentExpression();
1602                      }
1603                      break;
1604                    default:
1605                      jj_la1[44] = jj_gen;
1606                      ;
1607                    }
1608                  } catch (Throwable jjte009) {
1609                  if (jjtc009) {
1610                    jjtree.clearNodeScope(jjtn009);
1611                    jjtc009 = false;
1612                  } else {
1613                    jjtree.popNode();
1614                  }
1615                  if (jjte009 instanceof RuntimeException) {
1616                    {if (true) throw (RuntimeException)jjte009;}
1617                  }
1618                  if (jjte009 instanceof ParseException) {
1619                    {if (true) throw (ParseException)jjte009;}
1620                  }
1621                  {if (true) throw (Error)jjte009;}
1622                  } finally {
1623                  if (jjtc009) {
1624                    jjtree.closeNodeScope(jjtn009, true);
1625                  }
1626                  }
1627                  jj_consume_token(55);
1628                  break;
1629                default:
1630                  jj_la1[50] = jj_gen;
1631                  if (jj_2_9(2)) {
1632                           ASTMap jjtn010 = new ASTMap(JJTMAP);
1633                           boolean jjtc010 = true;
1634                           jjtree.openNodeScope(jjtn010);
1635                    try {
1636                      jj_consume_token(51);
1637                      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1638                      case 56:
1639                        className = classReference();
1640                        break;
1641                      default:
1642                        jj_la1[45] = jj_gen;
1643                        ;
1644                      }
1645                      jj_consume_token(54);
1646                      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1647                      case 4:
1648                      case 28:
1649                      case 35:
1650                      case 36:
1651                      case 40:
1652                      case 41:
1653                      case 44:
1654                      case 46:
1655                      case 47:
1656                      case 48:
1657                      case 49:
1658                      case 50:
1659                      case 51:
1660                      case 52:
1661                      case 54:
1662                      case 56:
1663                      case 57:
1664                      case IDENT:
1665                      case DYNAMIC_SUBSCRIPT:
1666                      case CHAR_LITERAL:
1667                      case BACK_CHAR_LITERAL:
1668                      case STRING_LITERAL:
1669                      case INT_LITERAL:
1670                      case FLT_LITERAL:
1671                        keyValueExpression();
1672                        label_15:
1673                        while (true) {
1674                          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1675                          case 1:
1676                            ;
1677                            break;
1678                          default:
1679                            jj_la1[46] = jj_gen;
1680                            break label_15;
1681                          }
1682                          jj_consume_token(1);
1683                          keyValueExpression();
1684                        }
1685                        break;
1686                      default:
1687                        jj_la1[47] = jj_gen;
1688                        ;
1689                      }
1690                                                                                                                      jjtn010.setClassName(className);
1691                      jj_consume_token(55);
1692                    } catch (Throwable jjte010) {
1693                           if (jjtc010) {
1694                             jjtree.clearNodeScope(jjtn010);
1695                             jjtc010 = false;
1696                           } else {
1697                             jjtree.popNode();
1698                           }
1699                           if (jjte010 instanceof RuntimeException) {
1700                             {if (true) throw (RuntimeException)jjte010;}
1701                           }
1702                           if (jjte010 instanceof ParseException) {
1703                             {if (true) throw (ParseException)jjte010;}
1704                           }
1705                           {if (true) throw (Error)jjte010;}
1706                    } finally {
1707                           if (jjtc010) {
1708                             jjtree.closeNodeScope(jjtn010, true);
1709                           }
1710                    }
1711                  } else {
1712                    jj_consume_token(-1);
1713                    throw new ParseException();
1714                  }
1715                }
1716              }
1717            }
1718          }
1719        }
1720      }
1721    
1722      final public void keyValueExpression() throws ParseException {
1723              ASTKeyValue jjtn001 = new ASTKeyValue(JJTKEYVALUE);
1724              boolean jjtc001 = true;
1725              jjtree.openNodeScope(jjtn001);
1726        try {
1727          assignmentExpression();
1728          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1729          case 4:
1730            jj_consume_token(4);
1731            assignmentExpression();
1732            break;
1733          default:
1734            jj_la1[51] = jj_gen;
1735            ;
1736          }
1737        } catch (Throwable jjte001) {
1738              if (jjtc001) {
1739                jjtree.clearNodeScope(jjtn001);
1740                jjtc001 = false;
1741              } else {
1742                jjtree.popNode();
1743              }
1744              if (jjte001 instanceof RuntimeException) {
1745                {if (true) throw (RuntimeException)jjte001;}
1746              }
1747              if (jjte001 instanceof ParseException) {
1748                {if (true) throw (ParseException)jjte001;}
1749              }
1750              {if (true) throw (Error)jjte001;}
1751        } finally {
1752              if (jjtc001) {
1753                jjtree.closeNodeScope(jjtn001, true);
1754              }
1755        }
1756      }
1757    
1758      final public void staticReference() throws ParseException {
1759        String className = "java.lang.Math";
1760        Token token;
1761        className = classReference();
1762        if (jj_2_10(2)) {
1763          staticMethodCall(className);
1764        } else {
1765          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1766          case IDENT:
1767            token = jj_consume_token(IDENT);
1768                                          ASTStaticField jjtn001 = new ASTStaticField(JJTSTATICFIELD);
1769                                          boolean jjtc001 = true;
1770                                          jjtree.openNodeScope(jjtn001);
1771            try {
1772                                          jjtree.closeNodeScope(jjtn001,  0);
1773                                          jjtc001 = false;
1774                                              jjtn001.init( className, token.image );
1775            } finally {
1776                                          if (jjtc001) {
1777                                            jjtree.closeNodeScope(jjtn001,  0);
1778                                          }
1779            }
1780            break;
1781          default:
1782            jj_la1[52] = jj_gen;
1783            jj_consume_token(-1);
1784            throw new ParseException();
1785          }
1786        }
1787      }
1788    
1789      final public String classReference() throws ParseException {
1790        String      result = "java.lang.Math";
1791        jj_consume_token(56);
1792        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1793        case IDENT:
1794          result = className();
1795          break;
1796        default:
1797          jj_la1[53] = jj_gen;
1798          ;
1799        }
1800        jj_consume_token(56);
1801                                          {if (true) return result;}
1802        throw new Error("Missing return statement in function");
1803      }
1804    
1805      final public String className() throws ParseException {
1806        Token token;
1807        StringBuilder result;
1808        token = jj_consume_token(IDENT);
1809                                      result = new StringBuilder( token.image );
1810        label_16:
1811        while (true) {
1812          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1813          case 43:
1814            ;
1815            break;
1816          default:
1817            jj_la1[54] = jj_gen;
1818            break label_16;
1819          }
1820          jj_consume_token(43);
1821          token = jj_consume_token(IDENT);
1822                                      result.append('.').append( token.image );
1823        }
1824                                  {if (true) return result.toString();}
1825        throw new Error("Missing return statement in function");
1826      }
1827    
1828      final public void constructorCall() throws ParseException {
1829                                    /*@bgen(jjtree) Ctor */
1830        ASTCtor jjtn000 = new ASTCtor(JJTCTOR);
1831        boolean jjtc000 = true;
1832        jjtree.openNodeScope(jjtn000);String className;
1833        Token token;
1834        StringBuilder stringBuilder;
1835        try {
1836          jj_consume_token(57);
1837          className = className();
1838          if (jj_2_11(2)) {
1839            jj_consume_token(44);
1840            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1841            case 4:
1842            case 28:
1843            case 35:
1844            case 36:
1845            case 40:
1846            case 41:
1847            case 44:
1848            case 46:
1849            case 47:
1850            case 48:
1851            case 49:
1852            case 50:
1853            case 51:
1854            case 52:
1855            case 54:
1856            case 56:
1857            case 57:
1858            case IDENT:
1859            case DYNAMIC_SUBSCRIPT:
1860            case CHAR_LITERAL:
1861            case BACK_CHAR_LITERAL:
1862            case STRING_LITERAL:
1863            case INT_LITERAL:
1864            case FLT_LITERAL:
1865              assignmentExpression();
1866              label_17:
1867              while (true) {
1868                switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1869                case 1:
1870                  ;
1871                  break;
1872                default:
1873                  jj_la1[55] = jj_gen;
1874                  break label_17;
1875                }
1876                jj_consume_token(1);
1877                assignmentExpression();
1878              }
1879              break;
1880            default:
1881              jj_la1[56] = jj_gen;
1882              ;
1883            }
1884            jj_consume_token(45);
1885                          jjtree.closeNodeScope(jjtn000, true);
1886                          jjtc000 = false;
1887                            jjtn000.setClassName(className);
1888          } else if (jj_2_12(2)) {
1889            jj_consume_token(52);
1890            jj_consume_token(53);
1891            jj_consume_token(54);
1892                                  ASTList jjtn001 = new ASTList(JJTLIST);
1893                                  boolean jjtc001 = true;
1894                                  jjtree.openNodeScope(jjtn001);
1895            try {
1896              switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1897              case 4:
1898              case 28:
1899              case 35:
1900              case 36:
1901              case 40:
1902              case 41:
1903              case 44:
1904              case 46:
1905              case 47:
1906              case 48:
1907              case 49:
1908              case 50:
1909              case 51:
1910              case 52:
1911              case 54:
1912              case 56:
1913              case 57:
1914              case IDENT:
1915              case DYNAMIC_SUBSCRIPT:
1916              case CHAR_LITERAL:
1917              case BACK_CHAR_LITERAL:
1918              case STRING_LITERAL:
1919              case INT_LITERAL:
1920              case FLT_LITERAL:
1921                assignmentExpression();
1922                label_18:
1923                while (true) {
1924                  switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1925                  case 1:
1926                    ;
1927                    break;
1928                  default:
1929                    jj_la1[57] = jj_gen;
1930                    break label_18;
1931                  }
1932                  jj_consume_token(1);
1933                  assignmentExpression();
1934                }
1935                break;
1936              default:
1937                jj_la1[58] = jj_gen;
1938                ;
1939              }
1940            } catch (Throwable jjte001) {
1941                                  if (jjtc001) {
1942                                    jjtree.clearNodeScope(jjtn001);
1943                                    jjtc001 = false;
1944                                  } else {
1945                                    jjtree.popNode();
1946                                  }
1947                                  if (jjte001 instanceof RuntimeException) {
1948                                    {if (true) throw (RuntimeException)jjte001;}
1949                                  }
1950                                  if (jjte001 instanceof ParseException) {
1951                                    {if (true) throw (ParseException)jjte001;}
1952                                  }
1953                                  {if (true) throw (Error)jjte001;}
1954            } finally {
1955                                  if (jjtc001) {
1956                                    jjtree.closeNodeScope(jjtn001, true);
1957                                  }
1958            }
1959            jj_consume_token(55);
1960                          jjtree.closeNodeScope(jjtn000, true);
1961                          jjtc000 = false;
1962                            jjtn000.setClassName(className);
1963                            jjtn000.setArray(true);
1964          } else if (jj_2_13(2)) {
1965            jj_consume_token(52);
1966            assignmentExpression();
1967            jj_consume_token(53);
1968                          jjtree.closeNodeScope(jjtn000, true);
1969                          jjtc000 = false;
1970                            jjtn000.setClassName(className);
1971                            jjtn000.setArray(true);
1972          } else {
1973            jj_consume_token(-1);
1974            throw new ParseException();
1975          }
1976        } catch (Throwable jjte000) {
1977          if (jjtc000) {
1978            jjtree.clearNodeScope(jjtn000);
1979            jjtc000 = false;
1980          } else {
1981            jjtree.popNode();
1982          }
1983          if (jjte000 instanceof RuntimeException) {
1984            {if (true) throw (RuntimeException)jjte000;}
1985          }
1986          if (jjte000 instanceof ParseException) {
1987            {if (true) throw (ParseException)jjte000;}
1988          }
1989          {if (true) throw (Error)jjte000;}
1990        } finally {
1991          if (jjtc000) {
1992            jjtree.closeNodeScope(jjtn000, true);
1993          }
1994        }
1995      }
1996    
1997      final public void propertyName() throws ParseException {
1998                                     /*@bgen(jjtree) Property */
1999        ASTProperty jjtn000 = new ASTProperty(JJTPROPERTY);
2000        boolean jjtc000 = true;
2001        jjtree.openNodeScope(jjtn000);Token token;
2002        try {
2003          token = jj_consume_token(IDENT);
2004                    ASTConst jjtn001 = new ASTConst(JJTCONST);
2005                    boolean jjtc001 = true;
2006                    jjtree.openNodeScope(jjtn001);
2007          try {
2008                    jjtree.closeNodeScope(jjtn001, true);
2009                    jjtc001 = false;
2010                        jjtn001.setValue( token.image );
2011          } finally {
2012                    if (jjtc001) {
2013                      jjtree.closeNodeScope(jjtn001, true);
2014                    }
2015          }
2016        } finally {
2017          if (jjtc000) {
2018            jjtree.closeNodeScope(jjtn000, true);
2019          }
2020        }
2021      }
2022    
2023      final public void staticMethodCall(String className) throws ParseException {
2024                                                               /*@bgen(jjtree) StaticMethod */
2025        ASTStaticMethod jjtn000 = new ASTStaticMethod(JJTSTATICMETHOD);
2026        boolean jjtc000 = true;
2027        jjtree.openNodeScope(jjtn000);Token token;
2028        try {
2029          token = jj_consume_token(IDENT);
2030          jj_consume_token(44);
2031          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2032          case 4:
2033          case 28:
2034          case 35:
2035          case 36:
2036          case 40:
2037          case 41:
2038          case 44:
2039          case 46:
2040          case 47:
2041          case 48:
2042          case 49:
2043          case 50:
2044          case 51:
2045          case 52:
2046          case 54:
2047          case 56:
2048          case 57:
2049          case IDENT:
2050          case DYNAMIC_SUBSCRIPT:
2051          case CHAR_LITERAL:
2052          case BACK_CHAR_LITERAL:
2053          case STRING_LITERAL:
2054          case INT_LITERAL:
2055          case FLT_LITERAL:
2056            assignmentExpression();
2057            label_19:
2058            while (true) {
2059              switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2060              case 1:
2061                ;
2062                break;
2063              default:
2064                jj_la1[59] = jj_gen;
2065                break label_19;
2066              }
2067              jj_consume_token(1);
2068              assignmentExpression();
2069            }
2070            break;
2071          default:
2072            jj_la1[60] = jj_gen;
2073            ;
2074          }
2075          jj_consume_token(45);
2076                                              jjtree.closeNodeScope(jjtn000, true);
2077                                              jjtc000 = false;
2078                                              jjtn000.init( className, token.image );
2079        } catch (Throwable jjte000) {
2080          if (jjtc000) {
2081            jjtree.clearNodeScope(jjtn000);
2082            jjtc000 = false;
2083          } else {
2084            jjtree.popNode();
2085          }
2086          if (jjte000 instanceof RuntimeException) {
2087            {if (true) throw (RuntimeException)jjte000;}
2088          }
2089          if (jjte000 instanceof ParseException) {
2090            {if (true) throw (ParseException)jjte000;}
2091          }
2092          {if (true) throw (Error)jjte000;}
2093        } finally {
2094          if (jjtc000) {
2095            jjtree.closeNodeScope(jjtn000, true);
2096          }
2097        }
2098      }
2099    
2100      final public void methodCall() throws ParseException {
2101                                 /*@bgen(jjtree) Method */
2102        ASTMethod jjtn000 = new ASTMethod(JJTMETHOD);
2103        boolean jjtc000 = true;
2104        jjtree.openNodeScope(jjtn000);Token token;
2105        try {
2106          token = jj_consume_token(IDENT);
2107          jj_consume_token(44);
2108          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2109          case 4:
2110          case 28:
2111          case 35:
2112          case 36:
2113          case 40:
2114          case 41:
2115          case 44:
2116          case 46:
2117          case 47:
2118          case 48:
2119          case 49:
2120          case 50:
2121          case 51:
2122          case 52:
2123          case 54:
2124          case 56:
2125          case 57:
2126          case IDENT:
2127          case DYNAMIC_SUBSCRIPT:
2128          case CHAR_LITERAL:
2129          case BACK_CHAR_LITERAL:
2130          case STRING_LITERAL:
2131          case INT_LITERAL:
2132          case FLT_LITERAL:
2133            assignmentExpression();
2134            label_20:
2135            while (true) {
2136              switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2137              case 1:
2138                ;
2139                break;
2140              default:
2141                jj_la1[61] = jj_gen;
2142                break label_20;
2143              }
2144              jj_consume_token(1);
2145              assignmentExpression();
2146            }
2147            break;
2148          default:
2149            jj_la1[62] = jj_gen;
2150            ;
2151          }
2152          jj_consume_token(45);
2153                                              jjtree.closeNodeScope(jjtn000, true);
2154                                              jjtc000 = false;
2155                                              jjtn000.setMethodName( token.image );
2156        } catch (Throwable jjte000) {
2157          if (jjtc000) {
2158            jjtree.clearNodeScope(jjtn000);
2159            jjtc000 = false;
2160          } else {
2161            jjtree.popNode();
2162          }
2163          if (jjte000 instanceof RuntimeException) {
2164            {if (true) throw (RuntimeException)jjte000;}
2165          }
2166          if (jjte000 instanceof ParseException) {
2167            {if (true) throw (ParseException)jjte000;}
2168          }
2169          {if (true) throw (Error)jjte000;}
2170        } finally {
2171          if (jjtc000) {
2172            jjtree.closeNodeScope(jjtn000, true);
2173          }
2174        }
2175      }
2176    
2177    /**
2178     * Apply an expression to all elements of a collection, creating a new collection
2179     * as the result.
2180     */
2181      final public void projection() throws ParseException {
2182                                  /*@bgen(jjtree) Project */
2183      ASTProject jjtn000 = new ASTProject(JJTPROJECT);
2184      boolean jjtc000 = true;
2185      jjtree.openNodeScope(jjtn000);
2186        try {
2187          jj_consume_token(54);
2188          expression();
2189          jj_consume_token(55);
2190        } catch (Throwable jjte000) {
2191          if (jjtc000) {
2192            jjtree.clearNodeScope(jjtn000);
2193            jjtc000 = false;
2194          } else {
2195            jjtree.popNode();
2196          }
2197          if (jjte000 instanceof RuntimeException) {
2198            {if (true) throw (RuntimeException)jjte000;}
2199          }
2200          if (jjte000 instanceof ParseException) {
2201            {if (true) throw (ParseException)jjte000;}
2202          }
2203          {if (true) throw (Error)jjte000;}
2204        } finally {
2205          if (jjtc000) {
2206            jjtree.closeNodeScope(jjtn000, true);
2207          }
2208        }
2209      }
2210    
2211      final public void selection() throws ParseException {
2212        if (jj_2_14(2)) {
2213          selectAll();
2214        } else if (jj_2_15(2)) {
2215          selectFirst();
2216        } else if (jj_2_16(2)) {
2217          selectLast();
2218        } else {
2219          jj_consume_token(-1);
2220          throw new ParseException();
2221        }
2222      }
2223    
2224    /**
2225     * Apply a boolean expression to all elements of a collection, creating a new collection
2226     * containing those elements for which the expression returned true.
2227     */
2228      final public void selectAll() throws ParseException {
2229                                /*@bgen(jjtree) Select */
2230      ASTSelect jjtn000 = new ASTSelect(JJTSELECT);
2231      boolean jjtc000 = true;
2232      jjtree.openNodeScope(jjtn000);
2233        try {
2234          jj_consume_token(54);
2235          jj_consume_token(3);
2236          expression();
2237          jj_consume_token(55);
2238        } catch (Throwable jjte000) {
2239          if (jjtc000) {
2240            jjtree.clearNodeScope(jjtn000);
2241            jjtc000 = false;
2242          } else {
2243            jjtree.popNode();
2244          }
2245          if (jjte000 instanceof RuntimeException) {
2246            {if (true) throw (RuntimeException)jjte000;}
2247          }
2248          if (jjte000 instanceof ParseException) {
2249            {if (true) throw (ParseException)jjte000;}
2250          }
2251          {if (true) throw (Error)jjte000;}
2252        } finally {
2253          if (jjtc000) {
2254            jjtree.closeNodeScope(jjtn000, true);
2255          }
2256        }
2257      }
2258    
2259    /**
2260     * Apply a boolean expression to all elements of a collection, creating a new collection
2261     * containing those elements for the first element for which the expression returned true.
2262     */
2263      final public void selectFirst() throws ParseException {
2264                                       /*@bgen(jjtree) SelectFirst */
2265      ASTSelectFirst jjtn000 = new ASTSelectFirst(JJTSELECTFIRST);
2266      boolean jjtc000 = true;
2267      jjtree.openNodeScope(jjtn000);
2268        try {
2269          jj_consume_token(54);
2270          jj_consume_token(11);
2271          expression();
2272          jj_consume_token(55);
2273        } catch (Throwable jjte000) {
2274          if (jjtc000) {
2275            jjtree.clearNodeScope(jjtn000);
2276            jjtc000 = false;
2277          } else {
2278            jjtree.popNode();
2279          }
2280          if (jjte000 instanceof RuntimeException) {
2281            {if (true) throw (RuntimeException)jjte000;}
2282          }
2283          if (jjte000 instanceof ParseException) {
2284            {if (true) throw (ParseException)jjte000;}
2285          }
2286          {if (true) throw (Error)jjte000;}
2287        } finally {
2288          if (jjtc000) {
2289            jjtree.closeNodeScope(jjtn000, true);
2290          }
2291        }
2292      }
2293    
2294    /**
2295     * Apply a boolean expression to all elements of a collection, creating a new collection
2296     * containing those elements for the first element for which the expression returned true.
2297     */
2298      final public void selectLast() throws ParseException {
2299                                     /*@bgen(jjtree) SelectLast */
2300      ASTSelectLast jjtn000 = new ASTSelectLast(JJTSELECTLAST);
2301      boolean jjtc000 = true;
2302      jjtree.openNodeScope(jjtn000);
2303        try {
2304          jj_consume_token(54);
2305          jj_consume_token(58);
2306          expression();
2307          jj_consume_token(55);
2308        } catch (Throwable jjte000) {
2309          if (jjtc000) {
2310            jjtree.clearNodeScope(jjtn000);
2311            jjtc000 = false;
2312          } else {
2313            jjtree.popNode();
2314          }
2315          if (jjte000 instanceof RuntimeException) {
2316            {if (true) throw (RuntimeException)jjte000;}
2317          }
2318          if (jjte000 instanceof ParseException) {
2319            {if (true) throw (ParseException)jjte000;}
2320          }
2321          {if (true) throw (Error)jjte000;}
2322        } finally {
2323          if (jjtc000) {
2324            jjtree.closeNodeScope(jjtn000, true);
2325          }
2326        }
2327      }
2328    
2329      final public void index() throws ParseException {
2330                              /*@bgen(jjtree) Property */
2331      ASTProperty jjtn000 = new ASTProperty(JJTPROPERTY);
2332      boolean jjtc000 = true;
2333      jjtree.openNodeScope(jjtn000);
2334        try {
2335          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2336          case 52:
2337            jj_consume_token(52);
2338            expression();
2339            jj_consume_token(53);
2340                               jjtree.closeNodeScope(jjtn000, true);
2341                               jjtc000 = false;
2342                               jjtn000.setIndexedAccess(true);
2343            break;
2344          case DYNAMIC_SUBSCRIPT:
2345            jj_consume_token(DYNAMIC_SUBSCRIPT);
2346                              ASTConst jjtn001 = new ASTConst(JJTCONST);
2347                              boolean jjtc001 = true;
2348                              jjtree.openNodeScope(jjtn001);
2349            try {
2350                              jjtree.closeNodeScope(jjtn001, true);
2351                              jjtc001 = false;
2352                              jjtn001.setValue( token_source.literalValue );
2353            } finally {
2354                              if (jjtc001) {
2355                                jjtree.closeNodeScope(jjtn001, true);
2356                              }
2357            }
2358          jjtree.closeNodeScope(jjtn000, true);
2359          jjtc000 = false;
2360            jjtn000.setIndexedAccess(true);
2361            break;
2362          default:
2363            jj_la1[63] = jj_gen;
2364            jj_consume_token(-1);
2365            throw new ParseException();
2366          }
2367        } catch (Throwable jjte000) {
2368          if (jjtc000) {
2369            jjtree.clearNodeScope(jjtn000);
2370            jjtc000 = false;
2371          } else {
2372            jjtree.popNode();
2373          }
2374          if (jjte000 instanceof RuntimeException) {
2375            {if (true) throw (RuntimeException)jjte000;}
2376          }
2377          if (jjte000 instanceof ParseException) {
2378            {if (true) throw (ParseException)jjte000;}
2379          }
2380          {if (true) throw (Error)jjte000;}
2381        } finally {
2382          if (jjtc000) {
2383            jjtree.closeNodeScope(jjtn000, true);
2384          }
2385        }
2386      }
2387    
2388      private boolean jj_2_1(int xla) {
2389        jj_la = xla; jj_lastpos = jj_scanpos = token;
2390        try { return !jj_3_1(); }
2391        catch(LookaheadSuccess ls) { return true; }
2392        finally { jj_save(0, xla); }
2393      }
2394    
2395      private boolean jj_2_2(int xla) {
2396        jj_la = xla; jj_lastpos = jj_scanpos = token;
2397        try { return !jj_3_2(); }
2398        catch(LookaheadSuccess ls) { return true; }
2399        finally { jj_save(1, xla); }
2400      }
2401    
2402      private boolean jj_2_3(int xla) {
2403        jj_la = xla; jj_lastpos = jj_scanpos = token;
2404        try { return !jj_3_3(); }
2405        catch(LookaheadSuccess ls) { return true; }
2406        finally { jj_save(2, xla); }
2407      }
2408    
2409      private boolean jj_2_4(int xla) {
2410        jj_la = xla; jj_lastpos = jj_scanpos = token;
2411        try { return !jj_3_4(); }
2412        catch(LookaheadSuccess ls) { return true; }
2413        finally { jj_save(3, xla); }
2414      }
2415    
2416      private boolean jj_2_5(int xla) {
2417        jj_la = xla; jj_lastpos = jj_scanpos = token;
2418        try { return !jj_3_5(); }
2419        catch(LookaheadSuccess ls) { return true; }
2420        finally { jj_save(4, xla); }
2421      }
2422    
2423      private boolean jj_2_6(int xla) {
2424        jj_la = xla; jj_lastpos = jj_scanpos = token;
2425        try { return !jj_3_6(); }
2426        catch(LookaheadSuccess ls) { return true; }
2427        finally { jj_save(5, xla); }
2428      }
2429    
2430      private boolean jj_2_7(int xla) {
2431        jj_la = xla; jj_lastpos = jj_scanpos = token;
2432        try { return !jj_3_7(); }
2433        catch(LookaheadSuccess ls) { return true; }
2434        finally { jj_save(6, xla); }
2435      }
2436    
2437      private boolean jj_2_8(int xla) {
2438        jj_la = xla; jj_lastpos = jj_scanpos = token;
2439        try { return !jj_3_8(); }
2440        catch(LookaheadSuccess ls) { return true; }
2441        finally { jj_save(7, xla); }
2442      }
2443    
2444      private boolean jj_2_9(int xla) {
2445        jj_la = xla; jj_lastpos = jj_scanpos = token;
2446        try { return !jj_3_9(); }
2447        catch(LookaheadSuccess ls) { return true; }
2448        finally { jj_save(8, xla); }
2449      }
2450    
2451      private boolean jj_2_10(int xla) {
2452        jj_la = xla; jj_lastpos = jj_scanpos = token;
2453        try { return !jj_3_10(); }
2454        catch(LookaheadSuccess ls) { return true; }
2455        finally { jj_save(9, xla); }
2456      }
2457    
2458      private boolean jj_2_11(int xla) {
2459        jj_la = xla; jj_lastpos = jj_scanpos = token;
2460        try { return !jj_3_11(); }
2461        catch(LookaheadSuccess ls) { return true; }
2462        finally { jj_save(10, xla); }
2463      }
2464    
2465      private boolean jj_2_12(int xla) {
2466        jj_la = xla; jj_lastpos = jj_scanpos = token;
2467        try { return !jj_3_12(); }
2468        catch(LookaheadSuccess ls) { return true; }
2469        finally { jj_save(11, xla); }
2470      }
2471    
2472      private boolean jj_2_13(int xla) {
2473        jj_la = xla; jj_lastpos = jj_scanpos = token;
2474        try { return !jj_3_13(); }
2475        catch(LookaheadSuccess ls) { return true; }
2476        finally { jj_save(12, xla); }
2477      }
2478    
2479      private boolean jj_2_14(int xla) {
2480        jj_la = xla; jj_lastpos = jj_scanpos = token;
2481        try { return !jj_3_14(); }
2482        catch(LookaheadSuccess ls) { return true; }
2483        finally { jj_save(13, xla); }
2484      }
2485    
2486      private boolean jj_2_15(int xla) {
2487        jj_la = xla; jj_lastpos = jj_scanpos = token;
2488        try { return !jj_3_15(); }
2489        catch(LookaheadSuccess ls) { return true; }
2490        finally { jj_save(14, xla); }
2491      }
2492    
2493      private boolean jj_2_16(int xla) {
2494        jj_la = xla; jj_lastpos = jj_scanpos = token;
2495        try { return !jj_3_16(); }
2496        catch(LookaheadSuccess ls) { return true; }
2497        finally { jj_save(15, xla); }
2498      }
2499    
2500      private boolean jj_3R_57() {
2501        if (jj_3R_62()) return true;
2502        return false;
2503      }
2504    
2505      private boolean jj_3R_25() {
2506        if (jj_scan_token(IDENT)) return true;
2507        if (jj_scan_token(44)) return true;
2508        return false;
2509      }
2510    
2511      private boolean jj_3R_34() {
2512        if (jj_3R_35()) return true;
2513        return false;
2514      }
2515    
2516      private boolean jj_3_7() {
2517        if (jj_scan_token(4)) return true;
2518        if (jj_scan_token(52)) return true;
2519        return false;
2520      }
2521    
2522      private boolean jj_3_6() {
2523        if (jj_scan_token(51)) return true;
2524        if (jj_scan_token(IDENT)) return true;
2525        return false;
2526      }
2527    
2528      private boolean jj_3_5() {
2529        if (jj_scan_token(50)) return true;
2530        return false;
2531      }
2532    
2533      private boolean jj_3R_27() {
2534        if (jj_3R_34()) return true;
2535        return false;
2536      }
2537    
2538      private boolean jj_3_4() {
2539        if (jj_scan_token(49)) return true;
2540        return false;
2541      }
2542    
2543      private boolean jj_3R_65() {
2544        if (jj_scan_token(IDENT)) return true;
2545        return false;
2546      }
2547    
2548      private boolean jj_3R_43() {
2549        if (jj_3R_44()) return true;
2550        return false;
2551      }
2552    
2553      private boolean jj_3R_56() {
2554        if (jj_scan_token(48)) return true;
2555        return false;
2556      }
2557    
2558      private boolean jj_3R_55() {
2559        if (jj_scan_token(47)) return true;
2560        return false;
2561      }
2562    
2563      private boolean jj_3R_54() {
2564        if (jj_scan_token(46)) return true;
2565        return false;
2566      }
2567    
2568      private boolean jj_3R_31() {
2569        if (jj_3R_27()) return true;
2570        return false;
2571      }
2572    
2573      private boolean jj_3_13() {
2574        if (jj_scan_token(52)) return true;
2575        if (jj_3R_27()) return true;
2576        return false;
2577      }
2578    
2579      private boolean jj_3R_53() {
2580        Token xsp;
2581        xsp = jj_scanpos;
2582        if (jj_scan_token(73)) {
2583        jj_scanpos = xsp;
2584        if (jj_scan_token(76)) {
2585        jj_scanpos = xsp;
2586        if (jj_scan_token(79)) {
2587        jj_scanpos = xsp;
2588        if (jj_scan_token(80)) {
2589        jj_scanpos = xsp;
2590        if (jj_scan_token(81)) return true;
2591        }
2592        }
2593        }
2594        }
2595        return false;
2596      }
2597    
2598      private boolean jj_3R_26() {
2599        if (jj_3R_27()) return true;
2600        return false;
2601      }
2602    
2603      private boolean jj_3R_52() {
2604        Token xsp;
2605        xsp = jj_scanpos;
2606        if (jj_3R_53()) {
2607        jj_scanpos = xsp;
2608        if (jj_3R_54()) {
2609        jj_scanpos = xsp;
2610        if (jj_3R_55()) {
2611        jj_scanpos = xsp;
2612        if (jj_3R_56()) {
2613        jj_scanpos = xsp;
2614        if (jj_3_4()) {
2615        jj_scanpos = xsp;
2616        if (jj_3_5()) {
2617        jj_scanpos = xsp;
2618        if (jj_3_6()) {
2619        jj_scanpos = xsp;
2620        if (jj_3_7()) {
2621        jj_scanpos = xsp;
2622        if (jj_3R_57()) {
2623        jj_scanpos = xsp;
2624        if (jj_3_8()) {
2625        jj_scanpos = xsp;
2626        if (jj_3R_58()) {
2627        jj_scanpos = xsp;
2628        if (jj_3R_59()) {
2629        jj_scanpos = xsp;
2630        if (jj_3R_60()) {
2631        jj_scanpos = xsp;
2632        if (jj_3R_61()) {
2633        jj_scanpos = xsp;
2634        if (jj_3_9()) return true;
2635        }
2636        }
2637        }
2638        }
2639        }
2640        }
2641        }
2642        }
2643        }
2644        }
2645        }
2646        }
2647        }
2648        }
2649        return false;
2650      }
2651    
2652      private boolean jj_3R_42() {
2653        if (jj_3R_43()) return true;
2654        return false;
2655      }
2656    
2657      private boolean jj_3_12() {
2658        if (jj_scan_token(52)) return true;
2659        if (jj_scan_token(53)) return true;
2660        return false;
2661      }
2662    
2663      private boolean jj_3_11() {
2664        if (jj_scan_token(44)) return true;
2665        Token xsp;
2666        xsp = jj_scanpos;
2667        if (jj_3R_26()) jj_scanpos = xsp;
2668        if (jj_scan_token(45)) return true;
2669        return false;
2670      }
2671    
2672      private boolean jj_3R_67() {
2673        if (jj_scan_token(DYNAMIC_SUBSCRIPT)) return true;
2674        return false;
2675      }
2676    
2677      private boolean jj_3_2() {
2678        if (jj_3R_22()) return true;
2679        return false;
2680      }
2681    
2682      private boolean jj_3R_66() {
2683        if (jj_scan_token(52)) return true;
2684        return false;
2685      }
2686    
2687      private boolean jj_3R_64() {
2688        Token xsp;
2689        xsp = jj_scanpos;
2690        if (jj_3R_66()) {
2691        jj_scanpos = xsp;
2692        if (jj_3R_67()) return true;
2693        }
2694        return false;
2695      }
2696    
2697      private boolean jj_3_1() {
2698        if (jj_3R_21()) return true;
2699        return false;
2700      }
2701    
2702      private boolean jj_3R_23() {
2703        if (jj_scan_token(57)) return true;
2704        if (jj_3R_32()) return true;
2705        return false;
2706      }
2707    
2708      private boolean jj_3R_41() {
2709        if (jj_3R_42()) return true;
2710        return false;
2711      }
2712    
2713      private boolean jj_3R_30() {
2714        if (jj_scan_token(54)) return true;
2715        if (jj_scan_token(58)) return true;
2716        return false;
2717      }
2718    
2719      private boolean jj_3R_32() {
2720        if (jj_scan_token(IDENT)) return true;
2721        return false;
2722      }
2723    
2724      private boolean jj_3R_51() {
2725        if (jj_3R_52()) return true;
2726        return false;
2727      }
2728    
2729      private boolean jj_3R_29() {
2730        if (jj_scan_token(54)) return true;
2731        if (jj_scan_token(11)) return true;
2732        return false;
2733      }
2734    
2735      private boolean jj_3R_40() {
2736        if (jj_3R_41()) return true;
2737        return false;
2738      }
2739    
2740      private boolean jj_3R_33() {
2741        if (jj_scan_token(56)) return true;
2742        return false;
2743      }
2744    
2745      private boolean jj_3R_63() {
2746        if (jj_3R_65()) return true;
2747        return false;
2748      }
2749    
2750      private boolean jj_3R_28() {
2751        if (jj_scan_token(54)) return true;
2752        if (jj_scan_token(3)) return true;
2753        return false;
2754      }
2755    
2756      private boolean jj_3R_50() {
2757        if (jj_3R_51()) return true;
2758        return false;
2759      }
2760    
2761      private boolean jj_3R_39() {
2762        if (jj_3R_40()) return true;
2763        return false;
2764      }
2765    
2766      private boolean jj_3_10() {
2767        if (jj_3R_25()) return true;
2768        return false;
2769      }
2770    
2771      private boolean jj_3R_24() {
2772        if (jj_3R_33()) return true;
2773        return false;
2774      }
2775    
2776      private boolean jj_3R_49() {
2777        Token xsp;
2778        xsp = jj_scanpos;
2779        if (jj_scan_token(41)) {
2780        jj_scanpos = xsp;
2781        if (jj_scan_token(28)) return true;
2782        }
2783        return false;
2784      }
2785    
2786      private boolean jj_3R_48() {
2787        if (jj_scan_token(40)) return true;
2788        return false;
2789      }
2790    
2791      private boolean jj_3_16() {
2792        if (jj_3R_30()) return true;
2793        return false;
2794      }
2795    
2796      private boolean jj_3R_47() {
2797        if (jj_scan_token(35)) return true;
2798        return false;
2799      }
2800    
2801      private boolean jj_3_15() {
2802        if (jj_3R_29()) return true;
2803        return false;
2804      }
2805    
2806      private boolean jj_3R_38() {
2807        if (jj_3R_39()) return true;
2808        return false;
2809      }
2810    
2811      private boolean jj_3R_46() {
2812        if (jj_scan_token(36)) return true;
2813        return false;
2814      }
2815    
2816      private boolean jj_3_14() {
2817        if (jj_3R_28()) return true;
2818        return false;
2819      }
2820    
2821      private boolean jj_3R_62() {
2822        if (jj_3R_33()) return true;
2823        return false;
2824      }
2825    
2826      private boolean jj_3R_45() {
2827        Token xsp;
2828        xsp = jj_scanpos;
2829        if (jj_3R_46()) {
2830        jj_scanpos = xsp;
2831        if (jj_3R_47()) {
2832        jj_scanpos = xsp;
2833        if (jj_3R_48()) {
2834        jj_scanpos = xsp;
2835        if (jj_3R_49()) {
2836        jj_scanpos = xsp;
2837        if (jj_3R_50()) return true;
2838        }
2839        }
2840        }
2841        }
2842        return false;
2843      }
2844    
2845      private boolean jj_3R_37() {
2846        if (jj_3R_38()) return true;
2847        return false;
2848      }
2849    
2850      private boolean jj_3R_22() {
2851        if (jj_scan_token(54)) return true;
2852        if (jj_3R_31()) return true;
2853        return false;
2854      }
2855    
2856      private boolean jj_3_9() {
2857        if (jj_scan_token(51)) return true;
2858        Token xsp;
2859        xsp = jj_scanpos;
2860        if (jj_3R_24()) jj_scanpos = xsp;
2861        if (jj_scan_token(54)) return true;
2862        return false;
2863      }
2864    
2865      private boolean jj_3R_36() {
2866        if (jj_3R_37()) return true;
2867        return false;
2868      }
2869    
2870      private boolean jj_3R_61() {
2871        if (jj_scan_token(54)) return true;
2872        return false;
2873      }
2874    
2875      private boolean jj_3R_60() {
2876        if (jj_scan_token(44)) return true;
2877        return false;
2878      }
2879    
2880      private boolean jj_3R_59() {
2881        if (jj_3R_64()) return true;
2882        return false;
2883      }
2884    
2885      private boolean jj_3_3() {
2886        if (jj_3R_21()) return true;
2887        return false;
2888      }
2889    
2890      private boolean jj_3R_21() {
2891        if (jj_scan_token(IDENT)) return true;
2892        if (jj_scan_token(44)) return true;
2893        return false;
2894      }
2895    
2896      private boolean jj_3R_58() {
2897        Token xsp;
2898        xsp = jj_scanpos;
2899        if (jj_3_3()) {
2900        jj_scanpos = xsp;
2901        if (jj_3R_63()) return true;
2902        }
2903        return false;
2904      }
2905    
2906      private boolean jj_3R_35() {
2907        if (jj_3R_36()) return true;
2908        return false;
2909      }
2910    
2911      private boolean jj_3R_44() {
2912        if (jj_3R_45()) return true;
2913        return false;
2914      }
2915    
2916      private boolean jj_3_8() {
2917        if (jj_3R_23()) return true;
2918        return false;
2919      }
2920    
2921      /** Generated Token Manager. */
2922      public OgnlParserTokenManager token_source;
2923      JavaCharStream jj_input_stream;
2924      /** Current token. */
2925      public Token token;
2926      /** Next token. */
2927      public Token jj_nt;
2928      private int jj_ntk;
2929      private Token jj_scanpos, jj_lastpos;
2930      private int jj_la;
2931      private int jj_gen;
2932      final private int[] jj_la1 = new int[64];
2933      static private int[] jj_la1_0;
2934      static private int[] jj_la1_1;
2935      static private int[] jj_la1_2;
2936      static {
2937          jj_la1_init_0();
2938          jj_la1_init_1();
2939          jj_la1_init_2();
2940       }
2941       private static void jj_la1_init_0() {
2942          jj_la1_0 = new int[] {0x2,0x4,0x8,0x60,0x60,0x180,0x180,0x600,0x600,0x1800,0x1800,0x6000,0x6000,0x78000,0x18000,0x60000,0x78000,0x1ff80000,0x180000,0x600000,0x1800000,0x6000000,0x1ff80000,0xe0000000,0x60000000,0x80000000,0x0,0xe0000000,0x0,0x0,0x0,0x0,0x10000000,0x0,0x0,0x10000010,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x10000010,0x0,0x2,0x10000010,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x2,0x10000010,0x2,0x10000010,0x2,0x10000010,0x2,0x10000010,0x0,};
2943       }
2944       private static void jj_la1_init_1() {
2945          jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x1,0x6,0x7,0x18,0x18,0xe0,0xe0,0x200,0x800,0x400,0x35fd318,0x101800,0x0,0x400000,0x401000,0x101800,0x0,0x0,0x0,0x35fd318,0x1000000,0x0,0x35fd318,0x1c000,0x1000000,0x501000,0x0,0x0,0x0,0x800,0x0,0x35fd318,0x0,0x35fd318,0x0,0x35fd318,0x0,0x35fd318,0x100000,};
2946       }
2947       private static void jj_la1_init_2() {
2948          jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x39209,0x8,0x1,0x0,0x1,0x8,0x39200,0x1,0x0,0x39209,0x0,0x0,0x39209,0x39200,0x0,0x9,0x0,0x1,0x1,0x0,0x0,0x39209,0x0,0x39209,0x0,0x39209,0x0,0x39209,0x8,};
2949       }
2950      final private JJCalls[] jj_2_rtns = new JJCalls[16];
2951      private boolean jj_rescan = false;
2952      private int jj_gc = 0;
2953    
2954      /** Constructor with InputStream. */
2955      public OgnlParser(java.io.InputStream stream) {
2956         this(stream, null);
2957      }
2958      /** Constructor with InputStream and supplied encoding */
2959      public OgnlParser(java.io.InputStream stream, String encoding) {
2960        try { jj_input_stream = new JavaCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
2961        token_source = new OgnlParserTokenManager(jj_input_stream);
2962        token = new Token();
2963        jj_ntk = -1;
2964        jj_gen = 0;
2965        for (int i = 0; i < 64; i++) jj_la1[i] = -1;
2966        for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
2967      }
2968    
2969      /** Reinitialise. */
2970      public void ReInit(java.io.InputStream stream) {
2971         ReInit(stream, null);
2972      }
2973      /** Reinitialise. */
2974      public void ReInit(java.io.InputStream stream, String encoding) {
2975        try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
2976        token_source.ReInit(jj_input_stream);
2977        token = new Token();
2978        jj_ntk = -1;
2979        jj_gen = 0;
2980        for (int i = 0; i < 64; i++) jj_la1[i] = -1;
2981        for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
2982      }
2983    
2984      /** Constructor. */
2985      public OgnlParser(java.io.Reader stream) {
2986        jj_input_stream = new JavaCharStream(stream, 1, 1);
2987        token_source = new OgnlParserTokenManager(jj_input_stream);
2988        token = new Token();
2989        jj_ntk = -1;
2990        jj_gen = 0;
2991        for (int i = 0; i < 64; i++) jj_la1[i] = -1;
2992        for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
2993      }
2994    
2995      /** Reinitialise. */
2996      public void ReInit(java.io.Reader stream) {
2997        jj_input_stream.ReInit(stream, 1, 1);
2998        token_source.ReInit(jj_input_stream);
2999        token = new Token();
3000        jj_ntk = -1;
3001        jj_gen = 0;
3002        for (int i = 0; i < 64; i++) jj_la1[i] = -1;
3003        for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
3004      }
3005    
3006      /** Constructor with generated Token Manager. */
3007      public OgnlParser(OgnlParserTokenManager tm) {
3008        token_source = tm;
3009        token = new Token();
3010        jj_ntk = -1;
3011        jj_gen = 0;
3012        for (int i = 0; i < 64; i++) jj_la1[i] = -1;
3013        for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
3014      }
3015    
3016      /** Reinitialise. */
3017      public void ReInit(OgnlParserTokenManager tm) {
3018        token_source = tm;
3019        token = new Token();
3020        jj_ntk = -1;
3021        jj_gen = 0;
3022        for (int i = 0; i < 64; i++) jj_la1[i] = -1;
3023        for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
3024      }
3025    
3026      private Token jj_consume_token(int kind) throws ParseException {
3027        Token oldToken;
3028        if ((oldToken = token).next != null) token = token.next;
3029        else token = token.next = token_source.getNextToken();
3030        jj_ntk = -1;
3031        if (token.kind == kind) {
3032          jj_gen++;
3033          if (++jj_gc > 100) {
3034            jj_gc = 0;
3035            for (int i = 0; i < jj_2_rtns.length; i++) {
3036              JJCalls c = jj_2_rtns[i];
3037              while (c != null) {
3038                if (c.gen < jj_gen) c.first = null;
3039                c = c.next;
3040              }
3041            }
3042          }
3043          return token;
3044        }
3045        token = oldToken;
3046        jj_kind = kind;
3047        throw generateParseException();
3048      }
3049    
3050      static private final class LookaheadSuccess extends java.lang.Error { }
3051      final private LookaheadSuccess jj_ls = new LookaheadSuccess();
3052      private boolean jj_scan_token(int kind) {
3053        if (jj_scanpos == jj_lastpos) {
3054          jj_la--;
3055          if (jj_scanpos.next == null) {
3056            jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
3057          } else {
3058            jj_lastpos = jj_scanpos = jj_scanpos.next;
3059          }
3060        } else {
3061          jj_scanpos = jj_scanpos.next;
3062        }
3063        if (jj_rescan) {
3064          int i = 0; Token tok = token;
3065          while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
3066          if (tok != null) jj_add_error_token(kind, i);
3067        }
3068        if (jj_scanpos.kind != kind) return true;
3069        if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
3070        return false;
3071      }
3072    
3073    
3074    /** Get the next Token. */
3075      final public Token getNextToken() {
3076        if (token.next != null) token = token.next;
3077        else token = token.next = token_source.getNextToken();
3078        jj_ntk = -1;
3079        jj_gen++;
3080        return token;
3081      }
3082    
3083    /** Get the specific Token. */
3084      final public Token getToken(int index) {
3085        Token t = token;
3086        for (int i = 0; i < index; i++) {
3087          if (t.next != null) t = t.next;
3088          else t = t.next = token_source.getNextToken();
3089        }
3090        return t;
3091      }
3092    
3093      private int jj_ntk() {
3094        if ((jj_nt=token.next) == null)
3095          return (jj_ntk = (token.next=token_source.getNextToken()).kind);
3096        else
3097          return (jj_ntk = jj_nt.kind);
3098      }
3099    
3100      private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();
3101      private int[] jj_expentry;
3102      private int jj_kind = -1;
3103      private int[] jj_lasttokens = new int[100];
3104      private int jj_endpos;
3105    
3106      private void jj_add_error_token(int kind, int pos) {
3107        if (pos >= 100) return;
3108        if (pos == jj_endpos + 1) {
3109          jj_lasttokens[jj_endpos++] = kind;
3110        } else if (jj_endpos != 0) {
3111          jj_expentry = new int[jj_endpos];
3112          for (int i = 0; i < jj_endpos; i++) {
3113            jj_expentry[i] = jj_lasttokens[i];
3114          }
3115          jj_entries_loop: for (java.util.Iterator<?> it = jj_expentries.iterator(); it.hasNext();) {
3116            int[] oldentry = (int[])(it.next());
3117            if (oldentry.length == jj_expentry.length) {
3118              for (int i = 0; i < jj_expentry.length; i++) {
3119                if (oldentry[i] != jj_expentry[i]) {
3120                  continue jj_entries_loop;
3121                }
3122              }
3123              jj_expentries.add(jj_expentry);
3124              break jj_entries_loop;
3125            }
3126          }
3127          if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
3128        }
3129      }
3130    
3131      /** Generate ParseException. */
3132      public ParseException generateParseException() {
3133        jj_expentries.clear();
3134        boolean[] la1tokens = new boolean[86];
3135        if (jj_kind >= 0) {
3136          la1tokens[jj_kind] = true;
3137          jj_kind = -1;
3138        }
3139        for (int i = 0; i < 64; i++) {
3140          if (jj_la1[i] == jj_gen) {
3141            for (int j = 0; j < 32; j++) {
3142              if ((jj_la1_0[i] & (1<<j)) != 0) {
3143                la1tokens[j] = true;
3144              }
3145              if ((jj_la1_1[i] & (1<<j)) != 0) {
3146                la1tokens[32+j] = true;
3147              }
3148              if ((jj_la1_2[i] & (1<<j)) != 0) {
3149                la1tokens[64+j] = true;
3150              }
3151            }
3152          }
3153        }
3154        for (int i = 0; i < 86; i++) {
3155          if (la1tokens[i]) {
3156            jj_expentry = new int[1];
3157            jj_expentry[0] = i;
3158            jj_expentries.add(jj_expentry);
3159          }
3160        }
3161        jj_endpos = 0;
3162        jj_rescan_token();
3163        jj_add_error_token(0, 0);
3164        int[][] exptokseq = new int[jj_expentries.size()][];
3165        for (int i = 0; i < jj_expentries.size(); i++) {
3166          exptokseq[i] = jj_expentries.get(i);
3167        }
3168        return new ParseException(token, exptokseq, tokenImage);
3169      }
3170    
3171      /** Enable tracing. */
3172      final public void enable_tracing() {
3173      }
3174    
3175      /** Disable tracing. */
3176      final public void disable_tracing() {
3177      }
3178    
3179      private void jj_rescan_token() {
3180        jj_rescan = true;
3181        for (int i = 0; i < 16; i++) {
3182        try {
3183          JJCalls p = jj_2_rtns[i];
3184          do {
3185            if (p.gen > jj_gen) {
3186              jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
3187              switch (i) {
3188                case 0: jj_3_1(); break;
3189                case 1: jj_3_2(); break;
3190                case 2: jj_3_3(); break;
3191                case 3: jj_3_4(); break;
3192                case 4: jj_3_5(); break;
3193                case 5: jj_3_6(); break;
3194                case 6: jj_3_7(); break;
3195                case 7: jj_3_8(); break;
3196                case 8: jj_3_9(); break;
3197                case 9: jj_3_10(); break;
3198                case 10: jj_3_11(); break;
3199                case 11: jj_3_12(); break;
3200                case 12: jj_3_13(); break;
3201                case 13: jj_3_14(); break;
3202                case 14: jj_3_15(); break;
3203                case 15: jj_3_16(); break;
3204              }
3205            }
3206            p = p.next;
3207          } while (p != null);
3208          } catch(LookaheadSuccess ls) { }
3209        }
3210        jj_rescan = false;
3211      }
3212    
3213      private void jj_save(int index, int xla) {
3214        JJCalls p = jj_2_rtns[index];
3215        while (p.gen > jj_gen) {
3216          if (p.next == null) { p = p.next = new JJCalls(); break; }
3217          p = p.next;
3218        }
3219        p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
3220      }
3221    
3222      static final class JJCalls {
3223        int gen;
3224        Token first;
3225        int arg;
3226        JJCalls next;
3227      }
3228    
3229    }