• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Generated By:JJTree&JavaCC: Do not edit this line. StandardParser.java */
2 package org.apache.velocity.runtime.parser;
3 import org.apache.velocity.runtime.parser.node.*;
4 
5 
6 import java.io.*;
7 import java.util.*;
8 import org.apache.velocity.Template;
9 import org.apache.velocity.exception.VelocityException;
10 import org.apache.velocity.runtime.RuntimeServices;
11 import org.apache.velocity.runtime.parser.*;
12 import org.apache.velocity.runtime.parser.node.*;
13 import org.apache.velocity.runtime.directive.*;
14 import org.apache.velocity.runtime.directive.MacroParseException;
15 import org.apache.velocity.runtime.RuntimeConstants;
16 import static org.apache.velocity.runtime.RuntimeConstants.SpaceGobbling;
17 
18 import org.slf4j.Logger;
19 
20 /**
21  * This class is responsible for parsing a Velocity
22  * template. This class was generated by JavaCC using
23  * the JJTree extension to produce an Abstract
24  * Syntax Tree (AST) of the template.
25  *
26  * Please look at the Parser.jjt file which is
27  * what controls the generation of this class.
28  *
29  * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
30  * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
31  * @author <a href="hps@intermeta.de">Henning P. Schmiedehausen</a>
32  * @version $Id$
33 */
34 public class StandardParser implements/*@bgen(jjtree)*/ StandardParserTreeConstants,Parser, StandardParserConstants {/*@bgen(jjtree)*/
35   protected JJTStandardParserState jjtree = new JJTStandardParserState();/**
36      * Parser debugging flag.
37      * When debug is active, javacc Parser will contain (among other things)
38      * a trace_call() method. So we use the presence of this method to
39      * initialize our flag.
40      */
41     private static boolean debugParser;
42     static
43     {
44         try
45         {
46             StandardParser.class.getDeclaredMethod("trace_call", String.class);
47             debugParser = true;
48         }
49         catch(NoSuchMethodException nsfe)
50         {
51             debugParser = false;
52         }
53     }
54 
55     /**
56      * Our own trace method. Use sparsingly in production, since each
57      * and every call will introduce an execution branch and slow down parsing.
58      */
trace(String message)59     public static void trace(String message)
60     {
61         if (debugParser) System.out.println(message);
62     }
63 
64     /**
65      * Keep track of defined macros, used for escape processing
66      */
67     private Map macroNames = new HashMap();
68 
69     /**
70      * Current template we are parsing.  Passed to us in parse()
71      */
72     public Template currentTemplate = null;
73 
74     /**
75      * Set to true if the property
76      * RuntimeConstants.RUNTIME_REFERENCES_STRICT_ESCAPE is set to true
77      */
78     public boolean strictEscape = false;
79 
80     /**
81      * Set to true if the propoerty
82      * RuntimeConstants.PARSER_HYPHEN_ALLOWED is set to true
83      */
84     public boolean hyphenAllowedInIdentifiers = false;
85 
86     VelocityCharStream velcharstream = null;
87 
88     private RuntimeServices rsvc = null;
89 
90     @Override
getRuntimeServices()91     public RuntimeServices getRuntimeServices()
92     {
93         return rsvc;
94     }
95 
96     private Logger log = null;
97 
98     /**
99      * This constructor was added to allow the re-use of parsers.
100      * The normal constructor takes a single argument which
101      * an InputStream. This simply creates a re-usable parser
102      * object, we satisfy the requirement of an InputStream
103      * by using a newline character as an input stream.
104      */
StandardParser( RuntimeServices rs)105     public StandardParser( RuntimeServices rs)
106     {
107         /*
108          * need to call the CTOR first thing.
109          */
110 
111         this(   new VelocityCharStream(
112                 new ByteArrayInputStream("\u005cn".getBytes()), 1, 1 ));
113 
114         /*
115          * then initialize logger
116          */
117 
118          log = rs.getLog("parser");
119 
120 
121         /*
122          * now setup a VCS for later use
123          */
124         velcharstream = new VelocityCharStream(
125                 new ByteArrayInputStream("\u005cn".getBytes()), 1, 1 );
126 
127 
128         strictEscape =
129             rs.getBoolean(RuntimeConstants.RUNTIME_REFERENCES_STRICT_ESCAPE, false);
130 
131         hyphenAllowedInIdentifiers =
132             rs.getBoolean(RuntimeConstants.PARSER_HYPHEN_ALLOWED, false);
133 
134         /*
135          *  and save the RuntimeServices
136          */
137         rsvc = rs;
138 
139         /*
140          * then initialize customizable characters
141          */
142          dollar   = '$';
143          hash     = '#';
144          at       = '@';
145          asterisk = '*';
146     }
147 
148     /**
149      * This was also added to allow parsers to be
150      * re-usable. Normal JavaCC use entails passing an
151      * input stream to the constructor and the parsing
152      * process is carried out once. We want to be able
153      * to re-use parsers: we do this by adding this
154      * method and re-initializing the lexer with
155      * the new stream that we want parsed.
156      */
157     @Override
parse( Reader reader, Template template )158     public SimpleNode parse( Reader reader, Template template )
159         throws ParseException
160     {
161         SimpleNode sn = null;
162 
163         currentTemplate = template;
164 
165         try
166         {
167             token_source.clearStateVars();
168 
169             /*
170              *  reinitialize the VelocityCharStream
171              *  with the new reader
172              */
173             velcharstream.ReInit( reader, 1, 1 );
174 
175             /*
176              * now reinit the Parser with this CharStream
177              */
178             ReInit( velcharstream  );
179 
180             /*
181              *  do that voodoo...
182              */
183             sn = process();
184         }
185         catch (MacroParseException mee)
186         {
187             /*
188              *  thrown by the Macro class when something is amiss in the
189              *  Macro specification
190              */
191             log.error("{}: {}", template.getName(), mee.getMessage(), mee);
192             throw mee;
193         }
194         catch (ParseException pe)
195         {
196             log.error("{}: {}", currentTemplate.getName(), pe.getMessage());
197             throw new TemplateParseException (pe.currentToken,
198                                 pe.expectedTokenSequences, pe.tokenImage, currentTemplate.getName());
199                 }
200         catch (TokenMgrError tme)
201         {
202             throw new ParseException("Lexical error: " + tme.toString());
203         }
204         catch (Exception e)
205         {
206             String msg = template.getName() + ": " + e.getMessage();
207             log.error(msg, e);
208             throw new VelocityException(msg, e, getRuntimeServices().getLogContext().getStackTrace());
209         }
210 
211         currentTemplate = null;
212 
213         return sn;
214     }
215 
216     /**
217      *  This method gets a Directive from the directives Hashtable
218      */
219     @Override
getDirective(String directive)220     public Directive getDirective(String directive)
221     {
222         return (Directive) rsvc.getDirective(directive);
223     }
224 
225     /**
226      *  This method finds out of the directive exists in the directives Map.
227      */
228     @Override
isDirective(String directive)229     public boolean isDirective(String directive)
230     {
231         return rsvc.getDirective(directive) != null;
232     }
233 
234 
235     /**
236      * Produces a processed output for an escaped control or
237      * pluggable directive
238      */
escapedDirective( String strImage )239     private String escapedDirective( String strImage )
240     {
241         int iLast = strImage.lastIndexOf("\u005c\u005c");
242 
243         String strDirective = strImage.substring(iLast + 1);
244 
245         boolean bRecognizedDirective = false;
246 
247         // we don't have to call substring method all the time in this method
248         String dirTag = strDirective.substring(1);
249         if (dirTag.charAt(0) == '{')
250         {
251             dirTag = dirTag.substring(1, dirTag.length() - 1);
252         }
253 
254         /*
255          *  If this is a predefined derective or if we detect
256          *  a macro definition (this is aproximate at best) then
257          *  we absorb the forward slash.  If in strict reference
258          *  mode then we always absord the forward slash regardless
259          *  if the derective is defined or not.
260          */
261 
262         if (strictEscape
263              || isDirective(dirTag)
264              || macroNames.containsKey(dirTag)
265              || rsvc.isVelocimacro(dirTag, currentTemplate))
266         {
267             bRecognizedDirective = true;
268         }
269         else
270         {
271             /* order for speed? */
272 
273             if ( dirTag.equals("if")
274                 || dirTag.equals("end")
275                 || dirTag.equals("set")
276                 || dirTag.equals("else")
277                 || dirTag.equals("elseif")
278             )
279             {
280                 bRecognizedDirective = true;
281             }
282         }
283 
284         /*
285          *  if so, make the proper prefix string (let the escapes do their thing..)
286          *  otherwise, just return what it is..
287          */
288 
289         if (bRecognizedDirective)
290             return ( strImage.substring(0,iLast/2) + strDirective);
291         else
292             return ( strImage );
293     }
294 
295     /**
296      * Check whether there is a left parenthesis with leading optional
297      * whitespaces. This method is used in the semantic look ahead of
298      * Directive method. This is done in code instead of as a production
299      * for simplicity and efficiency.
300      */
isLeftParenthesis()301     private boolean isLeftParenthesis()
302     {
303         char c;
304         int no = 0;
305         try {
306             while(true)
307             {
308                 /**
309                  * Read a character
310                  */
311                 c = velcharstream.readChar();
312                 no++;
313                 if (c == '(')
314                 {
315                     return true;
316                 }
317                 /**
318                  * if not a white space return
319                  */
320                 else if (c != ' ' && c != '\u005cn' && c != '\u005cr' && c != '\u005ct')
321                 {
322                     return false;
323                 }
324             }
325         }
326         catch(IOException e)
327         {
328         }
329         finally
330         {
331             /**
332              * Backup the stream to the initial state
333              */
334             velcharstream.backup(no);
335         }
336         return false;
337     }
338 
339     /**
340      * Check whether there is a right parenthesis with leading optional
341      * whitespaces. This method is used in the semantic look ahead of
342      * Directive method. This is done in code instead of as a production
343      * for simplicity and efficiency.
344      */
isRightParenthesis()345     private boolean isRightParenthesis()
346     {
347         char c;
348         int no = -1;
349         try {
350             while(true)
351             {
352                 /**
353                  * Read a character
354                  */
355                  if (no == -1)
356                  {
357                      switch (getToken(1).kind)
358                      {
359                         case RPAREN:
360                             return true;
361                         case WHITESPACE:
362                         case NEWLINE:
363                             no = 0;
364                             break;
365                         default:
366                             return false;
367                      }
368                  }
369                 c = velcharstream.readChar();
370                 no++;
371                 if (c == ')')
372                 {
373                     return true;
374                 }
375                 /**
376                  * if not a white space return
377                  */
378                 else if (c != ' ' && c != '\u005cn' && c != '\u005cr' && c != '\u005ct')
379                 {
380                     return false;
381                 }
382             }
383         }
384         catch(IOException e)
385         {
386         }
387         finally
388         {
389             /**
390              * Backup the stream to the initial state
391              */
392             if (no > 0) velcharstream.backup(no);
393         }
394         return false;
395     }
396 
397     /**
398      * We use this method in a lookahead to determine if we are in a macro
399      * default value assignment.  The standard lookahead is not smart enough.
400      * here we look for the equals after the reference.
401      */
isAssignment()402     private boolean isAssignment()
403     {
404        // Basically if the last character read was not '$' then false
405        if (token_source.getCurrentLexicalState() != REFERENCE) return false;
406 
407        char c = ' ';
408        int backup = 0;
409        try
410        {
411            // Read through any white space
412            while(Character.isWhitespace(c))
413            {
414                 c = velcharstream.readChar();
415                 backup++;
416            }
417 
418            // This is what we are ultimately looking for
419            if (c != '=') return false;
420        }
421        catch (IOException e)
422        {
423        }
424        finally
425        {
426            velcharstream.backup(backup);
427        }
428 
429        return true;
430     }
431 
432     @Override
getCurrentTemplate()433     public Template getCurrentTemplate()
434     {
435         return currentTemplate;
436     }
437 
438     @Override
resetCurrentTemplate()439     public void resetCurrentTemplate()
440     {
441         currentTemplate = null;
442     }
443 
444     @Override
dollar()445     public char dollar()
446     {
447         return dollar;
448     }
449 
450     @Override
hash()451     public char hash()
452     {
453         return hash;
454     }
455 
456     @Override
at()457     public char at()
458     {
459         return at;
460     }
461 
462     @Override
asterisk()463     public char asterisk()
464     {
465         return asterisk;
466     }
467 
468     private char dollar = '$';
469     private char hash = '#';
470     private char at = '@';
471     private char asterisk = '*';
472 
473 /**
474  * This method is what starts the whole parsing
475  * process. After the parsing is complete and
476  * the template has been turned into an AST,
477  * this method returns the root of AST which
478  * can subsequently be traversed by a visitor
479  * which implements the ParserVisitor interface
480  * which is generated automatically by JavaCC
481  */
process()482   final public SimpleNode process() throws ParseException {
483  /*@bgen(jjtree) process */
484     ASTprocess jjtn000 = new ASTprocess(this, JJTPROCESS);
485     boolean jjtc000 = true;
486     jjtree.openNodeScope(jjtn000);boolean afterNewline = true;
487     try {
488       label_1:
489       while (true) {
490         if (getToken(1).kind != EOF) {
491           ;
492         } else {
493           break label_1;
494         }
495         afterNewline = Statement(afterNewline);
496       }
497       jj_consume_token(0);
498      jjtree.closeNodeScope(jjtn000, true);
499      jjtc000 = false;
500      {if (true) return jjtn000;}
501     } catch (Throwable jjte000) {
502      if (jjtc000) {
503        jjtree.clearNodeScope(jjtn000);
504        jjtc000 = false;
505      } else {
506        jjtree.popNode();
507      }
508      if (jjte000 instanceof RuntimeException) {
509        {if (true) throw (RuntimeException)jjte000;}
510      }
511      if (jjte000 instanceof ParseException) {
512        {if (true) throw (ParseException)jjte000;}
513      }
514      {if (true) throw (Error)jjte000;}
515     } finally {
516      if (jjtc000) {
517        jjtree.closeNodeScope(jjtn000, true);
518      }
519     }
520     throw new Error("Missing return statement in function");
521   }
522 
523 /**
524  * These are the types of statements that
525  * are acceptable in Velocity templates.
526  */
Statement(boolean afterNewline)527   final public boolean Statement(boolean afterNewline) throws ParseException {
528     if (getToken(1).kind == IF_DIRECTIVE || afterNewline && getToken(1).kind == WHITESPACE && getToken(2).kind == IF_DIRECTIVE) {
529       afterNewline = IfStatement(afterNewline);
530                                                                                                                                                                                        {if (true) return afterNewline;}
531     } else if (jj_2_1(2)) {
532       Reference();
533                                {if (true) return false;}
534     } else if (jj_2_2(2)) {
535       afterNewline = Comment();
536                                             {if (true) return afterNewline;}
537     } else {
538       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
539       case TEXTBLOCK:
540         Textblock();
541                   {if (true) return false;}
542         break;
543       default:
544         jj_la1[1] = jj_gen;
545         if (getToken(1).kind == SET_DIRECTIVE || afterNewline && getToken(1).kind == WHITESPACE && getToken(2).kind == SET_DIRECTIVE) {
546           afterNewline = SetDirective(afterNewline);
547                                                                                                                                                                                           {if (true) return afterNewline;}
548         } else {
549           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
550           case ESCAPE_DIRECTIVE:
551             EscapedDirective();
552                          {if (true) return false;}
553             break;
554           case DOUBLE_ESCAPE:
555             Escape();
556                {if (true) return false;}
557             break;
558           default:
559             jj_la1[2] = jj_gen;
560             if (getToken(1).kind == WORD || getToken(1).kind == BRACKETED_WORD || afterNewline && getToken(1).kind == WHITESPACE && ( getToken(2).kind == WORD || getToken(2).kind == BRACKETED_WORD )) {
561               afterNewline = Directive(afterNewline);
562                                                                                                                                                                                                                                                      {if (true) return afterNewline;}
563             } else {
564               switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
565               case LONE_SYMBOL:
566               case PIPE:
567               case LPAREN:
568               case RPAREN:
569               case STRING_LITERAL:
570               case INTEGER_LITERAL:
571               case FLOATING_POINT_LITERAL:
572               case DOT:
573               case LCURLY:
574               case RCURLY:
575               case ESCAPE:
576               case TEXT:
577               case EMPTY_INDEX:
578                 afterNewline = Text();
579                             {if (true) return afterNewline;}
580                 break;
581               case NEWLINE:
582       ASTText jjtn001 = new ASTText(this, JJTTEXT);
583       boolean jjtc001 = true;
584       jjtree.openNodeScope(jjtn001);
585                 try {
586                   jj_consume_token(NEWLINE);
587                 } finally {
588       if (jjtc001) {
589         jjtree.closeNodeScope(jjtn001, true);
590       }
591                 }
592                         {if (true) return true;}
593                 break;
594               case INLINE_TEXT:
595       ASTText jjtn002 = new ASTText(this, JJTTEXT);
596       boolean jjtc002 = true;
597       jjtree.openNodeScope(jjtn002);
598                 try {
599                   jj_consume_token(INLINE_TEXT);
600                         afterNewline = false;
601                   switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
602                   case TEXT:
603                     jj_consume_token(TEXT);
604                                                               afterNewline = true;
605                     break;
606                   default:
607                     jj_la1[0] = jj_gen;
608                     ;
609                   }
610                 } finally {
611       if (jjtc002) {
612         jjtree.closeNodeScope(jjtn002, true);
613       }
614                 }
615                                                                                                  {if (true) return afterNewline;}
616                 break;
617               case WHITESPACE:
618       ASTText jjtn003 = new ASTText(this, JJTTEXT);
619       boolean jjtc003 = true;
620       jjtree.openNodeScope(jjtn003);
621                 try {
622                   jj_consume_token(WHITESPACE);
623                 } finally {
624       if (jjtc003) {
625         jjtree.closeNodeScope(jjtn003, true);
626       }
627                 }
628                            {if (true) return false;}
629                 break;
630               case SUFFIX:
631       ASTText jjtn004 = new ASTText(this, JJTTEXT);
632       boolean jjtc004 = true;
633       jjtree.openNodeScope(jjtn004);
634                 try {
635                   jj_consume_token(SUFFIX);
636                 } finally {
637       if (jjtc004) {
638         jjtree.closeNodeScope(jjtn004, true);
639       }
640                 }
641                        {if (true) return true;}
642                 break;
643               default:
644                 jj_la1[3] = jj_gen;
645                 if (jj_2_3(2)) {
646                   EndingZeroWidthWhitespace();
647                                                {if (true) return afterNewline;}
648                 } else {
649                   switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
650                   case LOGICAL_OR_2:
651       ASTText jjtn005 = new ASTText(this, JJTTEXT);
652       boolean jjtc005 = true;
653       jjtree.openNodeScope(jjtn005);
654                     try {
655                       jj_consume_token(LOGICAL_OR_2);
656                     } finally {
657       if (jjtc005) {
658         jjtree.closeNodeScope(jjtn005, true);
659       }
660                     }
661                              {if (true) return afterNewline;}
662                     break;
663                   case ZERO_WIDTH_WHITESPACE:
664       ASTText jjtn006 = new ASTText(this, JJTTEXT);
665       boolean jjtc006 = true;
666       jjtree.openNodeScope(jjtn006);
667                     try {
668                       jj_consume_token(ZERO_WIDTH_WHITESPACE);
669                     } finally {
670       if (jjtc006) {
671         jjtree.closeNodeScope(jjtn006, true);
672       }
673                     }
674                                       afterNewline = !afterNewline; {if (true) return false;}
675                     break;
676                   default:
677                     jj_la1[4] = jj_gen;
678                     jj_consume_token(-1);
679                     throw new ParseException();
680                   }
681                 }
682               }
683             }
684           }
685         }
686       }
687     }
688     throw new Error("Missing return statement in function");
689   }
690 
EndingZeroWidthWhitespace()691   final public void EndingZeroWidthWhitespace() throws ParseException {
692     jj_consume_token(ZERO_WIDTH_WHITESPACE);
693     jj_consume_token(0);
694 
695   }
696 
697 /**
698  *  used to separate the notion of a valid directive that has been
699  *  escaped, versus something that looks like a directive and
700  *  is just schmoo.  This is important to do as a separate production
701  *  that creates a node, because we want this, in either case, to stop
702  *  the further parsing of the Directive() tree.
703  */
EscapedDirective()704   final public void EscapedDirective() throws ParseException {
705                            /*@bgen(jjtree) EscapedDirective */
706   ASTEscapedDirective jjtn000 = new ASTEscapedDirective(this, JJTESCAPEDDIRECTIVE);
707   boolean jjtc000 = true;
708   jjtree.openNodeScope(jjtn000);
709     try {
710         Token t = null;
711       t = jj_consume_token(ESCAPE_DIRECTIVE);
712       jjtree.closeNodeScope(jjtn000, true);
713       jjtc000 = false;
714         /*
715          *  churn and burn..
716          */
717         t.image = escapedDirective( t.image );
718     } finally {
719       if (jjtc000) {
720         jjtree.closeNodeScope(jjtn000, true);
721       }
722     }
723   }
724 
725 /**
726  *  Used to catch and process escape sequences in grammatical constructs
727  *  as escapes outside of VTL are just characters.  Right now we have both
728  *  this and the EscapeDirective() construction because in the EscapeDirective()
729  *  case, we want to suck in the #&lt;directive&gt; and here we don't.  We just want
730  *  the escapes to render correctly
731  */
Escape()732   final public void Escape() throws ParseException {
733                  /*@bgen(jjtree) Escape */
734   ASTEscape jjtn000 = new ASTEscape(this, JJTESCAPE);
735   boolean jjtc000 = true;
736   jjtree.openNodeScope(jjtn000);
737     try {
738         Token t = null;
739         int count = 0;
740         boolean control = false;
741       label_2:
742       while (true) {
743         t = jj_consume_token(DOUBLE_ESCAPE);
744         count++;
745         if (jj_2_4(2)) {
746           ;
747         } else {
748           break label_2;
749         }
750       }
751       jjtree.closeNodeScope(jjtn000, true);
752       jjtc000 = false;
753         /*
754          * first, check to see if we have a control directive
755          */
756         switch(t.next.kind ) {
757             case IF_DIRECTIVE :
758             case ELSE :
759             case ELSEIF :
760             case END :
761                 control = true;
762                 break;
763         }
764 
765         /*
766          * if that failed, lets lookahead to see if we matched a PD or a VM
767          */
768         String nTag = t.next.image.substring(1);
769         if (strictEscape
770             || isDirective(nTag)
771             || macroNames.containsKey(nTag)
772             || rsvc.isVelocimacro(nTag, currentTemplate))
773         {
774             control = true;
775         }
776 
777         jjtn000.val = "";
778 
779         for( int i = 0; i < count; i++)
780             jjtn000.val += ( control ? "\u005c\u005c" : "\u005c\u005c\u005c\u005c");
781     } finally {
782       if (jjtc000) {
783         jjtree.closeNodeScope(jjtn000, true);
784       }
785     }
786   }
787 
Comment()788   final public boolean Comment() throws ParseException {
789                      /*@bgen(jjtree) Comment */
790   ASTComment jjtn000 = new ASTComment(this, JJTCOMMENT);
791   boolean jjtc000 = true;
792   jjtree.openNodeScope(jjtn000);
793     try {
794       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
795       case SINGLE_LINE_COMMENT_START:
796         jj_consume_token(SINGLE_LINE_COMMENT_START);
797         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
798         case SINGLE_LINE_COMMENT:
799           jj_consume_token(SINGLE_LINE_COMMENT);
800           break;
801         default:
802           jj_la1[5] = jj_gen;
803           ;
804         }
805                                                                   jjtree.closeNodeScope(jjtn000, true);
806                                                                   jjtc000 = false;
807                                                                   {if (true) return true;}
808         break;
809       case MULTI_LINE_COMMENT:
810         jj_consume_token(MULTI_LINE_COMMENT);
811                            jjtree.closeNodeScope(jjtn000, true);
812                            jjtc000 = false;
813                            {if (true) return false;}
814         break;
815       case FORMAL_COMMENT:
816         jj_consume_token(FORMAL_COMMENT);
817                        jjtree.closeNodeScope(jjtn000, true);
818                        jjtc000 = false;
819                        {if (true) return false;}
820         break;
821       default:
822         jj_la1[6] = jj_gen;
823         jj_consume_token(-1);
824         throw new ParseException();
825       }
826     } finally {
827           if (jjtc000) {
828             jjtree.closeNodeScope(jjtn000, true);
829           }
830     }
831     throw new Error("Missing return statement in function");
832   }
833 
Textblock()834   final public void Textblock() throws ParseException {
835                     /*@bgen(jjtree) Textblock */
836   ASTTextblock jjtn000 = new ASTTextblock(this, JJTTEXTBLOCK);
837   boolean jjtc000 = true;
838   jjtree.openNodeScope(jjtn000);
839     try {
840       jj_consume_token(TEXTBLOCK);
841     } finally {
842      if (jjtc000) {
843        jjtree.closeNodeScope(jjtn000, true);
844      }
845     }
846   }
847 
FloatingPointLiteral()848   final public void FloatingPointLiteral() throws ParseException {
849                                /*@bgen(jjtree) FloatingPointLiteral */
850   ASTFloatingPointLiteral jjtn000 = new ASTFloatingPointLiteral(this, JJTFLOATINGPOINTLITERAL);
851   boolean jjtc000 = true;
852   jjtree.openNodeScope(jjtn000);
853     try {
854       jj_consume_token(FLOATING_POINT_LITERAL);
855     } finally {
856       if (jjtc000) {
857         jjtree.closeNodeScope(jjtn000, true);
858       }
859     }
860   }
861 
IntegerLiteral()862   final public void IntegerLiteral() throws ParseException {
863                          /*@bgen(jjtree) IntegerLiteral */
864   ASTIntegerLiteral jjtn000 = new ASTIntegerLiteral(this, JJTINTEGERLITERAL);
865   boolean jjtc000 = true;
866   jjtree.openNodeScope(jjtn000);
867     try {
868       jj_consume_token(INTEGER_LITERAL);
869     } finally {
870        if (jjtc000) {
871          jjtree.closeNodeScope(jjtn000, true);
872        }
873     }
874   }
875 
StringLiteral()876   final public void StringLiteral() throws ParseException {
877                         /*@bgen(jjtree) StringLiteral */
878   ASTStringLiteral jjtn000 = new ASTStringLiteral(this, JJTSTRINGLITERAL);
879   boolean jjtc000 = true;
880   jjtree.openNodeScope(jjtn000);
881     try {
882       jj_consume_token(STRING_LITERAL);
883     } finally {
884       if (jjtc000) {
885         jjtree.closeNodeScope(jjtn000, true);
886       }
887     }
888   }
889 
890 /**
891  * This method corresponds to variable
892  * references in Velocity templates.
893  * The following are examples of variable
894  * references that may be found in a
895  * template:
896  *
897  * $foo
898  * $bar
899  *
900  */
Identifier()901   final public void Identifier() throws ParseException {
902                      /*@bgen(jjtree) Identifier */
903   ASTIdentifier jjtn000 = new ASTIdentifier(this, JJTIDENTIFIER);
904   boolean jjtc000 = true;
905   jjtree.openNodeScope(jjtn000);
906     try {
907       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
908       case IDENTIFIER:
909         jj_consume_token(IDENTIFIER);
910         break;
911       case OLD_IDENTIFIER:
912         jj_consume_token(OLD_IDENTIFIER);
913         break;
914       default:
915         jj_la1[7] = jj_gen;
916         jj_consume_token(-1);
917         throw new ParseException();
918       }
919     } finally {
920       if (jjtc000) {
921         jjtree.closeNodeScope(jjtn000, true);
922       }
923     }
924   }
925 
Word()926   final public void Word() throws ParseException {
927                /*@bgen(jjtree) Word */
928   ASTWord jjtn000 = new ASTWord(this, JJTWORD);
929   boolean jjtc000 = true;
930   jjtree.openNodeScope(jjtn000);
931     try {
932       jj_consume_token(WORD);
933     } finally {
934       if (jjtc000) {
935         jjtree.closeNodeScope(jjtn000, true);
936       }
937     }
938   }
939 
940 /**
941  *   Supports the arguments for the Pluggable Directives
942  */
DirectiveArg()943   final public int DirectiveArg() throws ParseException {
944     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
945     case IDENTIFIER:
946     case OLD_IDENTIFIER:
947     case LCURLY:
948       Reference();
949         {if (true) return ParserTreeConstants.JJTREFERENCE;}
950       break;
951     case WORD:
952       Word();
953         {if (true) return ParserTreeConstants.JJTWORD;}
954       break;
955     case STRING_LITERAL:
956       StringLiteral();
957         {if (true) return ParserTreeConstants.JJTSTRINGLITERAL;}
958       break;
959     case INTEGER_LITERAL:
960       IntegerLiteral();
961         {if (true) return ParserTreeConstants.JJTINTEGERLITERAL;}
962       break;
963     default:
964       jj_la1[8] = jj_gen;
965       if (jj_2_5(2147483647)) {
966         IntegerRange();
967         {if (true) return ParserTreeConstants.JJTINTEGERRANGE;}
968       } else {
969         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
970         case FLOATING_POINT_LITERAL:
971           FloatingPointLiteral();
972         {if (true) return ParserTreeConstants.JJTFLOATINGPOINTLITERAL;}
973           break;
974         case LEFT_CURLEY:
975           Map();
976         {if (true) return ParserTreeConstants.JJTMAP;}
977           break;
978         case LBRACKET:
979           ObjectArray();
980         {if (true) return ParserTreeConstants.JJTOBJECTARRAY;}
981           break;
982         case TRUE:
983           True();
984         {if (true) return ParserTreeConstants.JJTTRUE;}
985           break;
986         case FALSE:
987           False();
988         {if (true) return ParserTreeConstants.JJTFALSE;}
989           break;
990         default:
991           jj_la1[9] = jj_gen;
992           jj_consume_token(-1);
993           throw new ParseException();
994         }
995       }
996     }
997     throw new Error("Missing return statement in function");
998   }
999 
DirectiveAssign()1000   final public void DirectiveAssign() throws ParseException {
1001                           /*@bgen(jjtree) DirectiveAssign */
1002   ASTDirectiveAssign jjtn000 = new ASTDirectiveAssign(this, JJTDIRECTIVEASSIGN);
1003   boolean jjtc000 = true;
1004   jjtree.openNodeScope(jjtn000);
1005     try {
1006       Reference();
1007     } catch (Throwable jjte000) {
1008       if (jjtc000) {
1009         jjtree.clearNodeScope(jjtn000);
1010         jjtc000 = false;
1011       } else {
1012         jjtree.popNode();
1013       }
1014       if (jjte000 instanceof RuntimeException) {
1015         {if (true) throw (RuntimeException)jjte000;}
1016       }
1017       if (jjte000 instanceof ParseException) {
1018         {if (true) throw (ParseException)jjte000;}
1019       }
1020       {if (true) throw (Error)jjte000;}
1021     } finally {
1022       if (jjtc000) {
1023         jjtree.closeNodeScope(jjtn000, true);
1024       }
1025     }
1026   }
1027 
1028 /**
1029  *   Supports the Pluggable Directives
1030  *     #foo( arg+ )
1031  * @return true if ends with a newline
1032  */
Directive(boolean afterNewline)1033   final public boolean Directive(boolean afterNewline) throws ParseException {
1034  /*@bgen(jjtree) Directive */
1035     ASTDirective jjtn000 = new ASTDirective(this, JJTDIRECTIVE);
1036     boolean jjtc000 = true;
1037     jjtree.openNodeScope(jjtn000);Token id = null, t = null, u = null, end = null, _else = null;
1038     int argType;
1039     int argPos = 0;
1040     Directive d;
1041     int directiveType;
1042     boolean isVM = false;
1043     boolean isMacro = false;
1044     ArrayList argtypes = new ArrayList(4);
1045     String blockPrefix = "";
1046     ASTBlock block = null, elseBlock = null;
1047     boolean hasParentheses = false;
1048     boolean newlineAtStart = afterNewline;
1049     try {
1050       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1051       case WHITESPACE:
1052         t = jj_consume_token(WHITESPACE);
1053           // only possible if not after new line
1054           jjtn000.setPrefix(t.image);
1055           t = null;
1056         break;
1057       default:
1058         jj_la1[10] = jj_gen;
1059         ;
1060       }
1061       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1062       case WORD:
1063         id = jj_consume_token(WORD);
1064         break;
1065       case BRACKETED_WORD:
1066         id = jj_consume_token(BRACKETED_WORD);
1067         break;
1068       default:
1069         jj_la1[11] = jj_gen;
1070         jj_consume_token(-1);
1071         throw new ParseException();
1072       }
1073         String directiveName;
1074         int p = id.image.lastIndexOf(hash);
1075         if (id.kind == StandardParserConstants.BRACKETED_WORD)
1076         {
1077             directiveName = id.image.substring(p + 2, id.image.length() - 1);
1078         }
1079         else
1080         {
1081             directiveName = id.image.substring(p + 1);
1082         }
1083 
1084         d = getDirective(directiveName);
1085 
1086         /*
1087          *  Velocimacro support : if the directive is macro directive
1088          *   then set the flag so after the block parsing, we add the VM
1089          *   right then. (So available if used w/in the current template )
1090          */
1091 
1092         if (directiveName.equals("macro"))
1093         {
1094              isMacro = true;
1095         }
1096 
1097         /*
1098          * set the directive name from here.  No reason for the thing to know
1099          * about parser tokens
1100          */
1101 
1102         jjtn000.setDirectiveName(directiveName);
1103 
1104         if ( d == null)
1105         {
1106             if( directiveName.charAt(0) == at )
1107             {
1108                 // block macro call of type: #@foobar($arg1 $arg2) astBody #end
1109                 directiveType = Directive.BLOCK;
1110             }
1111             else
1112             {
1113                 /*
1114                  *  if null, then not a real directive, but maybe a Velocimacro
1115                  */
1116                 isVM = rsvc.isVelocimacro(directiveName, currentTemplate);
1117 
1118                 directiveType = Directive.LINE;
1119             }
1120         }
1121         else
1122         {
1123             directiveType = d.getType();
1124         }
1125 
1126         /*
1127          *  now, switch us out of PRE_DIRECTIVE
1128          */
1129 
1130         token_source.switchTo(DIRECTIVE);
1131         argPos = 0;
1132       if (isLeftParenthesis()) {
1133         label_3:
1134         while (true) {
1135           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1136           case WHITESPACE:
1137           case NEWLINE:
1138             ;
1139             break;
1140           default:
1141             jj_la1[12] = jj_gen;
1142             break label_3;
1143           }
1144           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1145           case WHITESPACE:
1146             jj_consume_token(WHITESPACE);
1147             break;
1148           case NEWLINE:
1149             jj_consume_token(NEWLINE);
1150             break;
1151           default:
1152             jj_la1[13] = jj_gen;
1153             jj_consume_token(-1);
1154             throw new ParseException();
1155           }
1156         }
1157         jj_consume_token(LPAREN);
1158         label_4:
1159         while (true) {
1160           if (!isRightParenthesis()) {
1161             ;
1162           } else {
1163             break label_4;
1164           }
1165           label_5:
1166           while (true) {
1167             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1168             case WHITESPACE:
1169             case NEWLINE:
1170               ;
1171               break;
1172             default:
1173               jj_la1[14] = jj_gen;
1174               break label_5;
1175             }
1176             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1177             case WHITESPACE:
1178               jj_consume_token(WHITESPACE);
1179               break;
1180             case NEWLINE:
1181               jj_consume_token(NEWLINE);
1182               break;
1183             default:
1184               jj_la1[15] = jj_gen;
1185               jj_consume_token(-1);
1186               throw new ParseException();
1187             }
1188           }
1189           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1190           case COMMA:
1191             jj_consume_token(COMMA);
1192             label_6:
1193             while (true) {
1194               switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1195               case WHITESPACE:
1196               case NEWLINE:
1197                 ;
1198                 break;
1199               default:
1200                 jj_la1[16] = jj_gen;
1201                 break label_6;
1202               }
1203               switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1204               case WHITESPACE:
1205                 jj_consume_token(WHITESPACE);
1206                 break;
1207               case NEWLINE:
1208                 jj_consume_token(NEWLINE);
1209                 break;
1210               default:
1211                 jj_la1[17] = jj_gen;
1212                 jj_consume_token(-1);
1213                 throw new ParseException();
1214               }
1215             }
1216             break;
1217           default:
1218             jj_la1[18] = jj_gen;
1219             ;
1220           }
1221           if (jj_2_6(1)) {
1222             if (isMacro && isAssignment()) {
1223               DirectiveAssign();
1224               label_7:
1225               while (true) {
1226                 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1227                 case WHITESPACE:
1228                 case NEWLINE:
1229                   ;
1230                   break;
1231                 default:
1232                   jj_la1[19] = jj_gen;
1233                   break label_7;
1234                 }
1235                 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1236                 case WHITESPACE:
1237                   jj_consume_token(WHITESPACE);
1238                   break;
1239                 case NEWLINE:
1240                   jj_consume_token(NEWLINE);
1241                   break;
1242                 default:
1243                   jj_la1[20] = jj_gen;
1244                   jj_consume_token(-1);
1245                   throw new ParseException();
1246                 }
1247               }
1248               jj_consume_token(EQUALS);
1249               label_8:
1250               while (true) {
1251                 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1252                 case WHITESPACE:
1253                 case NEWLINE:
1254                   ;
1255                   break;
1256                 default:
1257                   jj_la1[21] = jj_gen;
1258                   break label_8;
1259                 }
1260                 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1261                 case WHITESPACE:
1262                   jj_consume_token(WHITESPACE);
1263                   break;
1264                 case NEWLINE:
1265                   jj_consume_token(NEWLINE);
1266                   break;
1267                 default:
1268                   jj_la1[22] = jj_gen;
1269                   jj_consume_token(-1);
1270                   throw new ParseException();
1271                 }
1272               }
1273                   argtypes.add(ParserTreeConstants.JJTDIRECTIVEASSIGN);
1274             } else {
1275               ;
1276             }
1277             if (!isRightParenthesis()) {
1278 
1279             } else {
1280               jj_consume_token(-1);
1281               throw new ParseException();
1282             }
1283             argType = DirectiveArg();
1284                   argtypes.add(argType);
1285                   if (d == null && argType == ParserTreeConstants.JJTWORD)
1286                   {
1287                       if (isVM)
1288                       {
1289                           {if (true) throw new MacroParseException("Invalid argument "
1290                               + (argPos+1) + " in macro call " + id.image, currentTemplate.getName(), id);}
1291                       }
1292                   }
1293                   argPos++;
1294           } else {
1295             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1296             case SINGLE_LINE_COMMENT_START:
1297                 if (!isMacro)
1298                 {
1299                     // We only allow line comments in macro definitions for now
1300                     {if (true) throw new MacroParseException("A Line comment is not allowed in " + id.image
1301                         + " arguments", currentTemplate.getName(), id);}
1302                 }
1303               jj_consume_token(SINGLE_LINE_COMMENT_START);
1304               switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1305               case SINGLE_LINE_COMMENT:
1306                 jj_consume_token(SINGLE_LINE_COMMENT);
1307                 break;
1308               default:
1309                 jj_la1[23] = jj_gen;
1310                 ;
1311               }
1312               break;
1313             default:
1314               jj_la1[24] = jj_gen;
1315               jj_consume_token(-1);
1316               throw new ParseException();
1317             }
1318           }
1319         }
1320         label_9:
1321         while (true) {
1322           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1323           case WHITESPACE:
1324           case NEWLINE:
1325             ;
1326             break;
1327           default:
1328             jj_la1[25] = jj_gen;
1329             break label_9;
1330           }
1331           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1332           case WHITESPACE:
1333             jj_consume_token(WHITESPACE);
1334             break;
1335           case NEWLINE:
1336             jj_consume_token(NEWLINE);
1337             break;
1338           default:
1339             jj_la1[26] = jj_gen;
1340             jj_consume_token(-1);
1341             throw new ParseException();
1342           }
1343         }
1344         jj_consume_token(RPAREN);
1345           hasParentheses = true;
1346       } else {
1347           token_source.stateStackPop();
1348       }
1349       afterNewline = false;
1350       if (jj_2_7(2) && (directiveType != Directive.LINE || newlineAtStart && rsvc.getSpaceGobbling() != SpaceGobbling.BC || rsvc.getSpaceGobbling() == SpaceGobbling.BC && hasParentheses || d != null && (d instanceof Include || d instanceof Parse))) {
1351         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1352         case WHITESPACE:
1353           t = jj_consume_token(WHITESPACE);
1354           break;
1355         default:
1356           jj_la1[27] = jj_gen;
1357           ;
1358         }
1359         u = jj_consume_token(NEWLINE);
1360           afterNewline = true;
1361           if (directiveType == Directive.LINE)
1362           {
1363               jjtn000.setPostfix(t == null ? u.image : t.image + u.image);
1364           }
1365           else
1366           {
1367               blockPrefix = (t == null ? u.image : t.image + u.image);
1368           }
1369           t = u = null;
1370       } else {
1371         ;
1372       }
1373         if (d != null)
1374         {
1375             d.checkArgs(argtypes, id, currentTemplate.getName());
1376         }
1377         if (directiveType  == Directive.LINE)
1378         {
1379             {if (true) return afterNewline;}
1380         }
1381         ASTBlock jjtn001 = new ASTBlock(this, JJTBLOCK);
1382         boolean jjtc001 = true;
1383         jjtree.openNodeScope(jjtn001);
1384       try {
1385         label_10:
1386         while (true) {
1387           if (getToken(1).kind != END && getToken(1).kind != ELSE && ( !afterNewline || getToken(1).kind != WHITESPACE || getToken(2).kind != END && getToken(2).kind != ELSE )) {
1388             ;
1389           } else {
1390             break label_10;
1391           }
1392           afterNewline = Statement(afterNewline);
1393         }
1394           jjtree.closeNodeScope(jjtn001, true);
1395           jjtc001 = false;
1396             block = jjtn001;
1397             block.setPrefix(blockPrefix);
1398             blockPrefix = "";
1399       } catch (Throwable jjte001) {
1400         if (jjtc001) {
1401           jjtree.clearNodeScope(jjtn001);
1402           jjtc001 = false;
1403         } else {
1404           jjtree.popNode();
1405         }
1406         if (jjte001 instanceof RuntimeException) {
1407           {if (true) throw (RuntimeException)jjte001;}
1408         }
1409         if (jjte001 instanceof ParseException) {
1410           {if (true) throw (ParseException)jjte001;}
1411         }
1412         {if (true) throw (Error)jjte001;}
1413       } finally {
1414         if (jjtc001) {
1415           jjtree.closeNodeScope(jjtn001, true);
1416         }
1417       }
1418       if (jj_2_8(1) && (afterNewline)) {
1419         t = jj_consume_token(WHITESPACE);
1420           block.setPostfix(t.image);
1421           t = null;
1422       } else {
1423         ;
1424       }
1425       if (d != null && (d instanceof Foreach) && getToken(1).kind == ELSE) {
1426         _else = jj_consume_token(ELSE);
1427             ASTBlock jjtn002 = new ASTBlock(this, JJTBLOCK);
1428             boolean jjtc002 = true;
1429             jjtree.openNodeScope(jjtn002);
1430         try {
1431           if (jj_2_9(2)) {
1432             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1433             case WHITESPACE:
1434               t = jj_consume_token(WHITESPACE);
1435               break;
1436             default:
1437               jj_la1[28] = jj_gen;
1438               ;
1439             }
1440             u = jj_consume_token(NEWLINE);
1441                   jjtn002.setPrefix(t == null ? u.image : t.image + u.image);
1442                   t = u = null;
1443                   afterNewline = true;
1444           } else {
1445             ;
1446           }
1447           label_11:
1448           while (true) {
1449             if (getToken(1).kind != END && (!afterNewline || getToken(1).kind != WHITESPACE || getToken(2).kind != END)) {
1450               ;
1451             } else {
1452               break label_11;
1453             }
1454             afterNewline = Statement(afterNewline);
1455           }
1456               jjtree.closeNodeScope(jjtn002, true);
1457               jjtc002 = false;
1458                 elseBlock = jjtn002;
1459         } catch (Throwable jjte002) {
1460             if (jjtc002) {
1461               jjtree.clearNodeScope(jjtn002);
1462               jjtc002 = false;
1463             } else {
1464               jjtree.popNode();
1465             }
1466             if (jjte002 instanceof RuntimeException) {
1467               {if (true) throw (RuntimeException)jjte002;}
1468             }
1469             if (jjte002 instanceof ParseException) {
1470               {if (true) throw (ParseException)jjte002;}
1471             }
1472             {if (true) throw (Error)jjte002;}
1473         } finally {
1474             if (jjtc002) {
1475               jjtree.closeNodeScope(jjtn002, true);
1476             }
1477         }
1478               int pos = _else.image.lastIndexOf(hash);
1479               if (pos > 0)
1480               {
1481                   block.setMorePostfix(_else.image.substring(0, pos));
1482               }
1483               block = elseBlock;
1484       } else {
1485         ;
1486       }
1487       if (jj_2_10(1) && (afterNewline)) {
1488         t = jj_consume_token(WHITESPACE);
1489           block.setPostfix(t.image);
1490           t = null;
1491           afterNewline = false;
1492       } else {
1493         ;
1494       }
1495       end = jj_consume_token(END);
1496         afterNewline = false;
1497       if (jj_2_11(2) && (newlineAtStart || rsvc.getSpaceGobbling() == SpaceGobbling.BC)) {
1498         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1499         case WHITESPACE:
1500           t = jj_consume_token(WHITESPACE);
1501           break;
1502         default:
1503           jj_la1[29] = jj_gen;
1504           ;
1505         }
1506         u = jj_consume_token(NEWLINE);
1507             jjtn000.setPostfix(t == null ? u.image : t.image + u.image);
1508             t = u = null;
1509             afterNewline = true;
1510       } else {
1511         ;
1512       }
1513           int pos = end.image.lastIndexOf(hash);
1514           if (pos > 0)
1515           {
1516               block.setMorePostfix(end.image.substring(0, pos));
1517           }
1518       jjtree.closeNodeScope(jjtn000, true);
1519       jjtc000 = false;
1520         /*
1521          *  VM : if we are processing a #macro directive, we need to
1522          *     process the block.  In truth, I can just register the name
1523          *     and do the work later when init-ing.  That would work
1524          *     as long as things were always defined before use.  This way
1525          *     we don't have to worry about forward references and such...
1526          */
1527         if (isMacro)
1528         {
1529             // Add the macro name so that we can peform escape processing
1530             // on defined macros
1531             String macroName = jjtn000.jjtGetChild(0).getFirstToken().image;
1532             macroNames.put(macroName, macroName);
1533         }
1534         if (d != null)
1535         {
1536             d.checkArgs(argtypes, id, currentTemplate.getName());
1537         }
1538         /*
1539          *  VM : end
1540          */
1541         {if (true) return afterNewline;}
1542     } catch (Throwable jjte000) {
1543       if (jjtc000) {
1544         jjtree.clearNodeScope(jjtn000);
1545         jjtc000 = false;
1546       } else {
1547         jjtree.popNode();
1548       }
1549       if (jjte000 instanceof RuntimeException) {
1550         {if (true) throw (RuntimeException)jjte000;}
1551       }
1552       if (jjte000 instanceof ParseException) {
1553         {if (true) throw (ParseException)jjte000;}
1554       }
1555       {if (true) throw (Error)jjte000;}
1556     } finally {
1557       if (jjtc000) {
1558         jjtree.closeNodeScope(jjtn000, true);
1559       }
1560     }
1561     throw new Error("Missing return statement in function");
1562   }
1563 
1564 /**
1565  * for creating a map in a #set
1566  *
1567  *  #set($foo = {$foo : $bar, $blargh : $thingy})
1568  */
Map()1569   final public void Map() throws ParseException {
1570               /*@bgen(jjtree) Map */
1571   ASTMap jjtn000 = new ASTMap(this, JJTMAP);
1572   boolean jjtc000 = true;
1573   jjtree.openNodeScope(jjtn000);
1574     try {
1575       jj_consume_token(LEFT_CURLEY);
1576       if (jj_2_12(2147483647)) {
1577         Parameter();
1578         jj_consume_token(COLON);
1579         Parameter();
1580         label_12:
1581         while (true) {
1582           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1583           case COMMA:
1584             ;
1585             break;
1586           default:
1587             jj_la1[30] = jj_gen;
1588             break label_12;
1589           }
1590           jj_consume_token(COMMA);
1591           Parameter();
1592           jj_consume_token(COLON);
1593           Parameter();
1594         }
1595       } else {
1596         label_13:
1597         while (true) {
1598           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1599           case WHITESPACE:
1600           case NEWLINE:
1601             ;
1602             break;
1603           default:
1604             jj_la1[31] = jj_gen;
1605             break label_13;
1606           }
1607           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1608           case WHITESPACE:
1609             jj_consume_token(WHITESPACE);
1610             break;
1611           case NEWLINE:
1612             jj_consume_token(NEWLINE);
1613             break;
1614           default:
1615             jj_la1[32] = jj_gen;
1616             jj_consume_token(-1);
1617             throw new ParseException();
1618           }
1619         }
1620       }
1621       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1622       case RIGHT_CURLEY:
1623         jj_consume_token(RIGHT_CURLEY);
1624         break;
1625       case RCURLY:
1626         jj_consume_token(RCURLY);
1627         break;
1628       default:
1629         jj_la1[33] = jj_gen;
1630         jj_consume_token(-1);
1631         throw new ParseException();
1632       }
1633     } catch (Throwable jjte000) {
1634       if (jjtc000) {
1635         jjtree.clearNodeScope(jjtn000);
1636         jjtc000 = false;
1637       } else {
1638         jjtree.popNode();
1639       }
1640       if (jjte000 instanceof RuntimeException) {
1641         {if (true) throw (RuntimeException)jjte000;}
1642       }
1643       if (jjte000 instanceof ParseException) {
1644         {if (true) throw (ParseException)jjte000;}
1645       }
1646       {if (true) throw (Error)jjte000;}
1647     } finally {
1648       if (jjtc000) {
1649         jjtree.closeNodeScope(jjtn000, true);
1650       }
1651     }
1652   }
1653 
ObjectArray()1654   final public void ObjectArray() throws ParseException {
1655                       /*@bgen(jjtree) ObjectArray */
1656   ASTObjectArray jjtn000 = new ASTObjectArray(this, JJTOBJECTARRAY);
1657   boolean jjtc000 = true;
1658   jjtree.openNodeScope(jjtn000);
1659     try {
1660       jj_consume_token(LBRACKET);
1661       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1662       case LBRACKET:
1663       case LEFT_CURLEY:
1664       case WHITESPACE:
1665       case NEWLINE:
1666       case STRING_LITERAL:
1667       case TRUE:
1668       case FALSE:
1669       case INTEGER_LITERAL:
1670       case FLOATING_POINT_LITERAL:
1671       case IDENTIFIER:
1672       case OLD_IDENTIFIER:
1673       case LCURLY:
1674         Parameter();
1675         label_14:
1676         while (true) {
1677           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1678           case COMMA:
1679             ;
1680             break;
1681           default:
1682             jj_la1[34] = jj_gen;
1683             break label_14;
1684           }
1685           jj_consume_token(COMMA);
1686           Parameter();
1687         }
1688         break;
1689       default:
1690         jj_la1[35] = jj_gen;
1691         ;
1692       }
1693       jj_consume_token(RBRACKET);
1694     } catch (Throwable jjte000) {
1695       if (jjtc000) {
1696         jjtree.clearNodeScope(jjtn000);
1697         jjtc000 = false;
1698       } else {
1699         jjtree.popNode();
1700       }
1701       if (jjte000 instanceof RuntimeException) {
1702         {if (true) throw (RuntimeException)jjte000;}
1703       }
1704       if (jjte000 instanceof ParseException) {
1705         {if (true) throw (ParseException)jjte000;}
1706       }
1707       {if (true) throw (Error)jjte000;}
1708     } finally {
1709       if (jjtc000) {
1710         jjtree.closeNodeScope(jjtn000, true);
1711       }
1712     }
1713   }
1714 
1715 /**
1716  *  supports the [n..m] vector generator for use in
1717  *  the #foreach() to generate measured ranges w/o
1718  *  needing explicit support from the app/servlet
1719  */
IntegerRange()1720   final public void IntegerRange() throws ParseException {
1721                        /*@bgen(jjtree) IntegerRange */
1722   ASTIntegerRange jjtn000 = new ASTIntegerRange(this, JJTINTEGERRANGE);
1723   boolean jjtc000 = true;
1724   jjtree.openNodeScope(jjtn000);
1725     try {
1726       jj_consume_token(LBRACKET);
1727       label_15:
1728       while (true) {
1729         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1730         case WHITESPACE:
1731         case NEWLINE:
1732           ;
1733           break;
1734         default:
1735           jj_la1[36] = jj_gen;
1736           break label_15;
1737         }
1738         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1739         case WHITESPACE:
1740           jj_consume_token(WHITESPACE);
1741           break;
1742         case NEWLINE:
1743           jj_consume_token(NEWLINE);
1744           break;
1745         default:
1746           jj_la1[37] = jj_gen;
1747           jj_consume_token(-1);
1748           throw new ParseException();
1749         }
1750       }
1751       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1752       case IDENTIFIER:
1753       case OLD_IDENTIFIER:
1754       case LCURLY:
1755         Reference();
1756         break;
1757       case INTEGER_LITERAL:
1758         IntegerLiteral();
1759         break;
1760       default:
1761         jj_la1[38] = jj_gen;
1762         jj_consume_token(-1);
1763         throw new ParseException();
1764       }
1765       label_16:
1766       while (true) {
1767         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1768         case WHITESPACE:
1769         case NEWLINE:
1770           ;
1771           break;
1772         default:
1773           jj_la1[39] = jj_gen;
1774           break label_16;
1775         }
1776         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1777         case WHITESPACE:
1778           jj_consume_token(WHITESPACE);
1779           break;
1780         case NEWLINE:
1781           jj_consume_token(NEWLINE);
1782           break;
1783         default:
1784           jj_la1[40] = jj_gen;
1785           jj_consume_token(-1);
1786           throw new ParseException();
1787         }
1788       }
1789       jj_consume_token(DOUBLEDOT);
1790       label_17:
1791       while (true) {
1792         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1793         case WHITESPACE:
1794         case NEWLINE:
1795           ;
1796           break;
1797         default:
1798           jj_la1[41] = jj_gen;
1799           break label_17;
1800         }
1801         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1802         case WHITESPACE:
1803           jj_consume_token(WHITESPACE);
1804           break;
1805         case NEWLINE:
1806           jj_consume_token(NEWLINE);
1807           break;
1808         default:
1809           jj_la1[42] = jj_gen;
1810           jj_consume_token(-1);
1811           throw new ParseException();
1812         }
1813       }
1814       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1815       case IDENTIFIER:
1816       case OLD_IDENTIFIER:
1817       case LCURLY:
1818         Reference();
1819         break;
1820       case INTEGER_LITERAL:
1821         IntegerLiteral();
1822         break;
1823       default:
1824         jj_la1[43] = jj_gen;
1825         jj_consume_token(-1);
1826         throw new ParseException();
1827       }
1828       label_18:
1829       while (true) {
1830         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1831         case WHITESPACE:
1832         case NEWLINE:
1833           ;
1834           break;
1835         default:
1836           jj_la1[44] = jj_gen;
1837           break label_18;
1838         }
1839         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1840         case WHITESPACE:
1841           jj_consume_token(WHITESPACE);
1842           break;
1843         case NEWLINE:
1844           jj_consume_token(NEWLINE);
1845           break;
1846         default:
1847           jj_la1[45] = jj_gen;
1848           jj_consume_token(-1);
1849           throw new ParseException();
1850         }
1851       }
1852       jj_consume_token(RBRACKET);
1853     } catch (Throwable jjte000) {
1854       if (jjtc000) {
1855         jjtree.clearNodeScope(jjtn000);
1856         jjtc000 = false;
1857       } else {
1858         jjtree.popNode();
1859       }
1860       if (jjte000 instanceof RuntimeException) {
1861         {if (true) throw (RuntimeException)jjte000;}
1862       }
1863       if (jjte000 instanceof ParseException) {
1864         {if (true) throw (ParseException)jjte000;}
1865       }
1866       {if (true) throw (Error)jjte000;}
1867     } finally {
1868       if (jjtc000) {
1869         jjtree.closeNodeScope(jjtn000, true);
1870       }
1871     }
1872   }
1873 
1874 /**
1875  * A Simplified parameter more suitable for an index position: $foo[$index]
1876  */
IndexParameter()1877   final public void IndexParameter() throws ParseException {
1878     label_19:
1879     while (true) {
1880       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1881       case WHITESPACE:
1882       case NEWLINE:
1883         ;
1884         break;
1885       default:
1886         jj_la1[46] = jj_gen;
1887         break label_19;
1888       }
1889       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1890       case WHITESPACE:
1891         jj_consume_token(WHITESPACE);
1892         break;
1893       case NEWLINE:
1894         jj_consume_token(NEWLINE);
1895         break;
1896       default:
1897         jj_la1[47] = jj_gen;
1898         jj_consume_token(-1);
1899         throw new ParseException();
1900       }
1901     }
1902     Expression();
1903     label_20:
1904     while (true) {
1905       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1906       case WHITESPACE:
1907       case NEWLINE:
1908         ;
1909         break;
1910       default:
1911         jj_la1[48] = jj_gen;
1912         break label_20;
1913       }
1914       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1915       case WHITESPACE:
1916         jj_consume_token(WHITESPACE);
1917         break;
1918       case NEWLINE:
1919         jj_consume_token(NEWLINE);
1920         break;
1921       default:
1922         jj_la1[49] = jj_gen;
1923         jj_consume_token(-1);
1924         throw new ParseException();
1925       }
1926     }
1927   }
1928 
1929 /**
1930  * This method has yet to be fully implemented
1931  * but will allow arbitrarily nested method
1932  * calls
1933  */
Parameter()1934   final public void Parameter() throws ParseException {
1935     label_21:
1936     while (true) {
1937       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1938       case WHITESPACE:
1939       case NEWLINE:
1940         ;
1941         break;
1942       default:
1943         jj_la1[50] = jj_gen;
1944         break label_21;
1945       }
1946       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1947       case WHITESPACE:
1948         jj_consume_token(WHITESPACE);
1949         break;
1950       case NEWLINE:
1951         jj_consume_token(NEWLINE);
1952         break;
1953       default:
1954         jj_la1[51] = jj_gen;
1955         jj_consume_token(-1);
1956         throw new ParseException();
1957       }
1958     }
1959     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1960     case STRING_LITERAL:
1961       StringLiteral();
1962       break;
1963     case INTEGER_LITERAL:
1964       IntegerLiteral();
1965       break;
1966     default:
1967       jj_la1[52] = jj_gen;
1968       if (jj_2_13(2147483647)) {
1969         IntegerRange();
1970       } else {
1971         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1972         case LEFT_CURLEY:
1973           Map();
1974           break;
1975         case LBRACKET:
1976           ObjectArray();
1977           break;
1978         case TRUE:
1979           True();
1980           break;
1981         case FALSE:
1982           False();
1983           break;
1984         case IDENTIFIER:
1985         case OLD_IDENTIFIER:
1986         case LCURLY:
1987           Reference();
1988           break;
1989         case FLOATING_POINT_LITERAL:
1990           FloatingPointLiteral();
1991           break;
1992         default:
1993           jj_la1[53] = jj_gen;
1994           jj_consume_token(-1);
1995           throw new ParseException();
1996         }
1997       }
1998     }
1999     label_22:
2000     while (true) {
2001       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2002       case WHITESPACE:
2003       case NEWLINE:
2004         ;
2005         break;
2006       default:
2007         jj_la1[54] = jj_gen;
2008         break label_22;
2009       }
2010       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2011       case WHITESPACE:
2012         jj_consume_token(WHITESPACE);
2013         break;
2014       case NEWLINE:
2015         jj_consume_token(NEWLINE);
2016         break;
2017       default:
2018         jj_la1[55] = jj_gen;
2019         jj_consume_token(-1);
2020         throw new ParseException();
2021       }
2022     }
2023   }
2024 
2025 /**
2026  * This method has yet to be fully implemented
2027  * but will allow arbitrarily nested method
2028  * calls
2029  */
Method()2030   final public void Method() throws ParseException {
2031                  /*@bgen(jjtree) Method */
2032   ASTMethod jjtn000 = new ASTMethod(this, JJTMETHOD);
2033   boolean jjtc000 = true;
2034   jjtree.openNodeScope(jjtn000);
2035     try {
2036       Identifier();
2037       jj_consume_token(LPAREN);
2038       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2039       case LBRACKET:
2040       case LEFT_CURLEY:
2041       case LPAREN:
2042       case WHITESPACE:
2043       case NEWLINE:
2044       case STRING_LITERAL:
2045       case TRUE:
2046       case FALSE:
2047       case MINUS:
2048       case LOGICAL_NOT:
2049       case INTEGER_LITERAL:
2050       case FLOATING_POINT_LITERAL:
2051       case IDENTIFIER:
2052       case OLD_IDENTIFIER:
2053       case LCURLY:
2054         Expression();
2055         label_23:
2056         while (true) {
2057           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2058           case COMMA:
2059             ;
2060             break;
2061           default:
2062             jj_la1[56] = jj_gen;
2063             break label_23;
2064           }
2065           jj_consume_token(COMMA);
2066           Expression();
2067         }
2068         break;
2069       default:
2070         jj_la1[57] = jj_gen;
2071         ;
2072       }
2073       jj_consume_token(REFMOD2_RPAREN);
2074     } catch (Throwable jjte000) {
2075      if (jjtc000) {
2076        jjtree.clearNodeScope(jjtn000);
2077        jjtc000 = false;
2078      } else {
2079        jjtree.popNode();
2080      }
2081      if (jjte000 instanceof RuntimeException) {
2082        {if (true) throw (RuntimeException)jjte000;}
2083      }
2084      if (jjte000 instanceof ParseException) {
2085        {if (true) throw (ParseException)jjte000;}
2086      }
2087      {if (true) throw (Error)jjte000;}
2088     } finally {
2089      if (jjtc000) {
2090        jjtree.closeNodeScope(jjtn000, true);
2091      }
2092     }
2093   }
2094 
Index()2095   final public void Index() throws ParseException {
2096                 /*@bgen(jjtree) Index */
2097   ASTIndex jjtn000 = new ASTIndex(this, JJTINDEX);
2098   boolean jjtc000 = true;
2099   jjtree.openNodeScope(jjtn000);
2100     try {
2101       jj_consume_token(INDEX_LBRACKET);
2102       IndexParameter();
2103       jj_consume_token(INDEX_RBRACKET);
2104     } catch (Throwable jjte000) {
2105      if (jjtc000) {
2106        jjtree.clearNodeScope(jjtn000);
2107        jjtc000 = false;
2108      } else {
2109        jjtree.popNode();
2110      }
2111      if (jjte000 instanceof RuntimeException) {
2112        {if (true) throw (RuntimeException)jjte000;}
2113      }
2114      if (jjte000 instanceof ParseException) {
2115        {if (true) throw (ParseException)jjte000;}
2116      }
2117      {if (true) throw (Error)jjte000;}
2118     } finally {
2119      if (jjtc000) {
2120        jjtree.closeNodeScope(jjtn000, true);
2121      }
2122     }
2123   }
2124 
Reference()2125   final public void Reference() throws ParseException {
2126                     /*@bgen(jjtree) Reference */
2127   ASTReference jjtn000 = new ASTReference(this, JJTREFERENCE);
2128   boolean jjtc000 = true;
2129   jjtree.openNodeScope(jjtn000);
2130     try {
2131       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2132       case IDENTIFIER:
2133       case OLD_IDENTIFIER:
2134         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2135         case IDENTIFIER:
2136           jj_consume_token(IDENTIFIER);
2137           break;
2138         case OLD_IDENTIFIER:
2139           jj_consume_token(OLD_IDENTIFIER);
2140           break;
2141         default:
2142           jj_la1[58] = jj_gen;
2143           jj_consume_token(-1);
2144           throw new ParseException();
2145         }
2146         label_24:
2147         while (true) {
2148           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2149           case INDEX_LBRACKET:
2150             ;
2151             break;
2152           default:
2153             jj_la1[59] = jj_gen;
2154             break label_24;
2155           }
2156           Index();
2157         }
2158         label_25:
2159         while (true) {
2160           if (jj_2_14(2)) {
2161             ;
2162           } else {
2163             break label_25;
2164           }
2165           jj_consume_token(DOT);
2166           if (jj_2_15(3)) {
2167             Method();
2168           } else {
2169             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2170             case IDENTIFIER:
2171             case OLD_IDENTIFIER:
2172               Identifier();
2173               break;
2174             default:
2175               jj_la1[60] = jj_gen;
2176               jj_consume_token(-1);
2177               throw new ParseException();
2178             }
2179           }
2180           label_26:
2181           while (true) {
2182             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2183             case INDEX_LBRACKET:
2184               ;
2185               break;
2186             default:
2187               jj_la1[61] = jj_gen;
2188               break label_26;
2189             }
2190             Index();
2191           }
2192         }
2193         break;
2194       case LCURLY:
2195         jj_consume_token(LCURLY);
2196         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2197         case IDENTIFIER:
2198           jj_consume_token(IDENTIFIER);
2199           break;
2200         case OLD_IDENTIFIER:
2201           jj_consume_token(OLD_IDENTIFIER);
2202           break;
2203         default:
2204           jj_la1[62] = jj_gen;
2205           jj_consume_token(-1);
2206           throw new ParseException();
2207         }
2208         label_27:
2209         while (true) {
2210           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2211           case INDEX_LBRACKET:
2212             ;
2213             break;
2214           default:
2215             jj_la1[63] = jj_gen;
2216             break label_27;
2217           }
2218           Index();
2219         }
2220         label_28:
2221         while (true) {
2222           if (jj_2_16(2)) {
2223             ;
2224           } else {
2225             break label_28;
2226           }
2227           jj_consume_token(DOT);
2228           if (jj_2_17(3)) {
2229             Method();
2230           } else {
2231             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2232             case IDENTIFIER:
2233             case OLD_IDENTIFIER:
2234               Identifier();
2235               break;
2236             default:
2237               jj_la1[64] = jj_gen;
2238               jj_consume_token(-1);
2239               throw new ParseException();
2240             }
2241           }
2242           label_29:
2243           while (true) {
2244             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2245             case INDEX_LBRACKET:
2246               ;
2247               break;
2248             default:
2249               jj_la1[65] = jj_gen;
2250               break label_29;
2251             }
2252             Index();
2253           }
2254         }
2255         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2256         case PIPE:
2257           jj_consume_token(PIPE);
2258           Expression();
2259           break;
2260         default:
2261           jj_la1[66] = jj_gen;
2262           ;
2263         }
2264         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2265         case RCURLY:
2266           jj_consume_token(RCURLY);
2267           break;
2268         case RIGHT_CURLEY:
2269           jj_consume_token(RIGHT_CURLEY);
2270           break;
2271         default:
2272           jj_la1[67] = jj_gen;
2273           jj_consume_token(-1);
2274           throw new ParseException();
2275         }
2276         break;
2277       default:
2278         jj_la1[68] = jj_gen;
2279         jj_consume_token(-1);
2280         throw new ParseException();
2281       }
2282     } catch (Throwable jjte000) {
2283         if (jjtc000) {
2284           jjtree.clearNodeScope(jjtn000);
2285           jjtc000 = false;
2286         } else {
2287           jjtree.popNode();
2288         }
2289         if (jjte000 instanceof RuntimeException) {
2290           {if (true) throw (RuntimeException)jjte000;}
2291         }
2292         if (jjte000 instanceof ParseException) {
2293           {if (true) throw (ParseException)jjte000;}
2294         }
2295         {if (true) throw (Error)jjte000;}
2296     } finally {
2297         if (jjtc000) {
2298           jjtree.closeNodeScope(jjtn000, true);
2299         }
2300     }
2301   }
2302 
True()2303   final public void True() throws ParseException {
2304                /*@bgen(jjtree) True */
2305   ASTTrue jjtn000 = new ASTTrue(this, JJTTRUE);
2306   boolean jjtc000 = true;
2307   jjtree.openNodeScope(jjtn000);
2308     try {
2309       jj_consume_token(TRUE);
2310     } finally {
2311       if (jjtc000) {
2312         jjtree.closeNodeScope(jjtn000, true);
2313       }
2314     }
2315   }
2316 
False()2317   final public void False() throws ParseException {
2318                 /*@bgen(jjtree) False */
2319   ASTFalse jjtn000 = new ASTFalse(this, JJTFALSE);
2320   boolean jjtc000 = true;
2321   jjtree.openNodeScope(jjtn000);
2322     try {
2323       jj_consume_token(FALSE);
2324     } finally {
2325       if (jjtc000) {
2326         jjtree.closeNodeScope(jjtn000, true);
2327       }
2328     }
2329   }
2330 
2331 /**
2332  * This method is responsible for allowing
2333  * all non-grammar text to pass through
2334  * unscathed.
2335  * @return true if last read token was a newline
2336  */
Text()2337   final public boolean Text() throws ParseException {
2338  /*@bgen(jjtree) Text */
2339     ASTText jjtn000 = new ASTText(this, JJTTEXT);
2340     boolean jjtc000 = true;
2341     jjtree.openNodeScope(jjtn000);Token t = null;
2342     try {
2343       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2344       case TEXT:
2345         jj_consume_token(TEXT);
2346              jjtree.closeNodeScope(jjtn000, true);
2347              jjtc000 = false;
2348              {if (true) return true;}
2349         break;
2350       case DOT:
2351         jj_consume_token(DOT);
2352              jjtree.closeNodeScope(jjtn000, true);
2353              jjtc000 = false;
2354              {if (true) return false;}
2355         break;
2356       case RPAREN:
2357         jj_consume_token(RPAREN);
2358                 jjtree.closeNodeScope(jjtn000, true);
2359                 jjtc000 = false;
2360                 {if (true) return false;}
2361         break;
2362       case LPAREN:
2363         jj_consume_token(LPAREN);
2364                 jjtree.closeNodeScope(jjtn000, true);
2365                 jjtc000 = false;
2366                 {if (true) return false;}
2367         break;
2368       case INTEGER_LITERAL:
2369         jj_consume_token(INTEGER_LITERAL);
2370                          jjtree.closeNodeScope(jjtn000, true);
2371                          jjtc000 = false;
2372                          {if (true) return false;}
2373         break;
2374       case FLOATING_POINT_LITERAL:
2375         jj_consume_token(FLOATING_POINT_LITERAL);
2376                                 jjtree.closeNodeScope(jjtn000, true);
2377                                 jjtc000 = false;
2378                                 {if (true) return false;}
2379         break;
2380       case STRING_LITERAL:
2381         jj_consume_token(STRING_LITERAL);
2382                         jjtree.closeNodeScope(jjtn000, true);
2383                         jjtc000 = false;
2384                         {if (true) return false;}
2385         break;
2386       case ESCAPE:
2387         jj_consume_token(ESCAPE);
2388                 jjtree.closeNodeScope(jjtn000, true);
2389                 jjtc000 = false;
2390                 {if (true) return false;}
2391         break;
2392       case LCURLY:
2393         jj_consume_token(LCURLY);
2394                 jjtree.closeNodeScope(jjtn000, true);
2395                 jjtc000 = false;
2396                 {if (true) return false;}
2397         break;
2398       case RCURLY:
2399         jj_consume_token(RCURLY);
2400                 jjtree.closeNodeScope(jjtn000, true);
2401                 jjtc000 = false;
2402                 {if (true) return false;}
2403         break;
2404       case EMPTY_INDEX:
2405         jj_consume_token(EMPTY_INDEX);
2406                      jjtree.closeNodeScope(jjtn000, true);
2407                      jjtc000 = false;
2408                      {if (true) return false;}
2409         break;
2410       case PIPE:
2411         jj_consume_token(PIPE);
2412               jjtree.closeNodeScope(jjtn000, true);
2413               jjtc000 = false;
2414               {if (true) return false;}
2415         break;
2416       case LONE_SYMBOL:
2417         t = jj_consume_token(LONE_SYMBOL);
2418        jjtree.closeNodeScope(jjtn000, true);
2419        jjtc000 = false;
2420          /* Drop the ending zero-width whitespace */
2421          t.image = t.image.substring(0, t.image.length() - 1); {if (true) return false;}
2422         break;
2423       default:
2424         jj_la1[69] = jj_gen;
2425         jj_consume_token(-1);
2426         throw new ParseException();
2427       }
2428     } finally {
2429       if (jjtc000) {
2430         jjtree.closeNodeScope(jjtn000, true);
2431       }
2432     }
2433     throw new Error("Missing return statement in function");
2434   }
2435 
2436 /* -----------------------------------------------------------------------
2437  *
2438  *  Defined Directive Syntax
2439  *
2440  * ----------------------------------------------------------------------*/
IfStatement(boolean afterNewline)2441   final public boolean IfStatement(boolean afterNewline) throws ParseException {
2442  /*@bgen(jjtree) IfStatement */
2443     ASTIfStatement jjtn000 = new ASTIfStatement(this, JJTIFSTATEMENT);
2444     boolean jjtc000 = true;
2445     jjtree.openNodeScope(jjtn000);Token t = null, u = null, end = null;
2446     ASTBlock lastBlock = null;
2447     boolean newlineAtStart = afterNewline;
2448     try {
2449       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2450       case WHITESPACE:
2451         t = jj_consume_token(WHITESPACE);
2452             // only possible if not after new line
2453             jjtn000.setPrefix(t.image);
2454             t = null;
2455         break;
2456       default:
2457         jj_la1[70] = jj_gen;
2458         ;
2459       }
2460       jj_consume_token(IF_DIRECTIVE);
2461       label_30:
2462       while (true) {
2463         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2464         case WHITESPACE:
2465         case NEWLINE:
2466           ;
2467           break;
2468         default:
2469           jj_la1[71] = jj_gen;
2470           break label_30;
2471         }
2472         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2473         case WHITESPACE:
2474           jj_consume_token(WHITESPACE);
2475           break;
2476         case NEWLINE:
2477           jj_consume_token(NEWLINE);
2478           break;
2479         default:
2480           jj_la1[72] = jj_gen;
2481           jj_consume_token(-1);
2482           throw new ParseException();
2483         }
2484       }
2485       jj_consume_token(LPAREN);
2486       Expression();
2487       jj_consume_token(RPAREN);
2488       ASTBlock jjtn001 = new ASTBlock(this, JJTBLOCK);
2489       boolean jjtc001 = true;
2490       jjtree.openNodeScope(jjtn001);
2491       try {
2492         if (jj_2_18(2)) {
2493           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2494           case WHITESPACE:
2495             t = jj_consume_token(WHITESPACE);
2496             break;
2497           default:
2498             jj_la1[73] = jj_gen;
2499             ;
2500           }
2501           u = jj_consume_token(NEWLINE);
2502             jjtn001.setPrefix(t == null ? u.image : t.image + u.image);
2503             t = u = null;
2504             afterNewline = true;
2505         } else {
2506           ;
2507         }
2508         label_31:
2509         while (true) {
2510           if ((getToken(1).kind != ELSEIF && getToken(1).kind != ELSE && getToken(1).kind != END) &&
2511                         (!afterNewline || getToken(1).kind != WHITESPACE || (getToken(2).kind != ELSEIF && getToken(2).kind != ELSE && getToken(2).kind != END))) {
2512             ;
2513           } else {
2514             break label_31;
2515           }
2516           afterNewline = Statement(afterNewline);
2517         }
2518           jjtree.closeNodeScope(jjtn001, true);
2519           jjtc001 = false;
2520             lastBlock = jjtn001;
2521       } catch (Throwable jjte001) {
2522       if (jjtc001) {
2523         jjtree.clearNodeScope(jjtn001);
2524         jjtc001 = false;
2525       } else {
2526         jjtree.popNode();
2527       }
2528       if (jjte001 instanceof RuntimeException) {
2529         {if (true) throw (RuntimeException)jjte001;}
2530       }
2531       if (jjte001 instanceof ParseException) {
2532         {if (true) throw (ParseException)jjte001;}
2533       }
2534       {if (true) throw (Error)jjte001;}
2535       } finally {
2536       if (jjtc001) {
2537         jjtree.closeNodeScope(jjtn001, true);
2538       }
2539       }
2540       if (getToken(1).kind == ELSEIF || (afterNewline && getToken(1).kind == WHITESPACE && getToken(2).kind == ELSEIF)) {
2541         label_32:
2542         while (true) {
2543           lastBlock = ElseIfStatement(lastBlock, afterNewline);
2544                                                                                                                                                                                               afterNewline = lastBlock.endsWithNewline;
2545           if (getToken(1).kind == ELSEIF || (afterNewline && getToken(1).kind == WHITESPACE && getToken(2).kind == ELSEIF)) {
2546             ;
2547           } else {
2548             break label_32;
2549           }
2550         }
2551       } else {
2552         ;
2553       }
2554       if (getToken(1).kind == ELSE || (afterNewline && getToken(1).kind == WHITESPACE && getToken(2).kind == ELSE)) {
2555         lastBlock = ElseStatement(lastBlock, afterNewline);
2556                                                                                                                                                                                      afterNewline = lastBlock.endsWithNewline;
2557       } else {
2558         ;
2559       }
2560       if (jj_2_19(1) && (afterNewline)) {
2561         t = jj_consume_token(WHITESPACE);
2562             lastBlock.setPostfix(t.image);
2563             t = null;
2564       } else {
2565         ;
2566       }
2567       end = jj_consume_token(END);
2568       afterNewline = false;
2569       if (jj_2_20(2) && (newlineAtStart || rsvc.getSpaceGobbling() == SpaceGobbling.BC)) {
2570         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2571         case WHITESPACE:
2572           t = jj_consume_token(WHITESPACE);
2573           break;
2574         default:
2575           jj_la1[74] = jj_gen;
2576           ;
2577         }
2578         u = jj_consume_token(NEWLINE);
2579              jjtn000.setPostfix(t == null ? u.image : t.image + u.image);
2580              afterNewline = true;
2581       } else {
2582         ;
2583       }
2584       jjtree.closeNodeScope(jjtn000, true);
2585       jjtc000 = false;
2586         int pos = end.image.lastIndexOf(hash);
2587         if (pos > 0)
2588         {
2589             lastBlock.setMorePostfix(end.image.substring(0, pos));
2590         }
2591         {if (true) return afterNewline;}
2592     } catch (Throwable jjte000) {
2593       if (jjtc000) {
2594         jjtree.clearNodeScope(jjtn000);
2595         jjtc000 = false;
2596       } else {
2597         jjtree.popNode();
2598       }
2599       if (jjte000 instanceof RuntimeException) {
2600         {if (true) throw (RuntimeException)jjte000;}
2601       }
2602       if (jjte000 instanceof ParseException) {
2603         {if (true) throw (ParseException)jjte000;}
2604       }
2605       {if (true) throw (Error)jjte000;}
2606     } finally {
2607       if (jjtc000) {
2608         jjtree.closeNodeScope(jjtn000, true);
2609       }
2610     }
2611     throw new Error("Missing return statement in function");
2612   }
2613 
ElseStatement(ASTBlock previousBlock, boolean afterNewline)2614   final public ASTBlock ElseStatement(ASTBlock previousBlock, boolean afterNewline) throws ParseException {
2615  /*@bgen(jjtree) ElseStatement */
2616     ASTElseStatement jjtn000 = new ASTElseStatement(this, JJTELSESTATEMENT);
2617     boolean jjtc000 = true;
2618     jjtree.openNodeScope(jjtn000);Token t = null, u = null, _else = null;
2619     ASTBlock block = null;
2620     try {
2621       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2622       case WHITESPACE:
2623         t = jj_consume_token(WHITESPACE);
2624          previousBlock.setPostfix(t.image);
2625          t = null;
2626         break;
2627       default:
2628         jj_la1[75] = jj_gen;
2629         ;
2630       }
2631       _else = jj_consume_token(ELSE);
2632      ASTBlock jjtn001 = new ASTBlock(this, JJTBLOCK);
2633      boolean jjtc001 = true;
2634      jjtree.openNodeScope(jjtn001);
2635       try {
2636         if (jj_2_21(2)) {
2637           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2638           case WHITESPACE:
2639             t = jj_consume_token(WHITESPACE);
2640             break;
2641           default:
2642             jj_la1[76] = jj_gen;
2643             ;
2644           }
2645           u = jj_consume_token(NEWLINE);
2646            jjtn001.setPrefix(t == null ? u.image : t.image + u.image);
2647            t = u = null;
2648            afterNewline = true;
2649         } else {
2650           ;
2651         }
2652         label_33:
2653         while (true) {
2654           if (getToken(1).kind != END && (!afterNewline || getToken(1).kind != WHITESPACE || getToken(2).kind != END)) {
2655             ;
2656           } else {
2657             break label_33;
2658           }
2659           afterNewline = Statement(afterNewline);
2660         }
2661        jjtree.closeNodeScope(jjtn001, true);
2662        jjtc001 = false;
2663          block = jjtn001;
2664          block.endsWithNewline = afterNewline;
2665       } catch (Throwable jjte001) {
2666      if (jjtc001) {
2667        jjtree.clearNodeScope(jjtn001);
2668        jjtc001 = false;
2669      } else {
2670        jjtree.popNode();
2671      }
2672      if (jjte001 instanceof RuntimeException) {
2673        {if (true) throw (RuntimeException)jjte001;}
2674      }
2675      if (jjte001 instanceof ParseException) {
2676        {if (true) throw (ParseException)jjte001;}
2677      }
2678      {if (true) throw (Error)jjte001;}
2679       } finally {
2680      if (jjtc001) {
2681        jjtree.closeNodeScope(jjtn001, true);
2682      }
2683       }
2684       jjtree.closeNodeScope(jjtn000, true);
2685       jjtc000 = false;
2686         int pos = _else.image.lastIndexOf(hash);
2687         if (pos > 0)
2688         {
2689             previousBlock.setMorePostfix(_else.image.substring(0, pos));
2690         }
2691         {if (true) return block;}
2692     } catch (Throwable jjte000) {
2693      if (jjtc000) {
2694        jjtree.clearNodeScope(jjtn000);
2695        jjtc000 = false;
2696      } else {
2697        jjtree.popNode();
2698      }
2699      if (jjte000 instanceof RuntimeException) {
2700        {if (true) throw (RuntimeException)jjte000;}
2701      }
2702      if (jjte000 instanceof ParseException) {
2703        {if (true) throw (ParseException)jjte000;}
2704      }
2705      {if (true) throw (Error)jjte000;}
2706     } finally {
2707      if (jjtc000) {
2708        jjtree.closeNodeScope(jjtn000, true);
2709      }
2710     }
2711     throw new Error("Missing return statement in function");
2712   }
2713 
ElseIfStatement(ASTBlock previousBlock, boolean afterNewline)2714   final public ASTBlock ElseIfStatement(ASTBlock previousBlock, boolean afterNewline) throws ParseException {
2715  /*@bgen(jjtree) ElseIfStatement */
2716     ASTElseIfStatement jjtn000 = new ASTElseIfStatement(this, JJTELSEIFSTATEMENT);
2717     boolean jjtc000 = true;
2718     jjtree.openNodeScope(jjtn000);Token t = null, u = null, elseif = null;
2719     ASTBlock block = null;
2720     try {
2721       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2722       case WHITESPACE:
2723         t = jj_consume_token(WHITESPACE);
2724         previousBlock.setPostfix(t.image);
2725         t = null;
2726         break;
2727       default:
2728         jj_la1[77] = jj_gen;
2729         ;
2730       }
2731       elseif = jj_consume_token(ELSEIF);
2732       label_34:
2733       while (true) {
2734         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2735         case WHITESPACE:
2736         case NEWLINE:
2737           ;
2738           break;
2739         default:
2740           jj_la1[78] = jj_gen;
2741           break label_34;
2742         }
2743         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2744         case WHITESPACE:
2745           jj_consume_token(WHITESPACE);
2746           break;
2747         case NEWLINE:
2748           jj_consume_token(NEWLINE);
2749           break;
2750         default:
2751           jj_la1[79] = jj_gen;
2752           jj_consume_token(-1);
2753           throw new ParseException();
2754         }
2755       }
2756       jj_consume_token(LPAREN);
2757       Expression();
2758       jj_consume_token(RPAREN);
2759     ASTBlock jjtn001 = new ASTBlock(this, JJTBLOCK);
2760     boolean jjtc001 = true;
2761     jjtree.openNodeScope(jjtn001);
2762       try {
2763         if (jj_2_22(2)) {
2764           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2765           case WHITESPACE:
2766             t = jj_consume_token(WHITESPACE);
2767             break;
2768           default:
2769             jj_la1[80] = jj_gen;
2770             ;
2771           }
2772           u = jj_consume_token(NEWLINE);
2773           jjtn001.setPrefix(t == null ? u.image : t.image + u.image);
2774           t = u = null;
2775           afterNewline = true;
2776         } else {
2777           ;
2778         }
2779         label_35:
2780         while (true) {
2781           if ((getToken(1).kind != ELSEIF && getToken(1).kind != ELSE && getToken(1).kind != END) && (!afterNewline || getToken(1).kind != WHITESPACE || (getToken(2).kind != ELSEIF && getToken(2).kind != ELSE && getToken(2).kind != END))) {
2782             ;
2783           } else {
2784             break label_35;
2785           }
2786           afterNewline = Statement(afterNewline);
2787         }
2788       jjtree.closeNodeScope(jjtn001, true);
2789       jjtc001 = false;
2790         block = jjtn001;
2791         block.endsWithNewline = afterNewline;
2792       } catch (Throwable jjte001) {
2793     if (jjtc001) {
2794       jjtree.clearNodeScope(jjtn001);
2795       jjtc001 = false;
2796     } else {
2797       jjtree.popNode();
2798     }
2799     if (jjte001 instanceof RuntimeException) {
2800       {if (true) throw (RuntimeException)jjte001;}
2801     }
2802     if (jjte001 instanceof ParseException) {
2803       {if (true) throw (ParseException)jjte001;}
2804     }
2805     {if (true) throw (Error)jjte001;}
2806       } finally {
2807     if (jjtc001) {
2808       jjtree.closeNodeScope(jjtn001, true);
2809     }
2810       }
2811     jjtree.closeNodeScope(jjtn000, true);
2812     jjtc000 = false;
2813       int pos = elseif.image.lastIndexOf(hash);
2814       if (pos > 0)
2815       {
2816           previousBlock.setMorePostfix(elseif.image.substring(0, pos));
2817       }
2818       {if (true) return block;}
2819     } catch (Throwable jjte000) {
2820     if (jjtc000) {
2821       jjtree.clearNodeScope(jjtn000);
2822       jjtc000 = false;
2823     } else {
2824       jjtree.popNode();
2825     }
2826     if (jjte000 instanceof RuntimeException) {
2827       {if (true) throw (RuntimeException)jjte000;}
2828     }
2829     if (jjte000 instanceof ParseException) {
2830       {if (true) throw (ParseException)jjte000;}
2831     }
2832     {if (true) throw (Error)jjte000;}
2833     } finally {
2834     if (jjtc000) {
2835       jjtree.closeNodeScope(jjtn000, true);
2836     }
2837     }
2838     throw new Error("Missing return statement in function");
2839   }
2840 
2841 /**
2842  *  Currently support both types of set :
2843  *   #set( expr )
2844  *   #set expr
2845  */
SetDirective(boolean afterNewline)2846   final public boolean SetDirective(boolean afterNewline) throws ParseException {
2847  /*@bgen(jjtree) SetDirective */
2848     ASTSetDirective jjtn000 = new ASTSetDirective(this, JJTSETDIRECTIVE);
2849     boolean jjtc000 = true;
2850     jjtree.openNodeScope(jjtn000);Token t = null, u = null;
2851     boolean endsWithNewline = false;
2852     try {
2853       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2854       case WHITESPACE:
2855         t = jj_consume_token(WHITESPACE);
2856             // only possible after new line
2857             jjtn000.setPrefix(t.image);
2858             t = null;
2859         break;
2860       default:
2861         jj_la1[81] = jj_gen;
2862         ;
2863       }
2864       jj_consume_token(SET_DIRECTIVE);
2865       label_36:
2866       while (true) {
2867         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2868         case WHITESPACE:
2869         case NEWLINE:
2870           ;
2871           break;
2872         default:
2873           jj_la1[82] = jj_gen;
2874           break label_36;
2875         }
2876         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2877         case WHITESPACE:
2878           jj_consume_token(WHITESPACE);
2879           break;
2880         case NEWLINE:
2881           jj_consume_token(NEWLINE);
2882           break;
2883         default:
2884           jj_la1[83] = jj_gen;
2885           jj_consume_token(-1);
2886           throw new ParseException();
2887         }
2888       }
2889       Reference();
2890       label_37:
2891       while (true) {
2892         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2893         case WHITESPACE:
2894         case NEWLINE:
2895           ;
2896           break;
2897         default:
2898           jj_la1[84] = jj_gen;
2899           break label_37;
2900         }
2901         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2902         case WHITESPACE:
2903           jj_consume_token(WHITESPACE);
2904           break;
2905         case NEWLINE:
2906           jj_consume_token(NEWLINE);
2907           break;
2908         default:
2909           jj_la1[85] = jj_gen;
2910           jj_consume_token(-1);
2911           throw new ParseException();
2912         }
2913       }
2914       jj_consume_token(EQUALS);
2915       Expression();
2916       jj_consume_token(RPAREN);
2917         /*
2918          * ensure that inSet is false.  Leads to some amusing bugs...
2919          */
2920 
2921         token_source.setInSet(false);
2922       if (jj_2_23(2) && (afterNewline || rsvc.getSpaceGobbling() == SpaceGobbling.BC)) {
2923         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2924         case WHITESPACE:
2925           t = jj_consume_token(WHITESPACE);
2926           break;
2927         default:
2928           jj_la1[86] = jj_gen;
2929           ;
2930         }
2931         u = jj_consume_token(NEWLINE);
2932              jjtn000.setPostfix(t == null ? u.image : t.image + u.image);
2933              endsWithNewline = true;
2934       } else {
2935         ;
2936       }
2937       jjtree.closeNodeScope(jjtn000, true);
2938       jjtc000 = false;
2939         {if (true) return endsWithNewline;}
2940     } catch (Throwable jjte000) {
2941       if (jjtc000) {
2942         jjtree.clearNodeScope(jjtn000);
2943         jjtc000 = false;
2944       } else {
2945         jjtree.popNode();
2946       }
2947       if (jjte000 instanceof RuntimeException) {
2948         {if (true) throw (RuntimeException)jjte000;}
2949       }
2950       if (jjte000 instanceof ParseException) {
2951         {if (true) throw (ParseException)jjte000;}
2952       }
2953       {if (true) throw (Error)jjte000;}
2954     } finally {
2955       if (jjtc000) {
2956         jjtree.closeNodeScope(jjtn000, true);
2957       }
2958     }
2959     throw new Error("Missing return statement in function");
2960   }
2961 
2962 /* -----------------------------------------------------------------------
2963  *
2964  *  Expression Syntax
2965  *
2966  * ----------------------------------------------------------------------*/
Expression()2967   final public void Expression() throws ParseException {
2968                      /*@bgen(jjtree) Expression */
2969   ASTExpression jjtn000 = new ASTExpression(this, JJTEXPRESSION);
2970   boolean jjtc000 = true;
2971   jjtree.openNodeScope(jjtn000);
2972     try {
2973       ConditionalOrExpression();
2974     } catch (Throwable jjte000) {
2975   if (jjtc000) {
2976     jjtree.clearNodeScope(jjtn000);
2977     jjtc000 = false;
2978   } else {
2979     jjtree.popNode();
2980   }
2981   if (jjte000 instanceof RuntimeException) {
2982     {if (true) throw (RuntimeException)jjte000;}
2983   }
2984   if (jjte000 instanceof ParseException) {
2985     {if (true) throw (ParseException)jjte000;}
2986   }
2987   {if (true) throw (Error)jjte000;}
2988     } finally {
2989   if (jjtc000) {
2990     jjtree.closeNodeScope(jjtn000, true);
2991   }
2992     }
2993   }
2994 
Assignment()2995   final public void Assignment() throws ParseException {
2996                                     /*@bgen(jjtree) #Assignment( 2) */
2997   ASTAssignment jjtn000 = new ASTAssignment(this, JJTASSIGNMENT);
2998   boolean jjtc000 = true;
2999   jjtree.openNodeScope(jjtn000);
3000     try {
3001       PrimaryExpression();
3002       jj_consume_token(EQUALS);
3003       Expression();
3004     } catch (Throwable jjte000) {
3005       if (jjtc000) {
3006         jjtree.clearNodeScope(jjtn000);
3007         jjtc000 = false;
3008       } else {
3009         jjtree.popNode();
3010       }
3011       if (jjte000 instanceof RuntimeException) {
3012         {if (true) throw (RuntimeException)jjte000;}
3013       }
3014       if (jjte000 instanceof ParseException) {
3015         {if (true) throw (ParseException)jjte000;}
3016       }
3017       {if (true) throw (Error)jjte000;}
3018     } finally {
3019       if (jjtc000) {
3020         jjtree.closeNodeScope(jjtn000,  2);
3021       }
3022     }
3023   }
3024 
ConditionalOrExpression()3025   final public void ConditionalOrExpression() throws ParseException {
3026     ConditionalAndExpression();
3027     label_38:
3028     while (true) {
3029       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3030       case LOGICAL_OR_2:
3031       case LOGICAL_OR:
3032         ;
3033         break;
3034       default:
3035         jj_la1[87] = jj_gen;
3036         break label_38;
3037       }
3038       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3039       case LOGICAL_OR:
3040         jj_consume_token(LOGICAL_OR);
3041         break;
3042       case LOGICAL_OR_2:
3043         jj_consume_token(LOGICAL_OR_2);
3044         break;
3045       default:
3046         jj_la1[88] = jj_gen;
3047         jj_consume_token(-1);
3048         throw new ParseException();
3049       }
3050                                          ASTOrNode jjtn001 = new ASTOrNode(this, JJTORNODE);
3051                                          boolean jjtc001 = true;
3052                                          jjtree.openNodeScope(jjtn001);
3053       try {
3054         ConditionalAndExpression();
3055       } catch (Throwable jjte001) {
3056                                          if (jjtc001) {
3057                                            jjtree.clearNodeScope(jjtn001);
3058                                            jjtc001 = false;
3059                                          } else {
3060                                            jjtree.popNode();
3061                                          }
3062                                          if (jjte001 instanceof RuntimeException) {
3063                                            {if (true) throw (RuntimeException)jjte001;}
3064                                          }
3065                                          if (jjte001 instanceof ParseException) {
3066                                            {if (true) throw (ParseException)jjte001;}
3067                                          }
3068                                          {if (true) throw (Error)jjte001;}
3069       } finally {
3070                                          if (jjtc001) {
3071                                            jjtree.closeNodeScope(jjtn001,  2);
3072                                          }
3073       }
3074     }
3075   }
3076 
ConditionalAndExpression()3077   final public void ConditionalAndExpression() throws ParseException {
3078     EqualityExpression();
3079     label_39:
3080     while (true) {
3081       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3082       case LOGICAL_AND:
3083         ;
3084         break;
3085       default:
3086         jj_la1[89] = jj_gen;
3087         break label_39;
3088       }
3089       jj_consume_token(LOGICAL_AND);
3090                     ASTAndNode jjtn001 = new ASTAndNode(this, JJTANDNODE);
3091                     boolean jjtc001 = true;
3092                     jjtree.openNodeScope(jjtn001);
3093       try {
3094         EqualityExpression();
3095       } catch (Throwable jjte001) {
3096                     if (jjtc001) {
3097                       jjtree.clearNodeScope(jjtn001);
3098                       jjtc001 = false;
3099                     } else {
3100                       jjtree.popNode();
3101                     }
3102                     if (jjte001 instanceof RuntimeException) {
3103                       {if (true) throw (RuntimeException)jjte001;}
3104                     }
3105                     if (jjte001 instanceof ParseException) {
3106                       {if (true) throw (ParseException)jjte001;}
3107                     }
3108                     {if (true) throw (Error)jjte001;}
3109       } finally {
3110                     if (jjtc001) {
3111                       jjtree.closeNodeScope(jjtn001,  2);
3112                     }
3113       }
3114     }
3115   }
3116 
EqualityExpression()3117   final public void EqualityExpression() throws ParseException {
3118     RelationalExpression();
3119     label_40:
3120     while (true) {
3121       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3122       case LOGICAL_EQUALS:
3123       case LOGICAL_NOT_EQUALS:
3124         ;
3125         break;
3126       default:
3127         jj_la1[90] = jj_gen;
3128         break label_40;
3129       }
3130       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3131       case LOGICAL_EQUALS:
3132         jj_consume_token(LOGICAL_EQUALS);
3133                           ASTEQNode jjtn001 = new ASTEQNode(this, JJTEQNODE);
3134                           boolean jjtc001 = true;
3135                           jjtree.openNodeScope(jjtn001);
3136         try {
3137           RelationalExpression();
3138         } catch (Throwable jjte001) {
3139                           if (jjtc001) {
3140                             jjtree.clearNodeScope(jjtn001);
3141                             jjtc001 = false;
3142                           } else {
3143                             jjtree.popNode();
3144                           }
3145                           if (jjte001 instanceof RuntimeException) {
3146                             {if (true) throw (RuntimeException)jjte001;}
3147                           }
3148                           if (jjte001 instanceof ParseException) {
3149                             {if (true) throw (ParseException)jjte001;}
3150                           }
3151                           {if (true) throw (Error)jjte001;}
3152         } finally {
3153                           if (jjtc001) {
3154                             jjtree.closeNodeScope(jjtn001,  2);
3155                           }
3156         }
3157         break;
3158       case LOGICAL_NOT_EQUALS:
3159         jj_consume_token(LOGICAL_NOT_EQUALS);
3160                               ASTNENode jjtn002 = new ASTNENode(this, JJTNENODE);
3161                               boolean jjtc002 = true;
3162                               jjtree.openNodeScope(jjtn002);
3163         try {
3164           RelationalExpression();
3165         } catch (Throwable jjte002) {
3166                               if (jjtc002) {
3167                                 jjtree.clearNodeScope(jjtn002);
3168                                 jjtc002 = false;
3169                               } else {
3170                                 jjtree.popNode();
3171                               }
3172                               if (jjte002 instanceof RuntimeException) {
3173                                 {if (true) throw (RuntimeException)jjte002;}
3174                               }
3175                               if (jjte002 instanceof ParseException) {
3176                                 {if (true) throw (ParseException)jjte002;}
3177                               }
3178                               {if (true) throw (Error)jjte002;}
3179         } finally {
3180                               if (jjtc002) {
3181                                 jjtree.closeNodeScope(jjtn002,  2);
3182                               }
3183         }
3184         break;
3185       default:
3186         jj_la1[91] = jj_gen;
3187         jj_consume_token(-1);
3188         throw new ParseException();
3189       }
3190     }
3191   }
3192 
RelationalExpression()3193   final public void RelationalExpression() throws ParseException {
3194     AdditiveExpression();
3195     label_41:
3196     while (true) {
3197       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3198       case LOGICAL_LT:
3199       case LOGICAL_LE:
3200       case LOGICAL_GT:
3201       case LOGICAL_GE:
3202         ;
3203         break;
3204       default:
3205         jj_la1[92] = jj_gen;
3206         break label_41;
3207       }
3208       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3209       case LOGICAL_LT:
3210         jj_consume_token(LOGICAL_LT);
3211                         ASTLTNode jjtn001 = new ASTLTNode(this, JJTLTNODE);
3212                         boolean jjtc001 = true;
3213                         jjtree.openNodeScope(jjtn001);
3214         try {
3215           AdditiveExpression();
3216         } catch (Throwable jjte001) {
3217                         if (jjtc001) {
3218                           jjtree.clearNodeScope(jjtn001);
3219                           jjtc001 = false;
3220                         } else {
3221                           jjtree.popNode();
3222                         }
3223                         if (jjte001 instanceof RuntimeException) {
3224                           {if (true) throw (RuntimeException)jjte001;}
3225                         }
3226                         if (jjte001 instanceof ParseException) {
3227                           {if (true) throw (ParseException)jjte001;}
3228                         }
3229                         {if (true) throw (Error)jjte001;}
3230         } finally {
3231                         if (jjtc001) {
3232                           jjtree.closeNodeScope(jjtn001,  2);
3233                         }
3234         }
3235         break;
3236       case LOGICAL_GT:
3237         jj_consume_token(LOGICAL_GT);
3238                         ASTGTNode jjtn002 = new ASTGTNode(this, JJTGTNODE);
3239                         boolean jjtc002 = true;
3240                         jjtree.openNodeScope(jjtn002);
3241         try {
3242           AdditiveExpression();
3243         } catch (Throwable jjte002) {
3244                         if (jjtc002) {
3245                           jjtree.clearNodeScope(jjtn002);
3246                           jjtc002 = false;
3247                         } else {
3248                           jjtree.popNode();
3249                         }
3250                         if (jjte002 instanceof RuntimeException) {
3251                           {if (true) throw (RuntimeException)jjte002;}
3252                         }
3253                         if (jjte002 instanceof ParseException) {
3254                           {if (true) throw (ParseException)jjte002;}
3255                         }
3256                         {if (true) throw (Error)jjte002;}
3257         } finally {
3258                         if (jjtc002) {
3259                           jjtree.closeNodeScope(jjtn002,  2);
3260                         }
3261         }
3262         break;
3263       case LOGICAL_LE:
3264         jj_consume_token(LOGICAL_LE);
3265                         ASTLENode jjtn003 = new ASTLENode(this, JJTLENODE);
3266                         boolean jjtc003 = true;
3267                         jjtree.openNodeScope(jjtn003);
3268         try {
3269           AdditiveExpression();
3270         } catch (Throwable jjte003) {
3271                         if (jjtc003) {
3272                           jjtree.clearNodeScope(jjtn003);
3273                           jjtc003 = false;
3274                         } else {
3275                           jjtree.popNode();
3276                         }
3277                         if (jjte003 instanceof RuntimeException) {
3278                           {if (true) throw (RuntimeException)jjte003;}
3279                         }
3280                         if (jjte003 instanceof ParseException) {
3281                           {if (true) throw (ParseException)jjte003;}
3282                         }
3283                         {if (true) throw (Error)jjte003;}
3284         } finally {
3285                         if (jjtc003) {
3286                           jjtree.closeNodeScope(jjtn003,  2);
3287                         }
3288         }
3289         break;
3290       case LOGICAL_GE:
3291         jj_consume_token(LOGICAL_GE);
3292                         ASTGENode jjtn004 = new ASTGENode(this, JJTGENODE);
3293                         boolean jjtc004 = true;
3294                         jjtree.openNodeScope(jjtn004);
3295         try {
3296           AdditiveExpression();
3297         } catch (Throwable jjte004) {
3298                         if (jjtc004) {
3299                           jjtree.clearNodeScope(jjtn004);
3300                           jjtc004 = false;
3301                         } else {
3302                           jjtree.popNode();
3303                         }
3304                         if (jjte004 instanceof RuntimeException) {
3305                           {if (true) throw (RuntimeException)jjte004;}
3306                         }
3307                         if (jjte004 instanceof ParseException) {
3308                           {if (true) throw (ParseException)jjte004;}
3309                         }
3310                         {if (true) throw (Error)jjte004;}
3311         } finally {
3312                         if (jjtc004) {
3313                           jjtree.closeNodeScope(jjtn004,  2);
3314                         }
3315         }
3316         break;
3317       default:
3318         jj_la1[93] = jj_gen;
3319         jj_consume_token(-1);
3320         throw new ParseException();
3321       }
3322     }
3323   }
3324 
AdditiveExpression()3325   final public void AdditiveExpression() throws ParseException {
3326     MultiplicativeExpression();
3327     label_42:
3328     while (true) {
3329       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3330       case MINUS:
3331       case PLUS:
3332         ;
3333         break;
3334       default:
3335         jj_la1[94] = jj_gen;
3336         break label_42;
3337       }
3338       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3339       case PLUS:
3340         jj_consume_token(PLUS);
3341                   ASTAddNode jjtn001 = new ASTAddNode(this, JJTADDNODE);
3342                   boolean jjtc001 = true;
3343                   jjtree.openNodeScope(jjtn001);
3344         try {
3345           MultiplicativeExpression();
3346         } catch (Throwable jjte001) {
3347                   if (jjtc001) {
3348                     jjtree.clearNodeScope(jjtn001);
3349                     jjtc001 = false;
3350                   } else {
3351                     jjtree.popNode();
3352                   }
3353                   if (jjte001 instanceof RuntimeException) {
3354                     {if (true) throw (RuntimeException)jjte001;}
3355                   }
3356                   if (jjte001 instanceof ParseException) {
3357                     {if (true) throw (ParseException)jjte001;}
3358                   }
3359                   {if (true) throw (Error)jjte001;}
3360         } finally {
3361                   if (jjtc001) {
3362                     jjtree.closeNodeScope(jjtn001,  2);
3363                   }
3364         }
3365         break;
3366       case MINUS:
3367         jj_consume_token(MINUS);
3368                   ASTSubtractNode jjtn002 = new ASTSubtractNode(this, JJTSUBTRACTNODE);
3369                   boolean jjtc002 = true;
3370                   jjtree.openNodeScope(jjtn002);
3371         try {
3372           MultiplicativeExpression();
3373         } catch (Throwable jjte002) {
3374                   if (jjtc002) {
3375                     jjtree.clearNodeScope(jjtn002);
3376                     jjtc002 = false;
3377                   } else {
3378                     jjtree.popNode();
3379                   }
3380                   if (jjte002 instanceof RuntimeException) {
3381                     {if (true) throw (RuntimeException)jjte002;}
3382                   }
3383                   if (jjte002 instanceof ParseException) {
3384                     {if (true) throw (ParseException)jjte002;}
3385                   }
3386                   {if (true) throw (Error)jjte002;}
3387         } finally {
3388                   if (jjtc002) {
3389                     jjtree.closeNodeScope(jjtn002,  2);
3390                   }
3391         }
3392         break;
3393       default:
3394         jj_la1[95] = jj_gen;
3395         jj_consume_token(-1);
3396         throw new ParseException();
3397       }
3398     }
3399   }
3400 
MultiplicativeExpression()3401   final public void MultiplicativeExpression() throws ParseException {
3402     UnaryExpression();
3403     label_43:
3404     while (true) {
3405       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3406       case MULTIPLY:
3407       case DIVIDE:
3408       case MODULUS:
3409         ;
3410         break;
3411       default:
3412         jj_la1[96] = jj_gen;
3413         break label_43;
3414       }
3415       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3416       case MULTIPLY:
3417         jj_consume_token(MULTIPLY);
3418                           ASTMulNode jjtn001 = new ASTMulNode(this, JJTMULNODE);
3419                           boolean jjtc001 = true;
3420                           jjtree.openNodeScope(jjtn001);
3421         try {
3422           UnaryExpression();
3423         } catch (Throwable jjte001) {
3424                           if (jjtc001) {
3425                             jjtree.clearNodeScope(jjtn001);
3426                             jjtc001 = false;
3427                           } else {
3428                             jjtree.popNode();
3429                           }
3430                           if (jjte001 instanceof RuntimeException) {
3431                             {if (true) throw (RuntimeException)jjte001;}
3432                           }
3433                           if (jjte001 instanceof ParseException) {
3434                             {if (true) throw (ParseException)jjte001;}
3435                           }
3436                           {if (true) throw (Error)jjte001;}
3437         } finally {
3438                           if (jjtc001) {
3439                             jjtree.closeNodeScope(jjtn001,  2);
3440                           }
3441         }
3442         break;
3443       case DIVIDE:
3444         jj_consume_token(DIVIDE);
3445                         ASTDivNode jjtn002 = new ASTDivNode(this, JJTDIVNODE);
3446                         boolean jjtc002 = true;
3447                         jjtree.openNodeScope(jjtn002);
3448         try {
3449           UnaryExpression();
3450         } catch (Throwable jjte002) {
3451                         if (jjtc002) {
3452                           jjtree.clearNodeScope(jjtn002);
3453                           jjtc002 = false;
3454                         } else {
3455                           jjtree.popNode();
3456                         }
3457                         if (jjte002 instanceof RuntimeException) {
3458                           {if (true) throw (RuntimeException)jjte002;}
3459                         }
3460                         if (jjte002 instanceof ParseException) {
3461                           {if (true) throw (ParseException)jjte002;}
3462                         }
3463                         {if (true) throw (Error)jjte002;}
3464         } finally {
3465                         if (jjtc002) {
3466                           jjtree.closeNodeScope(jjtn002,  2);
3467                         }
3468         }
3469         break;
3470       case MODULUS:
3471         jj_consume_token(MODULUS);
3472                          ASTModNode jjtn003 = new ASTModNode(this, JJTMODNODE);
3473                          boolean jjtc003 = true;
3474                          jjtree.openNodeScope(jjtn003);
3475         try {
3476           UnaryExpression();
3477         } catch (Throwable jjte003) {
3478                          if (jjtc003) {
3479                            jjtree.clearNodeScope(jjtn003);
3480                            jjtc003 = false;
3481                          } else {
3482                            jjtree.popNode();
3483                          }
3484                          if (jjte003 instanceof RuntimeException) {
3485                            {if (true) throw (RuntimeException)jjte003;}
3486                          }
3487                          if (jjte003 instanceof ParseException) {
3488                            {if (true) throw (ParseException)jjte003;}
3489                          }
3490                          {if (true) throw (Error)jjte003;}
3491         } finally {
3492                          if (jjtc003) {
3493                            jjtree.closeNodeScope(jjtn003,  2);
3494                          }
3495         }
3496         break;
3497       default:
3498         jj_la1[97] = jj_gen;
3499         jj_consume_token(-1);
3500         throw new ParseException();
3501       }
3502     }
3503   }
3504 
UnaryExpression()3505   final public void UnaryExpression() throws ParseException {
3506     label_44:
3507     while (true) {
3508       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3509       case WHITESPACE:
3510       case NEWLINE:
3511         ;
3512         break;
3513       default:
3514         jj_la1[98] = jj_gen;
3515         break label_44;
3516       }
3517       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3518       case WHITESPACE:
3519         jj_consume_token(WHITESPACE);
3520         break;
3521       case NEWLINE:
3522         jj_consume_token(NEWLINE);
3523         break;
3524       default:
3525         jj_la1[99] = jj_gen;
3526         jj_consume_token(-1);
3527         throw new ParseException();
3528       }
3529     }
3530     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3531     case LOGICAL_NOT:
3532       jj_consume_token(LOGICAL_NOT);
3533                            ASTNotNode jjtn001 = new ASTNotNode(this, JJTNOTNODE);
3534                            boolean jjtc001 = true;
3535                            jjtree.openNodeScope(jjtn001);
3536       try {
3537         UnaryExpression();
3538       } catch (Throwable jjte001) {
3539                            if (jjtc001) {
3540                              jjtree.clearNodeScope(jjtn001);
3541                              jjtc001 = false;
3542                            } else {
3543                              jjtree.popNode();
3544                            }
3545                            if (jjte001 instanceof RuntimeException) {
3546                              {if (true) throw (RuntimeException)jjte001;}
3547                            }
3548                            if (jjte001 instanceof ParseException) {
3549                              {if (true) throw (ParseException)jjte001;}
3550                            }
3551                            {if (true) throw (Error)jjte001;}
3552       } finally {
3553                            if (jjtc001) {
3554                              jjtree.closeNodeScope(jjtn001,  1);
3555                            }
3556       }
3557       break;
3558     case MINUS:
3559       jj_consume_token(MINUS);
3560                    ASTNegateNode jjtn002 = new ASTNegateNode(this, JJTNEGATENODE);
3561                    boolean jjtc002 = true;
3562                    jjtree.openNodeScope(jjtn002);
3563       try {
3564         PrimaryExpression();
3565       } catch (Throwable jjte002) {
3566                    if (jjtc002) {
3567                      jjtree.clearNodeScope(jjtn002);
3568                      jjtc002 = false;
3569                    } else {
3570                      jjtree.popNode();
3571                    }
3572                    if (jjte002 instanceof RuntimeException) {
3573                      {if (true) throw (RuntimeException)jjte002;}
3574                    }
3575                    if (jjte002 instanceof ParseException) {
3576                      {if (true) throw (ParseException)jjte002;}
3577                    }
3578                    {if (true) throw (Error)jjte002;}
3579       } finally {
3580                    if (jjtc002) {
3581                      jjtree.closeNodeScope(jjtn002,  1);
3582                    }
3583       }
3584       break;
3585     case LBRACKET:
3586     case LEFT_CURLEY:
3587     case LPAREN:
3588     case WHITESPACE:
3589     case NEWLINE:
3590     case STRING_LITERAL:
3591     case TRUE:
3592     case FALSE:
3593     case INTEGER_LITERAL:
3594     case FLOATING_POINT_LITERAL:
3595     case IDENTIFIER:
3596     case OLD_IDENTIFIER:
3597     case LCURLY:
3598       PrimaryExpression();
3599       break;
3600     default:
3601       jj_la1[100] = jj_gen;
3602       jj_consume_token(-1);
3603       throw new ParseException();
3604     }
3605   }
3606 
PrimaryExpression()3607   final public void PrimaryExpression() throws ParseException {
3608     label_45:
3609     while (true) {
3610       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3611       case WHITESPACE:
3612       case NEWLINE:
3613         ;
3614         break;
3615       default:
3616         jj_la1[101] = jj_gen;
3617         break label_45;
3618       }
3619       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3620       case WHITESPACE:
3621         jj_consume_token(WHITESPACE);
3622         break;
3623       case NEWLINE:
3624         jj_consume_token(NEWLINE);
3625         break;
3626       default:
3627         jj_la1[102] = jj_gen;
3628         jj_consume_token(-1);
3629         throw new ParseException();
3630       }
3631     }
3632     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3633     case STRING_LITERAL:
3634       StringLiteral();
3635       break;
3636     case IDENTIFIER:
3637     case OLD_IDENTIFIER:
3638     case LCURLY:
3639       Reference();
3640       break;
3641     case INTEGER_LITERAL:
3642       IntegerLiteral();
3643       break;
3644     default:
3645       jj_la1[103] = jj_gen;
3646       if (jj_2_24(2147483647)) {
3647         IntegerRange();
3648       } else {
3649         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3650         case FLOATING_POINT_LITERAL:
3651           FloatingPointLiteral();
3652           break;
3653         case LEFT_CURLEY:
3654           Map();
3655           break;
3656         case LBRACKET:
3657           ObjectArray();
3658           break;
3659         case TRUE:
3660           True();
3661           break;
3662         case FALSE:
3663           False();
3664           break;
3665         case LPAREN:
3666           jj_consume_token(LPAREN);
3667           Expression();
3668           jj_consume_token(RPAREN);
3669           break;
3670         default:
3671           jj_la1[104] = jj_gen;
3672           jj_consume_token(-1);
3673           throw new ParseException();
3674         }
3675       }
3676     }
3677     label_46:
3678     while (true) {
3679       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3680       case WHITESPACE:
3681       case NEWLINE:
3682         ;
3683         break;
3684       default:
3685         jj_la1[105] = jj_gen;
3686         break label_46;
3687       }
3688       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3689       case WHITESPACE:
3690         jj_consume_token(WHITESPACE);
3691         break;
3692       case NEWLINE:
3693         jj_consume_token(NEWLINE);
3694         break;
3695       default:
3696         jj_la1[106] = jj_gen;
3697         jj_consume_token(-1);
3698         throw new ParseException();
3699       }
3700     }
3701   }
3702 
jj_2_1(int xla)3703   private boolean jj_2_1(int xla) {
3704     jj_la = xla; jj_lastpos = jj_scanpos = token;
3705     try { return !jj_3_1(); }
3706     catch(LookaheadSuccess ls) { return true; }
3707     finally { jj_save(0, xla); }
3708   }
3709 
jj_2_2(int xla)3710   private boolean jj_2_2(int xla) {
3711     jj_la = xla; jj_lastpos = jj_scanpos = token;
3712     try { return !jj_3_2(); }
3713     catch(LookaheadSuccess ls) { return true; }
3714     finally { jj_save(1, xla); }
3715   }
3716 
jj_2_3(int xla)3717   private boolean jj_2_3(int xla) {
3718     jj_la = xla; jj_lastpos = jj_scanpos = token;
3719     try { return !jj_3_3(); }
3720     catch(LookaheadSuccess ls) { return true; }
3721     finally { jj_save(2, xla); }
3722   }
3723 
jj_2_4(int xla)3724   private boolean jj_2_4(int xla) {
3725     jj_la = xla; jj_lastpos = jj_scanpos = token;
3726     try { return !jj_3_4(); }
3727     catch(LookaheadSuccess ls) { return true; }
3728     finally { jj_save(3, xla); }
3729   }
3730 
jj_2_5(int xla)3731   private boolean jj_2_5(int xla) {
3732     jj_la = xla; jj_lastpos = jj_scanpos = token;
3733     try { return !jj_3_5(); }
3734     catch(LookaheadSuccess ls) { return true; }
3735     finally { jj_save(4, xla); }
3736   }
3737 
jj_2_6(int xla)3738   private boolean jj_2_6(int xla) {
3739     jj_la = xla; jj_lastpos = jj_scanpos = token;
3740     try { return !jj_3_6(); }
3741     catch(LookaheadSuccess ls) { return true; }
3742     finally { jj_save(5, xla); }
3743   }
3744 
jj_2_7(int xla)3745   private boolean jj_2_7(int xla) {
3746     jj_la = xla; jj_lastpos = jj_scanpos = token;
3747     try { return !jj_3_7(); }
3748     catch(LookaheadSuccess ls) { return true; }
3749     finally { jj_save(6, xla); }
3750   }
3751 
jj_2_8(int xla)3752   private boolean jj_2_8(int xla) {
3753     jj_la = xla; jj_lastpos = jj_scanpos = token;
3754     try { return !jj_3_8(); }
3755     catch(LookaheadSuccess ls) { return true; }
3756     finally { jj_save(7, xla); }
3757   }
3758 
jj_2_9(int xla)3759   private boolean jj_2_9(int xla) {
3760     jj_la = xla; jj_lastpos = jj_scanpos = token;
3761     try { return !jj_3_9(); }
3762     catch(LookaheadSuccess ls) { return true; }
3763     finally { jj_save(8, xla); }
3764   }
3765 
jj_2_10(int xla)3766   private boolean jj_2_10(int xla) {
3767     jj_la = xla; jj_lastpos = jj_scanpos = token;
3768     try { return !jj_3_10(); }
3769     catch(LookaheadSuccess ls) { return true; }
3770     finally { jj_save(9, xla); }
3771   }
3772 
jj_2_11(int xla)3773   private boolean jj_2_11(int xla) {
3774     jj_la = xla; jj_lastpos = jj_scanpos = token;
3775     try { return !jj_3_11(); }
3776     catch(LookaheadSuccess ls) { return true; }
3777     finally { jj_save(10, xla); }
3778   }
3779 
jj_2_12(int xla)3780   private boolean jj_2_12(int xla) {
3781     jj_la = xla; jj_lastpos = jj_scanpos = token;
3782     try { return !jj_3_12(); }
3783     catch(LookaheadSuccess ls) { return true; }
3784     finally { jj_save(11, xla); }
3785   }
3786 
jj_2_13(int xla)3787   private boolean jj_2_13(int xla) {
3788     jj_la = xla; jj_lastpos = jj_scanpos = token;
3789     try { return !jj_3_13(); }
3790     catch(LookaheadSuccess ls) { return true; }
3791     finally { jj_save(12, xla); }
3792   }
3793 
jj_2_14(int xla)3794   private boolean jj_2_14(int xla) {
3795     jj_la = xla; jj_lastpos = jj_scanpos = token;
3796     try { return !jj_3_14(); }
3797     catch(LookaheadSuccess ls) { return true; }
3798     finally { jj_save(13, xla); }
3799   }
3800 
jj_2_15(int xla)3801   private boolean jj_2_15(int xla) {
3802     jj_la = xla; jj_lastpos = jj_scanpos = token;
3803     try { return !jj_3_15(); }
3804     catch(LookaheadSuccess ls) { return true; }
3805     finally { jj_save(14, xla); }
3806   }
3807 
jj_2_16(int xla)3808   private boolean jj_2_16(int xla) {
3809     jj_la = xla; jj_lastpos = jj_scanpos = token;
3810     try { return !jj_3_16(); }
3811     catch(LookaheadSuccess ls) { return true; }
3812     finally { jj_save(15, xla); }
3813   }
3814 
jj_2_17(int xla)3815   private boolean jj_2_17(int xla) {
3816     jj_la = xla; jj_lastpos = jj_scanpos = token;
3817     try { return !jj_3_17(); }
3818     catch(LookaheadSuccess ls) { return true; }
3819     finally { jj_save(16, xla); }
3820   }
3821 
jj_2_18(int xla)3822   private boolean jj_2_18(int xla) {
3823     jj_la = xla; jj_lastpos = jj_scanpos = token;
3824     try { return !jj_3_18(); }
3825     catch(LookaheadSuccess ls) { return true; }
3826     finally { jj_save(17, xla); }
3827   }
3828 
jj_2_19(int xla)3829   private boolean jj_2_19(int xla) {
3830     jj_la = xla; jj_lastpos = jj_scanpos = token;
3831     try { return !jj_3_19(); }
3832     catch(LookaheadSuccess ls) { return true; }
3833     finally { jj_save(18, xla); }
3834   }
3835 
jj_2_20(int xla)3836   private boolean jj_2_20(int xla) {
3837     jj_la = xla; jj_lastpos = jj_scanpos = token;
3838     try { return !jj_3_20(); }
3839     catch(LookaheadSuccess ls) { return true; }
3840     finally { jj_save(19, xla); }
3841   }
3842 
jj_2_21(int xla)3843   private boolean jj_2_21(int xla) {
3844     jj_la = xla; jj_lastpos = jj_scanpos = token;
3845     try { return !jj_3_21(); }
3846     catch(LookaheadSuccess ls) { return true; }
3847     finally { jj_save(20, xla); }
3848   }
3849 
jj_2_22(int xla)3850   private boolean jj_2_22(int xla) {
3851     jj_la = xla; jj_lastpos = jj_scanpos = token;
3852     try { return !jj_3_22(); }
3853     catch(LookaheadSuccess ls) { return true; }
3854     finally { jj_save(21, xla); }
3855   }
3856 
jj_2_23(int xla)3857   private boolean jj_2_23(int xla) {
3858     jj_la = xla; jj_lastpos = jj_scanpos = token;
3859     try { return !jj_3_23(); }
3860     catch(LookaheadSuccess ls) { return true; }
3861     finally { jj_save(22, xla); }
3862   }
3863 
jj_2_24(int xla)3864   private boolean jj_2_24(int xla) {
3865     jj_la = xla; jj_lastpos = jj_scanpos = token;
3866     try { return !jj_3_24(); }
3867     catch(LookaheadSuccess ls) { return true; }
3868     finally { jj_save(23, xla); }
3869   }
3870 
jj_3_20()3871   private boolean jj_3_20() {
3872     Token xsp;
3873     xsp = jj_scanpos;
3874     if (jj_scan_token(32)) jj_scanpos = xsp;
3875     if (jj_scan_token(NEWLINE)) return true;
3876     return false;
3877   }
3878 
jj_3_19()3879   private boolean jj_3_19() {
3880     if (jj_scan_token(WHITESPACE)) return true;
3881     return false;
3882   }
3883 
jj_3R_55()3884   private boolean jj_3R_55() {
3885     return false;
3886   }
3887 
jj_3R_54()3888   private boolean jj_3R_54() {
3889     if (jj_3R_76()) return true;
3890     return false;
3891   }
3892 
jj_3_6()3893   private boolean jj_3_6() {
3894     Token xsp;
3895     xsp = jj_scanpos;
3896     if (jj_3R_54()) jj_scanpos = xsp;
3897     jj_lookingAhead = true;
3898     jj_semLA = !isRightParenthesis();
3899     jj_lookingAhead = false;
3900     if (!jj_semLA || jj_3R_55()) return true;
3901     if (jj_3R_56()) return true;
3902     return false;
3903   }
3904 
jj_3_18()3905   private boolean jj_3_18() {
3906     Token xsp;
3907     xsp = jj_scanpos;
3908     if (jj_scan_token(32)) jj_scanpos = xsp;
3909     if (jj_scan_token(NEWLINE)) return true;
3910     return false;
3911   }
3912 
jj_3R_126()3913   private boolean jj_3R_126() {
3914     if (jj_3R_110()) return true;
3915     return false;
3916   }
3917 
jj_3R_62()3918   private boolean jj_3R_62() {
3919     Token xsp;
3920     xsp = jj_scanpos;
3921     if (jj_scan_token(32)) {
3922     jj_scanpos = xsp;
3923     if (jj_scan_token(33)) return true;
3924     }
3925     return false;
3926   }
3927 
jj_3R_125()3928   private boolean jj_3R_125() {
3929     if (jj_3R_110()) return true;
3930     return false;
3931   }
3932 
jj_3R_65()3933   private boolean jj_3R_65() {
3934     if (jj_3R_98()) return true;
3935     return false;
3936   }
3937 
jj_3R_69()3938   private boolean jj_3R_69() {
3939     Token xsp;
3940     xsp = jj_scanpos;
3941     if (jj_scan_token(32)) {
3942     jj_scanpos = xsp;
3943     if (jj_scan_token(33)) return true;
3944     }
3945     return false;
3946   }
3947 
jj_3R_63()3948   private boolean jj_3R_63() {
3949     if (jj_3R_98()) return true;
3950     return false;
3951   }
3952 
jj_3R_111()3953   private boolean jj_3R_111() {
3954     if (jj_3R_110()) return true;
3955     return false;
3956   }
3957 
jj_3R_53()3958   private boolean jj_3R_53() {
3959     Token xsp;
3960     xsp = jj_scanpos;
3961     if (jj_scan_token(32)) {
3962     jj_scanpos = xsp;
3963     if (jj_scan_token(33)) return true;
3964     }
3965     return false;
3966   }
3967 
jj_3R_61()3968   private boolean jj_3R_61() {
3969     if (jj_3R_75()) return true;
3970     return false;
3971   }
3972 
jj_3R_100()3973   private boolean jj_3R_100() {
3974     if (jj_3R_110()) return true;
3975     return false;
3976   }
3977 
jj_3_17()3978   private boolean jj_3_17() {
3979     if (jj_3R_64()) return true;
3980     return false;
3981   }
3982 
jj_3R_68()3983   private boolean jj_3R_68() {
3984     if (jj_3R_75()) return true;
3985     return false;
3986   }
3987 
jj_3R_60()3988   private boolean jj_3R_60() {
3989     if (jj_3R_47()) return true;
3990     return false;
3991   }
3992 
jj_3_15()3993   private boolean jj_3_15() {
3994     if (jj_3R_64()) return true;
3995     return false;
3996   }
3997 
jj_3R_137()3998   private boolean jj_3R_137() {
3999     if (jj_scan_token(COMMA)) return true;
4000     if (jj_3R_109()) return true;
4001     return false;
4002   }
4003 
jj_3R_52()4004   private boolean jj_3R_52() {
4005     if (jj_3R_75()) return true;
4006     return false;
4007   }
4008 
jj_3R_108()4009   private boolean jj_3R_108() {
4010     if (jj_scan_token(FALSE)) return true;
4011     return false;
4012   }
4013 
jj_3R_67()4014   private boolean jj_3R_67() {
4015     if (jj_3R_47()) return true;
4016     return false;
4017   }
4018 
jj_3R_107()4019   private boolean jj_3R_107() {
4020     if (jj_scan_token(TRUE)) return true;
4021     return false;
4022   }
4023 
jj_3R_112()4024   private boolean jj_3R_112() {
4025     if (jj_scan_token(PIPE)) return true;
4026     if (jj_3R_109()) return true;
4027     return false;
4028   }
4029 
jj_3_16()4030   private boolean jj_3_16() {
4031     if (jj_scan_token(DOT)) return true;
4032     Token xsp;
4033     xsp = jj_scanpos;
4034     if (jj_3_17()) {
4035     jj_scanpos = xsp;
4036     if (jj_3R_65()) return true;
4037     }
4038     while (true) {
4039       xsp = jj_scanpos;
4040       if (jj_3R_126()) { jj_scanpos = xsp; break; }
4041     }
4042     return false;
4043   }
4044 
jj_3R_127()4045   private boolean jj_3R_127() {
4046     if (jj_scan_token(COMMA)) return true;
4047     if (jj_3R_58()) return true;
4048     if (jj_scan_token(COLON)) return true;
4049     if (jj_3R_58()) return true;
4050     return false;
4051   }
4052 
jj_3R_51()4053   private boolean jj_3R_51() {
4054     if (jj_3R_47()) return true;
4055     return false;
4056   }
4057 
jj_3_14()4058   private boolean jj_3_14() {
4059     if (jj_scan_token(DOT)) return true;
4060     Token xsp;
4061     xsp = jj_scanpos;
4062     if (jj_3_15()) {
4063     jj_scanpos = xsp;
4064     if (jj_3R_63()) return true;
4065     }
4066     while (true) {
4067       xsp = jj_scanpos;
4068       if (jj_3R_125()) { jj_scanpos = xsp; break; }
4069     }
4070     return false;
4071   }
4072 
jj_3R_99()4073   private boolean jj_3R_99() {
4074     if (jj_3R_109()) return true;
4075     Token xsp;
4076     while (true) {
4077       xsp = jj_scanpos;
4078       if (jj_3R_137()) { jj_scanpos = xsp; break; }
4079     }
4080     return false;
4081   }
4082 
jj_3R_71()4083   private boolean jj_3R_71() {
4084     if (jj_scan_token(LCURLY)) return true;
4085     Token xsp;
4086     xsp = jj_scanpos;
4087     if (jj_scan_token(67)) {
4088     jj_scanpos = xsp;
4089     if (jj_scan_token(70)) return true;
4090     }
4091     while (true) {
4092       xsp = jj_scanpos;
4093       if (jj_3R_111()) { jj_scanpos = xsp; break; }
4094     }
4095     while (true) {
4096       xsp = jj_scanpos;
4097       if (jj_3_16()) { jj_scanpos = xsp; break; }
4098     }
4099     xsp = jj_scanpos;
4100     if (jj_3R_112()) jj_scanpos = xsp;
4101     xsp = jj_scanpos;
4102     if (jj_scan_token(73)) {
4103     jj_scanpos = xsp;
4104     if (jj_scan_token(13)) return true;
4105     }
4106     return false;
4107   }
4108 
jj_3R_70()4109   private boolean jj_3R_70() {
4110     Token xsp;
4111     xsp = jj_scanpos;
4112     if (jj_scan_token(67)) {
4113     jj_scanpos = xsp;
4114     if (jj_scan_token(70)) return true;
4115     }
4116     while (true) {
4117       xsp = jj_scanpos;
4118       if (jj_3R_100()) { jj_scanpos = xsp; break; }
4119     }
4120     while (true) {
4121       xsp = jj_scanpos;
4122       if (jj_3_14()) { jj_scanpos = xsp; break; }
4123     }
4124     return false;
4125   }
4126 
jj_3R_59()4127   private boolean jj_3R_59() {
4128     Token xsp;
4129     xsp = jj_scanpos;
4130     if (jj_scan_token(32)) {
4131     jj_scanpos = xsp;
4132     if (jj_scan_token(33)) return true;
4133     }
4134     return false;
4135   }
4136 
jj_3R_47()4137   private boolean jj_3R_47() {
4138     Token xsp;
4139     xsp = jj_scanpos;
4140     if (jj_3R_70()) {
4141     jj_scanpos = xsp;
4142     if (jj_3R_71()) return true;
4143     }
4144     return false;
4145   }
4146 
jj_3R_110()4147   private boolean jj_3R_110() {
4148     if (jj_scan_token(INDEX_LBRACKET)) return true;
4149     if (jj_3R_131()) return true;
4150     if (jj_scan_token(INDEX_RBRACKET)) return true;
4151     return false;
4152   }
4153 
jj_3R_66()4154   private boolean jj_3R_66() {
4155     Token xsp;
4156     xsp = jj_scanpos;
4157     if (jj_scan_token(32)) {
4158     jj_scanpos = xsp;
4159     if (jj_scan_token(33)) return true;
4160     }
4161     return false;
4162   }
4163 
jj_3_13()4164   private boolean jj_3_13() {
4165     if (jj_scan_token(LBRACKET)) return true;
4166     Token xsp;
4167     while (true) {
4168       xsp = jj_scanpos;
4169       if (jj_3R_59()) { jj_scanpos = xsp; break; }
4170     }
4171     xsp = jj_scanpos;
4172     if (jj_3R_60()) {
4173     jj_scanpos = xsp;
4174     if (jj_3R_61()) return true;
4175     }
4176     while (true) {
4177       xsp = jj_scanpos;
4178       if (jj_3R_62()) { jj_scanpos = xsp; break; }
4179     }
4180     if (jj_scan_token(DOUBLEDOT)) return true;
4181     return false;
4182   }
4183 
jj_3R_64()4184   private boolean jj_3R_64() {
4185     if (jj_3R_98()) return true;
4186     if (jj_scan_token(LPAREN)) return true;
4187     Token xsp;
4188     xsp = jj_scanpos;
4189     if (jj_3R_99()) jj_scanpos = xsp;
4190     if (jj_scan_token(REFMOD2_RPAREN)) return true;
4191     return false;
4192   }
4193 
jj_3R_76()4194   private boolean jj_3R_76() {
4195     if (jj_3R_47()) return true;
4196     return false;
4197   }
4198 
jj_3R_50()4199   private boolean jj_3R_50() {
4200     Token xsp;
4201     xsp = jj_scanpos;
4202     if (jj_scan_token(32)) {
4203     jj_scanpos = xsp;
4204     if (jj_scan_token(33)) return true;
4205     }
4206     return false;
4207   }
4208 
jj_3R_96()4209   private boolean jj_3R_96() {
4210     if (jj_3R_104()) return true;
4211     return false;
4212   }
4213 
jj_3R_95()4214   private boolean jj_3R_95() {
4215     if (jj_3R_47()) return true;
4216     return false;
4217   }
4218 
jj_3R_94()4219   private boolean jj_3R_94() {
4220     if (jj_3R_108()) return true;
4221     return false;
4222   }
4223 
jj_3R_93()4224   private boolean jj_3R_93() {
4225     if (jj_3R_107()) return true;
4226     return false;
4227   }
4228 
jj_3R_97()4229   private boolean jj_3R_97() {
4230     Token xsp;
4231     xsp = jj_scanpos;
4232     if (jj_scan_token(32)) {
4233     jj_scanpos = xsp;
4234     if (jj_scan_token(33)) return true;
4235     }
4236     return false;
4237   }
4238 
jj_3R_117()4239   private boolean jj_3R_117() {
4240     Token xsp;
4241     xsp = jj_scanpos;
4242     if (jj_scan_token(32)) {
4243     jj_scanpos = xsp;
4244     if (jj_scan_token(33)) return true;
4245     }
4246     return false;
4247   }
4248 
jj_3R_86()4249   private boolean jj_3R_86() {
4250     if (jj_3R_108()) return true;
4251     return false;
4252   }
4253 
jj_3R_92()4254   private boolean jj_3R_92() {
4255     if (jj_3R_106()) return true;
4256     return false;
4257   }
4258 
jj_3R_91()4259   private boolean jj_3R_91() {
4260     if (jj_3R_105()) return true;
4261     return false;
4262   }
4263 
jj_3_24()4264   private boolean jj_3_24() {
4265     if (jj_scan_token(LBRACKET)) return true;
4266     Token xsp;
4267     while (true) {
4268       xsp = jj_scanpos;
4269       if (jj_3R_66()) { jj_scanpos = xsp; break; }
4270     }
4271     xsp = jj_scanpos;
4272     if (jj_3R_67()) {
4273     jj_scanpos = xsp;
4274     if (jj_3R_68()) return true;
4275     }
4276     while (true) {
4277       xsp = jj_scanpos;
4278       if (jj_3R_69()) { jj_scanpos = xsp; break; }
4279     }
4280     if (jj_scan_token(DOUBLEDOT)) return true;
4281     return false;
4282   }
4283 
jj_3R_90()4284   private boolean jj_3R_90() {
4285     if (jj_3R_103()) return true;
4286     return false;
4287   }
4288 
jj_3R_89()4289   private boolean jj_3R_89() {
4290     if (jj_3R_75()) return true;
4291     return false;
4292   }
4293 
jj_3R_85()4294   private boolean jj_3R_85() {
4295     if (jj_3R_107()) return true;
4296     return false;
4297   }
4298 
jj_3R_173()4299   private boolean jj_3R_173() {
4300     Token xsp;
4301     xsp = jj_scanpos;
4302     if (jj_scan_token(32)) {
4303     jj_scanpos = xsp;
4304     if (jj_scan_token(33)) return true;
4305     }
4306     return false;
4307   }
4308 
jj_3R_88()4309   private boolean jj_3R_88() {
4310     if (jj_3R_102()) return true;
4311     return false;
4312   }
4313 
jj_3R_172()4314   private boolean jj_3R_172() {
4315     if (jj_scan_token(LPAREN)) return true;
4316     if (jj_3R_109()) return true;
4317     if (jj_scan_token(RPAREN)) return true;
4318     return false;
4319   }
4320 
jj_3R_171()4321   private boolean jj_3R_171() {
4322     if (jj_3R_108()) return true;
4323     return false;
4324   }
4325 
jj_3R_84()4326   private boolean jj_3R_84() {
4327     if (jj_3R_106()) return true;
4328     return false;
4329   }
4330 
jj_3_5()4331   private boolean jj_3_5() {
4332     if (jj_scan_token(LBRACKET)) return true;
4333     Token xsp;
4334     while (true) {
4335       xsp = jj_scanpos;
4336       if (jj_3R_50()) { jj_scanpos = xsp; break; }
4337     }
4338     xsp = jj_scanpos;
4339     if (jj_3R_51()) {
4340     jj_scanpos = xsp;
4341     if (jj_3R_52()) return true;
4342     }
4343     while (true) {
4344       xsp = jj_scanpos;
4345       if (jj_3R_53()) { jj_scanpos = xsp; break; }
4346     }
4347     if (jj_scan_token(DOUBLEDOT)) return true;
4348     return false;
4349   }
4350 
jj_3R_170()4351   private boolean jj_3R_170() {
4352     if (jj_3R_107()) return true;
4353     return false;
4354   }
4355 
jj_3R_169()4356   private boolean jj_3R_169() {
4357     if (jj_3R_106()) return true;
4358     return false;
4359   }
4360 
jj_3R_168()4361   private boolean jj_3R_168() {
4362     if (jj_3R_105()) return true;
4363     return false;
4364   }
4365 
jj_3R_87()4366   private boolean jj_3R_87() {
4367     Token xsp;
4368     xsp = jj_scanpos;
4369     if (jj_scan_token(32)) {
4370     jj_scanpos = xsp;
4371     if (jj_scan_token(33)) return true;
4372     }
4373     return false;
4374   }
4375 
jj_3R_167()4376   private boolean jj_3R_167() {
4377     if (jj_3R_104()) return true;
4378     return false;
4379   }
4380 
jj_3R_83()4381   private boolean jj_3R_83() {
4382     if (jj_3R_105()) return true;
4383     return false;
4384   }
4385 
jj_3R_58()4386   private boolean jj_3R_58() {
4387     Token xsp;
4388     while (true) {
4389       xsp = jj_scanpos;
4390       if (jj_3R_87()) { jj_scanpos = xsp; break; }
4391     }
4392     xsp = jj_scanpos;
4393     if (jj_3R_88()) {
4394     jj_scanpos = xsp;
4395     if (jj_3R_89()) {
4396     jj_scanpos = xsp;
4397     if (jj_3R_90()) {
4398     jj_scanpos = xsp;
4399     if (jj_3R_91()) {
4400     jj_scanpos = xsp;
4401     if (jj_3R_92()) {
4402     jj_scanpos = xsp;
4403     if (jj_3R_93()) {
4404     jj_scanpos = xsp;
4405     if (jj_3R_94()) {
4406     jj_scanpos = xsp;
4407     if (jj_3R_95()) {
4408     jj_scanpos = xsp;
4409     if (jj_3R_96()) return true;
4410     }
4411     }
4412     }
4413     }
4414     }
4415     }
4416     }
4417     }
4418     while (true) {
4419       xsp = jj_scanpos;
4420       if (jj_3R_97()) { jj_scanpos = xsp; break; }
4421     }
4422     return false;
4423   }
4424 
jj_3R_166()4425   private boolean jj_3R_166() {
4426     if (jj_3R_103()) return true;
4427     return false;
4428   }
4429 
jj_3R_165()4430   private boolean jj_3R_165() {
4431     if (jj_3R_75()) return true;
4432     return false;
4433   }
4434 
jj_3R_164()4435   private boolean jj_3R_164() {
4436     if (jj_3R_47()) return true;
4437     return false;
4438   }
4439 
jj_3R_82()4440   private boolean jj_3R_82() {
4441     if (jj_3R_104()) return true;
4442     return false;
4443   }
4444 
jj_3R_163()4445   private boolean jj_3R_163() {
4446     if (jj_3R_102()) return true;
4447     return false;
4448   }
4449 
jj_3R_162()4450   private boolean jj_3R_162() {
4451     Token xsp;
4452     xsp = jj_scanpos;
4453     if (jj_scan_token(32)) {
4454     jj_scanpos = xsp;
4455     if (jj_scan_token(33)) return true;
4456     }
4457     return false;
4458   }
4459 
jj_3R_158()4460   private boolean jj_3R_158() {
4461     Token xsp;
4462     while (true) {
4463       xsp = jj_scanpos;
4464       if (jj_3R_162()) { jj_scanpos = xsp; break; }
4465     }
4466     xsp = jj_scanpos;
4467     if (jj_3R_163()) {
4468     jj_scanpos = xsp;
4469     if (jj_3R_164()) {
4470     jj_scanpos = xsp;
4471     if (jj_3R_165()) {
4472     jj_scanpos = xsp;
4473     if (jj_3R_166()) {
4474     jj_scanpos = xsp;
4475     if (jj_3R_167()) {
4476     jj_scanpos = xsp;
4477     if (jj_3R_168()) {
4478     jj_scanpos = xsp;
4479     if (jj_3R_169()) {
4480     jj_scanpos = xsp;
4481     if (jj_3R_170()) {
4482     jj_scanpos = xsp;
4483     if (jj_3R_171()) {
4484     jj_scanpos = xsp;
4485     if (jj_3R_172()) return true;
4486     }
4487     }
4488     }
4489     }
4490     }
4491     }
4492     }
4493     }
4494     }
4495     while (true) {
4496       xsp = jj_scanpos;
4497       if (jj_3R_173()) { jj_scanpos = xsp; break; }
4498     }
4499     return false;
4500   }
4501 
jj_3R_154()4502   private boolean jj_3R_154() {
4503     if (jj_3R_158()) return true;
4504     return false;
4505   }
4506 
jj_3R_81()4507   private boolean jj_3R_81() {
4508     if (jj_3R_103()) return true;
4509     return false;
4510   }
4511 
jj_3R_153()4512   private boolean jj_3R_153() {
4513     if (jj_scan_token(MINUS)) return true;
4514     if (jj_3R_158()) return true;
4515     return false;
4516   }
4517 
jj_3R_152()4518   private boolean jj_3R_152() {
4519     if (jj_scan_token(LOGICAL_NOT)) return true;
4520     if (jj_3R_145()) return true;
4521     return false;
4522   }
4523 
jj_3R_119()4524   private boolean jj_3R_119() {
4525     if (jj_3R_75()) return true;
4526     return false;
4527   }
4528 
jj_3R_134()4529   private boolean jj_3R_134() {
4530     Token xsp;
4531     xsp = jj_scanpos;
4532     if (jj_scan_token(32)) {
4533     jj_scanpos = xsp;
4534     if (jj_scan_token(33)) return true;
4535     }
4536     return false;
4537   }
4538 
jj_3R_115()4539   private boolean jj_3R_115() {
4540     if (jj_3R_75()) return true;
4541     return false;
4542   }
4543 
jj_3R_129()4544   private boolean jj_3R_129() {
4545     if (jj_scan_token(COMMA)) return true;
4546     if (jj_3R_58()) return true;
4547     return false;
4548   }
4549 
jj_3R_133()4550   private boolean jj_3R_133() {
4551     Token xsp;
4552     xsp = jj_scanpos;
4553     if (jj_scan_token(32)) {
4554     jj_scanpos = xsp;
4555     if (jj_scan_token(33)) return true;
4556     }
4557     return false;
4558   }
4559 
jj_3R_80()4560   private boolean jj_3R_80() {
4561     if (jj_3R_75()) return true;
4562     return false;
4563   }
4564 
jj_3R_131()4565   private boolean jj_3R_131() {
4566     Token xsp;
4567     while (true) {
4568       xsp = jj_scanpos;
4569       if (jj_3R_133()) { jj_scanpos = xsp; break; }
4570     }
4571     if (jj_3R_109()) return true;
4572     while (true) {
4573       xsp = jj_scanpos;
4574       if (jj_3R_134()) { jj_scanpos = xsp; break; }
4575     }
4576     return false;
4577   }
4578 
jj_3R_161()4579   private boolean jj_3R_161() {
4580     if (jj_scan_token(MODULUS)) return true;
4581     if (jj_3R_145()) return true;
4582     return false;
4583   }
4584 
jj_3R_113()4585   private boolean jj_3R_113() {
4586     Token xsp;
4587     xsp = jj_scanpos;
4588     if (jj_scan_token(32)) {
4589     jj_scanpos = xsp;
4590     if (jj_scan_token(33)) return true;
4591     }
4592     return false;
4593   }
4594 
jj_3R_151()4595   private boolean jj_3R_151() {
4596     Token xsp;
4597     xsp = jj_scanpos;
4598     if (jj_scan_token(32)) {
4599     jj_scanpos = xsp;
4600     if (jj_scan_token(33)) return true;
4601     }
4602     return false;
4603   }
4604 
jj_3R_160()4605   private boolean jj_3R_160() {
4606     if (jj_scan_token(DIVIDE)) return true;
4607     if (jj_3R_145()) return true;
4608     return false;
4609   }
4610 
jj_3R_159()4611   private boolean jj_3R_159() {
4612     if (jj_scan_token(MULTIPLY)) return true;
4613     if (jj_3R_145()) return true;
4614     return false;
4615   }
4616 
jj_3R_155()4617   private boolean jj_3R_155() {
4618     Token xsp;
4619     xsp = jj_scanpos;
4620     if (jj_3R_159()) {
4621     jj_scanpos = xsp;
4622     if (jj_3R_160()) {
4623     jj_scanpos = xsp;
4624     if (jj_3R_161()) return true;
4625     }
4626     }
4627     return false;
4628   }
4629 
jj_3R_145()4630   private boolean jj_3R_145() {
4631     Token xsp;
4632     while (true) {
4633       xsp = jj_scanpos;
4634       if (jj_3R_151()) { jj_scanpos = xsp; break; }
4635     }
4636     xsp = jj_scanpos;
4637     if (jj_3R_152()) {
4638     jj_scanpos = xsp;
4639     if (jj_3R_153()) {
4640     jj_scanpos = xsp;
4641     if (jj_3R_154()) return true;
4642     }
4643     }
4644     return false;
4645   }
4646 
jj_3R_79()4647   private boolean jj_3R_79() {
4648     if (jj_3R_102()) return true;
4649     return false;
4650   }
4651 
jj_3R_120()4652   private boolean jj_3R_120() {
4653     Token xsp;
4654     xsp = jj_scanpos;
4655     if (jj_scan_token(32)) {
4656     jj_scanpos = xsp;
4657     if (jj_scan_token(33)) return true;
4658     }
4659     return false;
4660   }
4661 
jj_3R_78()4662   private boolean jj_3R_78() {
4663     if (jj_3R_101()) return true;
4664     return false;
4665   }
4666 
jj_3R_118()4667   private boolean jj_3R_118() {
4668     if (jj_3R_47()) return true;
4669     return false;
4670   }
4671 
jj_3R_114()4672   private boolean jj_3R_114() {
4673     if (jj_3R_47()) return true;
4674     return false;
4675   }
4676 
jj_3R_116()4677   private boolean jj_3R_116() {
4678     Token xsp;
4679     xsp = jj_scanpos;
4680     if (jj_scan_token(32)) {
4681     jj_scanpos = xsp;
4682     if (jj_scan_token(33)) return true;
4683     }
4684     return false;
4685   }
4686 
jj_3R_123()4687   private boolean jj_3R_123() {
4688     if (jj_3R_58()) return true;
4689     Token xsp;
4690     while (true) {
4691       xsp = jj_scanpos;
4692       if (jj_3R_129()) { jj_scanpos = xsp; break; }
4693     }
4694     return false;
4695   }
4696 
jj_3R_77()4697   private boolean jj_3R_77() {
4698     if (jj_3R_47()) return true;
4699     return false;
4700   }
4701 
jj_3R_56()4702   private boolean jj_3R_56() {
4703     Token xsp;
4704     xsp = jj_scanpos;
4705     if (jj_3R_77()) {
4706     jj_scanpos = xsp;
4707     if (jj_3R_78()) {
4708     jj_scanpos = xsp;
4709     if (jj_3R_79()) {
4710     jj_scanpos = xsp;
4711     if (jj_3R_80()) {
4712     jj_scanpos = xsp;
4713     if (jj_3R_81()) {
4714     jj_scanpos = xsp;
4715     if (jj_3R_82()) {
4716     jj_scanpos = xsp;
4717     if (jj_3R_83()) {
4718     jj_scanpos = xsp;
4719     if (jj_3R_84()) {
4720     jj_scanpos = xsp;
4721     if (jj_3R_85()) {
4722     jj_scanpos = xsp;
4723     if (jj_3R_86()) return true;
4724     }
4725     }
4726     }
4727     }
4728     }
4729     }
4730     }
4731     }
4732     }
4733     return false;
4734   }
4735 
jj_3R_103()4736   private boolean jj_3R_103() {
4737     if (jj_scan_token(LBRACKET)) return true;
4738     Token xsp;
4739     while (true) {
4740       xsp = jj_scanpos;
4741       if (jj_3R_113()) { jj_scanpos = xsp; break; }
4742     }
4743     xsp = jj_scanpos;
4744     if (jj_3R_114()) {
4745     jj_scanpos = xsp;
4746     if (jj_3R_115()) return true;
4747     }
4748     while (true) {
4749       xsp = jj_scanpos;
4750       if (jj_3R_116()) { jj_scanpos = xsp; break; }
4751     }
4752     if (jj_scan_token(DOUBLEDOT)) return true;
4753     while (true) {
4754       xsp = jj_scanpos;
4755       if (jj_3R_117()) { jj_scanpos = xsp; break; }
4756     }
4757     xsp = jj_scanpos;
4758     if (jj_3R_118()) {
4759     jj_scanpos = xsp;
4760     if (jj_3R_119()) return true;
4761     }
4762     while (true) {
4763       xsp = jj_scanpos;
4764       if (jj_3R_120()) { jj_scanpos = xsp; break; }
4765     }
4766     if (jj_scan_token(RBRACKET)) return true;
4767     return false;
4768   }
4769 
jj_3R_141()4770   private boolean jj_3R_141() {
4771     if (jj_3R_145()) return true;
4772     Token xsp;
4773     while (true) {
4774       xsp = jj_scanpos;
4775       if (jj_3R_155()) { jj_scanpos = xsp; break; }
4776     }
4777     return false;
4778   }
4779 
jj_3R_157()4780   private boolean jj_3R_157() {
4781     if (jj_scan_token(MINUS)) return true;
4782     if (jj_3R_141()) return true;
4783     return false;
4784   }
4785 
jj_3R_156()4786   private boolean jj_3R_156() {
4787     if (jj_scan_token(PLUS)) return true;
4788     if (jj_3R_141()) return true;
4789     return false;
4790   }
4791 
jj_3R_146()4792   private boolean jj_3R_146() {
4793     Token xsp;
4794     xsp = jj_scanpos;
4795     if (jj_3R_156()) {
4796     jj_scanpos = xsp;
4797     if (jj_3R_157()) return true;
4798     }
4799     return false;
4800   }
4801 
jj_3R_101()4802   private boolean jj_3R_101() {
4803     if (jj_scan_token(WORD)) return true;
4804     return false;
4805   }
4806 
jj_3R_57()4807   private boolean jj_3R_57() {
4808     Token xsp;
4809     xsp = jj_scanpos;
4810     if (jj_scan_token(32)) {
4811     jj_scanpos = xsp;
4812     if (jj_scan_token(33)) return true;
4813     }
4814     return false;
4815   }
4816 
jj_3R_139()4817   private boolean jj_3R_139() {
4818     if (jj_3R_141()) return true;
4819     Token xsp;
4820     while (true) {
4821       xsp = jj_scanpos;
4822       if (jj_3R_146()) { jj_scanpos = xsp; break; }
4823     }
4824     return false;
4825   }
4826 
jj_3_12()4827   private boolean jj_3_12() {
4828     Token xsp;
4829     while (true) {
4830       xsp = jj_scanpos;
4831       if (jj_3R_57()) { jj_scanpos = xsp; break; }
4832     }
4833     if (jj_3R_58()) return true;
4834     if (jj_scan_token(COLON)) return true;
4835     return false;
4836   }
4837 
jj_3R_106()4838   private boolean jj_3R_106() {
4839     if (jj_scan_token(LBRACKET)) return true;
4840     Token xsp;
4841     xsp = jj_scanpos;
4842     if (jj_3R_123()) jj_scanpos = xsp;
4843     if (jj_scan_token(RBRACKET)) return true;
4844     return false;
4845   }
4846 
jj_3R_150()4847   private boolean jj_3R_150() {
4848     if (jj_scan_token(LOGICAL_GE)) return true;
4849     if (jj_3R_139()) return true;
4850     return false;
4851   }
4852 
jj_3R_149()4853   private boolean jj_3R_149() {
4854     if (jj_scan_token(LOGICAL_LE)) return true;
4855     if (jj_3R_139()) return true;
4856     return false;
4857   }
4858 
jj_3R_98()4859   private boolean jj_3R_98() {
4860     Token xsp;
4861     xsp = jj_scanpos;
4862     if (jj_scan_token(67)) {
4863     jj_scanpos = xsp;
4864     if (jj_scan_token(70)) return true;
4865     }
4866     return false;
4867   }
4868 
jj_3R_148()4869   private boolean jj_3R_148() {
4870     if (jj_scan_token(LOGICAL_GT)) return true;
4871     if (jj_3R_139()) return true;
4872     return false;
4873   }
4874 
jj_3R_142()4875   private boolean jj_3R_142() {
4876     Token xsp;
4877     xsp = jj_scanpos;
4878     if (jj_3R_147()) {
4879     jj_scanpos = xsp;
4880     if (jj_3R_148()) {
4881     jj_scanpos = xsp;
4882     if (jj_3R_149()) {
4883     jj_scanpos = xsp;
4884     if (jj_3R_150()) return true;
4885     }
4886     }
4887     }
4888     return false;
4889   }
4890 
jj_3R_147()4891   private boolean jj_3R_147() {
4892     if (jj_scan_token(LOGICAL_LT)) return true;
4893     if (jj_3R_139()) return true;
4894     return false;
4895   }
4896 
jj_3R_128()4897   private boolean jj_3R_128() {
4898     Token xsp;
4899     xsp = jj_scanpos;
4900     if (jj_scan_token(32)) {
4901     jj_scanpos = xsp;
4902     if (jj_scan_token(33)) return true;
4903     }
4904     return false;
4905   }
4906 
jj_3R_122()4907   private boolean jj_3R_122() {
4908     Token xsp;
4909     while (true) {
4910       xsp = jj_scanpos;
4911       if (jj_3R_128()) { jj_scanpos = xsp; break; }
4912     }
4913     return false;
4914   }
4915 
jj_3R_121()4916   private boolean jj_3R_121() {
4917     if (jj_3R_58()) return true;
4918     if (jj_scan_token(COLON)) return true;
4919     if (jj_3R_58()) return true;
4920     Token xsp;
4921     while (true) {
4922       xsp = jj_scanpos;
4923       if (jj_3R_127()) { jj_scanpos = xsp; break; }
4924     }
4925     return false;
4926   }
4927 
jj_3R_136()4928   private boolean jj_3R_136() {
4929     if (jj_3R_139()) return true;
4930     Token xsp;
4931     while (true) {
4932       xsp = jj_scanpos;
4933       if (jj_3R_142()) { jj_scanpos = xsp; break; }
4934     }
4935     return false;
4936   }
4937 
jj_3R_144()4938   private boolean jj_3R_144() {
4939     if (jj_scan_token(LOGICAL_NOT_EQUALS)) return true;
4940     if (jj_3R_136()) return true;
4941     return false;
4942   }
4943 
jj_3R_105()4944   private boolean jj_3R_105() {
4945     if (jj_scan_token(LEFT_CURLEY)) return true;
4946     Token xsp;
4947     xsp = jj_scanpos;
4948     if (jj_3R_121()) {
4949     jj_scanpos = xsp;
4950     if (jj_3R_122()) return true;
4951     }
4952     xsp = jj_scanpos;
4953     if (jj_scan_token(13)) {
4954     jj_scanpos = xsp;
4955     if (jj_scan_token(73)) return true;
4956     }
4957     return false;
4958   }
4959 
jj_3R_140()4960   private boolean jj_3R_140() {
4961     Token xsp;
4962     xsp = jj_scanpos;
4963     if (jj_3R_143()) {
4964     jj_scanpos = xsp;
4965     if (jj_3R_144()) return true;
4966     }
4967     return false;
4968   }
4969 
jj_3R_143()4970   private boolean jj_3R_143() {
4971     if (jj_scan_token(LOGICAL_EQUALS)) return true;
4972     if (jj_3R_136()) return true;
4973     return false;
4974   }
4975 
jj_3R_102()4976   private boolean jj_3R_102() {
4977     if (jj_scan_token(STRING_LITERAL)) return true;
4978     return false;
4979   }
4980 
jj_3R_132()4981   private boolean jj_3R_132() {
4982     if (jj_3R_136()) return true;
4983     Token xsp;
4984     while (true) {
4985       xsp = jj_scanpos;
4986       if (jj_3R_140()) { jj_scanpos = xsp; break; }
4987     }
4988     return false;
4989   }
4990 
jj_3R_75()4991   private boolean jj_3R_75() {
4992     if (jj_scan_token(INTEGER_LITERAL)) return true;
4993     return false;
4994   }
4995 
jj_3R_138()4996   private boolean jj_3R_138() {
4997     if (jj_scan_token(LOGICAL_AND)) return true;
4998     if (jj_3R_132()) return true;
4999     return false;
5000   }
5001 
jj_3R_130()5002   private boolean jj_3R_130() {
5003     if (jj_3R_132()) return true;
5004     Token xsp;
5005     while (true) {
5006       xsp = jj_scanpos;
5007       if (jj_3R_138()) { jj_scanpos = xsp; break; }
5008     }
5009     return false;
5010   }
5011 
jj_3R_104()5012   private boolean jj_3R_104() {
5013     if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
5014     return false;
5015   }
5016 
jj_3R_135()5017   private boolean jj_3R_135() {
5018     Token xsp;
5019     xsp = jj_scanpos;
5020     if (jj_scan_token(44)) {
5021     jj_scanpos = xsp;
5022     if (jj_scan_token(4)) return true;
5023     }
5024     if (jj_3R_130()) return true;
5025     return false;
5026   }
5027 
jj_3R_124()5028   private boolean jj_3R_124() {
5029     if (jj_3R_130()) return true;
5030     Token xsp;
5031     while (true) {
5032       xsp = jj_scanpos;
5033       if (jj_3R_135()) { jj_scanpos = xsp; break; }
5034     }
5035     return false;
5036   }
5037 
jj_3R_72()5038   private boolean jj_3R_72() {
5039     if (jj_scan_token(SINGLE_LINE_COMMENT_START)) return true;
5040     Token xsp;
5041     xsp = jj_scanpos;
5042     if (jj_scan_token(26)) jj_scanpos = xsp;
5043     return false;
5044   }
5045 
jj_3R_48()5046   private boolean jj_3R_48() {
5047     Token xsp;
5048     xsp = jj_scanpos;
5049     if (jj_3R_72()) {
5050     jj_scanpos = xsp;
5051     if (jj_3R_73()) {
5052     jj_scanpos = xsp;
5053     if (jj_3R_74()) return true;
5054     }
5055     }
5056     return false;
5057   }
5058 
jj_3R_74()5059   private boolean jj_3R_74() {
5060     if (jj_scan_token(FORMAL_COMMENT)) return true;
5061     return false;
5062   }
5063 
jj_3R_73()5064   private boolean jj_3R_73() {
5065     if (jj_scan_token(MULTI_LINE_COMMENT)) return true;
5066     return false;
5067   }
5068 
jj_3R_109()5069   private boolean jj_3R_109() {
5070     if (jj_3R_124()) return true;
5071     return false;
5072   }
5073 
jj_3_11()5074   private boolean jj_3_11() {
5075     Token xsp;
5076     xsp = jj_scanpos;
5077     if (jj_scan_token(32)) jj_scanpos = xsp;
5078     if (jj_scan_token(NEWLINE)) return true;
5079     return false;
5080   }
5081 
jj_3_23()5082   private boolean jj_3_23() {
5083     Token xsp;
5084     xsp = jj_scanpos;
5085     if (jj_scan_token(32)) jj_scanpos = xsp;
5086     if (jj_scan_token(NEWLINE)) return true;
5087     return false;
5088   }
5089 
jj_3_10()5090   private boolean jj_3_10() {
5091     if (jj_scan_token(WHITESPACE)) return true;
5092     return false;
5093   }
5094 
jj_3_4()5095   private boolean jj_3_4() {
5096     if (jj_scan_token(DOUBLE_ESCAPE)) return true;
5097     return false;
5098   }
5099 
jj_3_9()5100   private boolean jj_3_9() {
5101     Token xsp;
5102     xsp = jj_scanpos;
5103     if (jj_scan_token(32)) jj_scanpos = xsp;
5104     if (jj_scan_token(NEWLINE)) return true;
5105     return false;
5106   }
5107 
jj_3_22()5108   private boolean jj_3_22() {
5109     Token xsp;
5110     xsp = jj_scanpos;
5111     if (jj_scan_token(32)) jj_scanpos = xsp;
5112     if (jj_scan_token(NEWLINE)) return true;
5113     return false;
5114   }
5115 
jj_3_8()5116   private boolean jj_3_8() {
5117     if (jj_scan_token(WHITESPACE)) return true;
5118     return false;
5119   }
5120 
jj_3R_49()5121   private boolean jj_3R_49() {
5122     if (jj_scan_token(ZERO_WIDTH_WHITESPACE)) return true;
5123     if (jj_scan_token(0)) return true;
5124     return false;
5125   }
5126 
jj_3_3()5127   private boolean jj_3_3() {
5128     if (jj_3R_49()) return true;
5129     return false;
5130   }
5131 
jj_3_2()5132   private boolean jj_3_2() {
5133     if (jj_3R_48()) return true;
5134     return false;
5135   }
5136 
jj_3_1()5137   private boolean jj_3_1() {
5138     if (jj_3R_47()) return true;
5139     return false;
5140   }
5141 
jj_3_21()5142   private boolean jj_3_21() {
5143     Token xsp;
5144     xsp = jj_scanpos;
5145     if (jj_scan_token(32)) jj_scanpos = xsp;
5146     if (jj_scan_token(NEWLINE)) return true;
5147     return false;
5148   }
5149 
jj_3_7()5150   private boolean jj_3_7() {
5151     Token xsp;
5152     xsp = jj_scanpos;
5153     if (jj_scan_token(32)) jj_scanpos = xsp;
5154     if (jj_scan_token(NEWLINE)) return true;
5155     return false;
5156   }
5157 
5158   /** Generated Token Manager. */
5159   public StandardParserTokenManager token_source;
5160   /** Current token. */
5161   public Token token;
5162   /** Next token. */
5163   public Token jj_nt;
5164   private int jj_ntk;
5165   private Token jj_scanpos, jj_lastpos;
5166   private int jj_la;
5167   /** Whether we are looking ahead. */
5168   private boolean jj_lookingAhead = false;
5169   private boolean jj_semLA;
5170   private int jj_gen;
5171   final private int[] jj_la1 = new int[107];
5172   static private int[] jj_la1_0;
5173   static private int[] jj_la1_1;
5174   static private int[] jj_la1_2;
5175   static {
jj_la1_init_0()5176       jj_la1_init_0();
jj_la1_init_1()5177       jj_la1_init_1();
jj_la1_init_2()5178       jj_la1_init_2();
5179    }
jj_la1_init_0()5180    private static void jj_la1_init_0() {
5181       jj_la1_0 = new int[] {0x0,0x20000000,0x20000,0xc022,0x14,0x4000000,0x1a000000,0x0,0x0,0x1080,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200,0x0,0x0,0x0,0x0,0x4000000,0x2000000,0x0,0x0,0x0,0x0,0x0,0x200,0x0,0x0,0x2000,0x200,0x1080,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1080,0x0,0x0,0x200,0x5080,0x0,0x8,0x0,0x8,0x0,0x8,0x0,0x8,0x20,0x2000,0x0,0xc022,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5080,0x0,0x0,0x0,0x5080,0x0,0x0,};
5182    }
jj_la1_init_1()5183    private static void jj_la1_init_1() {
5184       jj_la1_1 = new int[] {0x0,0x0,0x0,0xc00000f,0x0,0x0,0x0,0x0,0x84000008,0x8000030,0x1,0x80000000,0x3,0x3,0x3,0x3,0x3,0x3,0x0,0x3,0x3,0x3,0x3,0x0,0x0,0x3,0x3,0x1,0x1,0x1,0x0,0x3,0x3,0x0,0x0,0xc00003b,0x3,0x3,0x4000000,0x3,0x3,0x3,0x3,0x4000000,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x4000008,0x8000030,0x3,0x3,0x0,0xc08007b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc000008,0x1,0x3,0x3,0x1,0x1,0x1,0x1,0x1,0x3,0x3,0x1,0x1,0x3,0x3,0x3,0x3,0x1,0x1000,0x1000,0x800,0x60000,0x60000,0x1e000,0x1e000,0xc0,0xc0,0x700,0x700,0x3,0x3,0xc08007b,0x3,0x3,0x4000008,0x8000030,0x3,0x3,};
5185    }
jj_la1_init_2()5186    private static void jj_la1_init_2() {
5187       jj_la1_2 = new int[] {0x4000,0x0,0x1000,0x1e380,0x0,0x0,0x0,0x48,0x148,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200,0x0,0x148,0x0,0x0,0x148,0x0,0x0,0x0,0x0,0x148,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x148,0x0,0x0,0x0,0x148,0x48,0x0,0x48,0x0,0x48,0x0,0x48,0x0,0x0,0x200,0x148,0x16380,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,0x148,0x0,0x0,0x148,0x0,0x0,0x0,};
5188    }
5189   final private JJCalls[] jj_2_rtns = new JJCalls[24];
5190   private boolean jj_rescan = false;
5191   private int jj_gc = 0;
5192 
5193   /** Constructor with user supplied CharStream. */
StandardParser(CharStream stream)5194   public StandardParser(CharStream stream) {
5195     token_source = new StandardParserTokenManager(this, stream);
5196     token = new Token();
5197     jj_ntk = -1;
5198     jj_gen = 0;
5199     for (int i = 0; i < 107; i++) jj_la1[i] = -1;
5200     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
5201   }
5202 
5203   /** Reinitialise. */
ReInit(CharStream stream)5204   public void ReInit(CharStream stream) {
5205     token_source.ReInit(stream);
5206     token = new Token();
5207     jj_ntk = -1;
5208     jj_lookingAhead = false;
5209     jjtree.reset();
5210     jj_gen = 0;
5211     for (int i = 0; i < 107; i++) jj_la1[i] = -1;
5212     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
5213   }
5214 
5215   /** Constructor with generated Token Manager. */
StandardParser(StandardParserTokenManager tm)5216   public StandardParser(StandardParserTokenManager tm) {
5217     token_source = tm;
5218     token = new Token();
5219     jj_ntk = -1;
5220     jj_gen = 0;
5221     for (int i = 0; i < 107; i++) jj_la1[i] = -1;
5222     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
5223   }
5224 
5225   /** Reinitialise. */
ReInit(StandardParserTokenManager tm)5226   public void ReInit(StandardParserTokenManager tm) {
5227     token_source = tm;
5228     token = new Token();
5229     jj_ntk = -1;
5230     jjtree.reset();
5231     jj_gen = 0;
5232     for (int i = 0; i < 107; i++) jj_la1[i] = -1;
5233     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
5234   }
5235 
jj_consume_token(int kind)5236   private Token jj_consume_token(int kind) throws ParseException {
5237     Token oldToken;
5238     if ((oldToken = token).next != null) token = token.next;
5239     else token = token.next = token_source.getNextToken();
5240     jj_ntk = -1;
5241     if (token.kind == kind) {
5242       jj_gen++;
5243       if (++jj_gc > 100) {
5244         jj_gc = 0;
5245         for (int i = 0; i < jj_2_rtns.length; i++) {
5246           JJCalls c = jj_2_rtns[i];
5247           while (c != null) {
5248             if (c.gen < jj_gen) c.first = null;
5249             c = c.next;
5250           }
5251         }
5252       }
5253       return token;
5254     }
5255     token = oldToken;
5256     jj_kind = kind;
5257     throw generateParseException();
5258   }
5259 
5260   static private final class LookaheadSuccess extends java.lang.Error { }
5261   final private LookaheadSuccess jj_ls = new LookaheadSuccess();
jj_scan_token(int kind)5262   private boolean jj_scan_token(int kind) {
5263     if (jj_scanpos == jj_lastpos) {
5264       jj_la--;
5265       if (jj_scanpos.next == null) {
5266         jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
5267       } else {
5268         jj_lastpos = jj_scanpos = jj_scanpos.next;
5269       }
5270     } else {
5271       jj_scanpos = jj_scanpos.next;
5272     }
5273     if (jj_rescan) {
5274       int i = 0; Token tok = token;
5275       while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
5276       if (tok != null) jj_add_error_token(kind, i);
5277     }
5278     if (jj_scanpos.kind != kind) return true;
5279     if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
5280     return false;
5281   }
5282 
5283 
5284 /** Get the next Token. */
getNextToken()5285   final public Token getNextToken() {
5286     if (token.next != null) token = token.next;
5287     else token = token.next = token_source.getNextToken();
5288     jj_ntk = -1;
5289     jj_gen++;
5290     return token;
5291   }
5292 
5293 /** Get the specific Token. */
getToken(int index)5294   final public Token getToken(int index) {
5295     Token t = jj_lookingAhead ? jj_scanpos : token;
5296     for (int i = 0; i < index; i++) {
5297       if (t.next != null) t = t.next;
5298       else t = t.next = token_source.getNextToken();
5299     }
5300     return t;
5301   }
5302 
jj_ntk()5303   private int jj_ntk() {
5304     if ((jj_nt=token.next) == null)
5305       return (jj_ntk = (token.next=token_source.getNextToken()).kind);
5306     else
5307       return (jj_ntk = jj_nt.kind);
5308   }
5309 
5310   private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();
5311   private int[] jj_expentry;
5312   private int jj_kind = -1;
5313   private int[] jj_lasttokens = new int[100];
5314   private int jj_endpos;
5315 
jj_add_error_token(int kind, int pos)5316   private void jj_add_error_token(int kind, int pos) {
5317     if (pos >= 100) return;
5318     if (pos == jj_endpos + 1) {
5319       jj_lasttokens[jj_endpos++] = kind;
5320     } else if (jj_endpos != 0) {
5321       jj_expentry = new int[jj_endpos];
5322       for (int i = 0; i < jj_endpos; i++) {
5323         jj_expentry[i] = jj_lasttokens[i];
5324       }
5325       jj_entries_loop: for (java.util.Iterator<?> it = jj_expentries.iterator(); it.hasNext();) {
5326         int[] oldentry = (int[])(it.next());
5327         if (oldentry.length == jj_expentry.length) {
5328           for (int i = 0; i < jj_expentry.length; i++) {
5329             if (oldentry[i] != jj_expentry[i]) {
5330               continue jj_entries_loop;
5331             }
5332           }
5333           jj_expentries.add(jj_expentry);
5334           break jj_entries_loop;
5335         }
5336       }
5337       if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
5338     }
5339   }
5340 
5341   /** Generate ParseException. */
generateParseException()5342   public ParseException generateParseException() {
5343     jj_expentries.clear();
5344     boolean[] la1tokens = new boolean[81];
5345     if (jj_kind >= 0) {
5346       la1tokens[jj_kind] = true;
5347       jj_kind = -1;
5348     }
5349     for (int i = 0; i < 107; i++) {
5350       if (jj_la1[i] == jj_gen) {
5351         for (int j = 0; j < 32; j++) {
5352           if ((jj_la1_0[i] & (1<<j)) != 0) {
5353             la1tokens[j] = true;
5354           }
5355           if ((jj_la1_1[i] & (1<<j)) != 0) {
5356             la1tokens[32+j] = true;
5357           }
5358           if ((jj_la1_2[i] & (1<<j)) != 0) {
5359             la1tokens[64+j] = true;
5360           }
5361         }
5362       }
5363     }
5364     for (int i = 0; i < 81; i++) {
5365       if (la1tokens[i]) {
5366         jj_expentry = new int[1];
5367         jj_expentry[0] = i;
5368         jj_expentries.add(jj_expentry);
5369       }
5370     }
5371     jj_endpos = 0;
5372     jj_rescan_token();
5373     jj_add_error_token(0, 0);
5374     int[][] exptokseq = new int[jj_expentries.size()][];
5375     for (int i = 0; i < jj_expentries.size(); i++) {
5376       exptokseq[i] = jj_expentries.get(i);
5377     }
5378     return new ParseException(token, exptokseq, tokenImage);
5379   }
5380 
5381   /** Enable tracing. */
enable_tracing()5382   final public void enable_tracing() {
5383   }
5384 
5385   /** Disable tracing. */
disable_tracing()5386   final public void disable_tracing() {
5387   }
5388 
jj_rescan_token()5389   private void jj_rescan_token() {
5390     jj_rescan = true;
5391     for (int i = 0; i < 24; i++) {
5392     try {
5393       JJCalls p = jj_2_rtns[i];
5394       do {
5395         if (p.gen > jj_gen) {
5396           jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
5397           switch (i) {
5398             case 0: jj_3_1(); break;
5399             case 1: jj_3_2(); break;
5400             case 2: jj_3_3(); break;
5401             case 3: jj_3_4(); break;
5402             case 4: jj_3_5(); break;
5403             case 5: jj_3_6(); break;
5404             case 6: jj_3_7(); break;
5405             case 7: jj_3_8(); break;
5406             case 8: jj_3_9(); break;
5407             case 9: jj_3_10(); break;
5408             case 10: jj_3_11(); break;
5409             case 11: jj_3_12(); break;
5410             case 12: jj_3_13(); break;
5411             case 13: jj_3_14(); break;
5412             case 14: jj_3_15(); break;
5413             case 15: jj_3_16(); break;
5414             case 16: jj_3_17(); break;
5415             case 17: jj_3_18(); break;
5416             case 18: jj_3_19(); break;
5417             case 19: jj_3_20(); break;
5418             case 20: jj_3_21(); break;
5419             case 21: jj_3_22(); break;
5420             case 22: jj_3_23(); break;
5421             case 23: jj_3_24(); break;
5422           }
5423         }
5424         p = p.next;
5425       } while (p != null);
5426       } catch(LookaheadSuccess ls) { }
5427     }
5428     jj_rescan = false;
5429   }
5430 
jj_save(int index, int xla)5431   private void jj_save(int index, int xla) {
5432     JJCalls p = jj_2_rtns[index];
5433     while (p.gen > jj_gen) {
5434       if (p.next == null) { p = p.next = new JJCalls(); break; }
5435       p = p.next;
5436     }
5437     p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
5438   }
5439 
5440   static final class JJCalls {
5441     int gen;
5442     Token first;
5443     int arg;
5444     JJCalls next;
5445   }
5446 
5447 }
5448