EMMA Coverage Report (generated Tue May 18 22:13:27 CDT 2004)
[all classes][org.apache.velocity.runtime.parser]

COVERAGE SUMMARY FOR SOURCE FILE [Parser.java]

nameclass, %method, %block, %line, %
Parser.java100% (2/2)91%  (135/149)61%  (5547/9032)64%  (1088/1700)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class Parser100% (1/1)91%  (134/148)61%  (5544/9029)64%  (1087/1699)
Assignment (): void 0%   (0/1)0%   (0/68)0%   (0/19)
Parser (ParserTokenManager): void 0%   (0/1)0%   (0/542)0%   (0/23)
ReInit (ParserTokenManager): void 0%   (0/1)0%   (0/46)0%   (0/8)
StopStatement (): void 0%   (0/1)0%   (0/5)0%   (0/2)
disable_tracing (): void 0%   (0/1)0%   (0/1)0%   (0/1)
enable_tracing (): void 0%   (0/1)0%   (0/1)0%   (0/1)
getNextToken (): Token 0%   (0/1)0%   (0/31)0%   (0/5)
jj_3R_32 (): boolean 0%   (0/1)0%   (0/17)0%   (0/3)
jj_3R_84 (): boolean 0%   (0/1)0%   (0/18)0%   (0/3)
jj_3R_85 (): boolean 0%   (0/1)0%   (0/18)0%   (0/3)
jj_3R_86 (): boolean 0%   (0/1)0%   (0/17)0%   (0/3)
jj_3R_87 (): boolean 0%   (0/1)0%   (0/17)0%   (0/3)
jj_3R_88 (): boolean 0%   (0/1)0%   (0/18)0%   (0/3)
jj_3R_89 (): boolean 0%   (0/1)0%   (0/33)0%   (0/5)
jj_add_error_token (int, int): void 100% (1/1)12%  (13/111)19%  (3.8/20)
jj_3R_82 (): boolean 100% (1/1)18%  (6/33)20%  (1/5)
jj_3R_62 (): boolean 100% (1/1)29%  (5/17)33%  (1/3)
jj_3R_68 (): boolean 100% (1/1)29%  (5/17)33%  (1/3)
jj_3R_69 (): boolean 100% (1/1)29%  (5/17)33%  (1/3)
jj_3R_70 (): boolean 100% (1/1)29%  (5/17)33%  (1/3)
jj_3R_74 (): boolean 100% (1/1)29%  (5/17)33%  (1/3)
jj_3R_75 (): boolean 100% (1/1)29%  (5/17)33%  (1/3)
jj_3R_77 (): boolean 100% (1/1)29%  (5/17)33%  (1/3)
jj_3R_78 (): boolean 100% (1/1)29%  (5/17)33%  (1/3)
jj_3R_79 (): boolean 100% (1/1)29%  (5/17)33%  (1/3)
jj_3R_80 (): boolean 100% (1/1)29%  (5/17)33%  (1/3)
jj_3R_55 (): boolean 100% (1/1)30%  (60/198)32%  (10/31)
jj_3R_73 (): boolean 100% (1/1)33%  (6/18)33%  (1/3)
jj_3R_83 (): boolean 100% (1/1)33%  (6/18)33%  (1/3)
jj_rescan_token (): void 100% (1/1)34%  (29/85)38%  (8/21)
jj_3R_64 (): boolean 100% (1/1)35%  (13/37)27%  (1.6/6)
Expression (): void 100% (1/1)37%  (23/62)37%  (6.3/17)
RelationalExpression (): void 100% (1/1)42%  (129/305)41%  (31.7/78)
AdditiveExpression (): void 100% (1/1)44%  (77/175)43%  (19.1/44)
EqualityExpression (): void 100% (1/1)44%  (77/175)43%  (19.1/44)
ElseStatement (): void 100% (1/1)44%  (63/143)39%  (14.6/37)
MultiplicativeExpression (): void 100% (1/1)44%  (106/240)42%  (25.7/61)
jj_3R_40 (): boolean 100% (1/1)46%  (32/70)40%  (4/10)
jj_3R_30 (): boolean 100% (1/1)47%  (8/17)63%  (1.9/3)
jj_3_8 (): boolean 100% (1/1)48%  (25/52)48%  (4.3/9)
jj_3R_60 (): boolean 100% (1/1)51%  (78/152)71%  (19.8/28)
ConditionalAndExpression (): void 100% (1/1)52%  (45/87)52%  (12.1/23)
ConditionalOrExpression (): void 100% (1/1)52%  (45/87)52%  (12.1/23)
UnaryExpression (): void 100% (1/1)52%  (62/119)52%  (15/29)
ElseIfStatement (): void 100% (1/1)53%  (92/174)49%  (21.5/44)
Reference (): void 100% (1/1)54%  (100/185)54%  (24.5/45)
jj_3R_56 (): boolean 100% (1/1)56%  (30/54)55%  (4.4/8)
ObjectArray (): void 100% (1/1)58%  (64/111)56%  (15.1/27)
Text (): void 100% (1/1)58%  (58/100)63%  (17.7/28)
jj_3R_21 (): boolean 100% (1/1)59%  (10/17)77%  (2.3/3)
jj_3R_22 (): boolean 100% (1/1)59%  (10/17)77%  (2.3/3)
jj_3R_27 (): boolean 100% (1/1)59%  (10/17)77%  (2.3/3)
jj_3R_28 (): boolean 100% (1/1)59%  (10/17)77%  (2.3/3)
jj_3R_36 (): boolean 100% (1/1)59%  (10/17)77%  (2.3/3)
jj_3R_37 (): boolean 100% (1/1)59%  (10/17)77%  (2.3/3)
jj_3R_45 (): boolean 100% (1/1)59%  (10/17)77%  (2.3/3)
jj_3R_49 (): boolean 100% (1/1)59%  (10/17)77%  (2.3/3)
jj_3R_20 (): boolean 100% (1/1)61%  (11/18)77%  (2.3/3)
jj_3R_23 (): boolean 100% (1/1)61%  (11/18)77%  (2.3/3)
jj_3R_24 (): boolean 100% (1/1)61%  (11/18)77%  (2.3/3)
jj_3R_26 (): boolean 100% (1/1)61%  (11/18)77%  (2.3/3)
jj_3R_29 (): boolean 100% (1/1)61%  (11/18)77%  (2.3/3)
jj_3R_33 (): boolean 100% (1/1)61%  (11/18)77%  (2.3/3)
jj_3R_34 (): boolean 100% (1/1)61%  (22/36)68%  (4.8/7)
jj_3R_35 (): boolean 100% (1/1)61%  (11/18)77%  (2.3/3)
jj_3R_38 (): boolean 100% (1/1)61%  (11/18)77%  (2.3/3)
jj_3R_58 (): boolean 100% (1/1)61%  (11/18)77%  (2.3/3)
jj_3_11 (): boolean 100% (1/1)61%  (66/108)75%  (12.8/17)
jj_3_2 (): boolean 100% (1/1)61%  (11/18)77%  (2.3/3)
jj_3_3 (): boolean 100% (1/1)61%  (66/108)75%  (12.8/17)
jj_3_5 (): boolean 100% (1/1)61%  (66/108)75%  (12.8/17)
Comment (): void 100% (1/1)61%  (43/70)73%  (11.7/16)
Method (): void 100% (1/1)64%  (72/113)61%  (17.1/28)
SetDirective (): void 100% (1/1)65%  (93/143)60%  (20.5/34)
IntegerRange (): void 100% (1/1)65%  (141/216)66%  (33.5/51)
EscapedDirective (): void 100% (1/1)68%  (34/50)90%  (9.9/11)
jj_scan_token (int): boolean 100% (1/1)71%  (54/76)73%  (8/11)
parse (Reader, String): SimpleNode 100% (1/1)71%  (77/108)79%  (15/19)
False (): void 100% (1/1)71%  (25/35)90%  (6.3/7)
Identifier (): void 100% (1/1)71%  (25/35)90%  (6.3/7)
NumberLiteral (): void 100% (1/1)71%  (25/35)90%  (6.3/7)
StringLiteral (): void 100% (1/1)71%  (25/35)90%  (6.3/7)
True (): void 100% (1/1)71%  (25/35)90%  (6.3/7)
Word (): void 100% (1/1)71%  (25/35)90%  (6.3/7)
IfStatement (): void 100% (1/1)72%  (168/233)72%  (40.5/56)
Statement (): void 100% (1/1)73%  (53/73)79%  (19.7/25)
jj_3R_51 (): boolean 100% (1/1)73%  (27/37)83%  (5/6)
jj_3R_59 (): boolean 100% (1/1)74%  (116/156)86%  (24/28)
jj_3R_52 (): boolean 100% (1/1)76%  (13/17)53%  (1.6/3)
Parameter (): void 100% (1/1)77%  (83/108)74%  (21.5/29)
DirectiveArg (): int 100% (1/1)78%  (59/76)86%  (19.7/23)
jj_3R_81 (): boolean 100% (1/1)78%  (14/18)56%  (1.7/3)
process (): SimpleNode 100% (1/1)79%  (74/94)85%  (20.3/24)
jj_3_10 (): boolean 100% (1/1)79%  (42/53)74%  (5.9/8)
jj_3_4 (): boolean 100% (1/1)81%  (30/37)88%  (5.3/6)
PrimaryExpression (): void 100% (1/1)82%  (97/119)88%  (29.2/33)
jj_3_6 (): boolean 100% (1/1)83%  (43/52)89%  (8/9)
Directive (): SimpleNode 100% (1/1)84%  (344/410)83%  (72/87)
jj_3R_31 (): boolean 100% (1/1)84%  (58/69)86%  (8.6/10)
Escape (): void 100% (1/1)85%  (93/109)93%  (22.4/24)
jj_3R_46 (): boolean 100% (1/1)88%  (15/17)67%  (2/3)
jj_3R_47 (): boolean 100% (1/1)88%  (15/17)67%  (2/3)
jj_3R_63 (): boolean 100% (1/1)88%  (15/17)67%  (2/3)
jj_3R_66 (): boolean 100% (1/1)88%  (15/17)67%  (2/3)
jj_3R_67 (): boolean 100% (1/1)88%  (15/17)67%  (2/3)
jj_3R_76 (): boolean 100% (1/1)88%  (15/17)67%  (2/3)
jj_3_9 (): boolean 100% (1/1)88%  (15/17)67%  (2/3)
jj_3R_50 (): boolean 100% (1/1)89%  (16/18)89%  (2.7/3)
jj_3R_61 (): boolean 100% (1/1)89%  (16/18)67%  (2/3)
jj_3R_65 (): boolean 100% (1/1)89%  (16/18)67%  (2/3)
jj_3R_25 (): boolean 100% (1/1)89%  (118/132)94%  (23.6/25)
getToken (int): Token 100% (1/1)91%  (29/32)95%  (4.7/5)
Parser (CharStream): void 100% (1/1)100% (545/545)100% (23/23)
Parser (RuntimeServices): void 100% (1/1)100% (28/28)100% (4/4)
ReInit (CharStream): void 100% (1/1)100% (47/47)100% (8/8)
escapedDirective (String): String 100% (1/1)100% (89/89)100% (12/12)
generateParseException (): ParseException 100% (1/1)100% (141/141)100% (26/26)
getDirective (String): Directive 100% (1/1)100% (6/6)100% (1/1)
isDirective (String): boolean 100% (1/1)100% (9/9)100% (3/3)
jj_2_1 (int): boolean 100% (1/1)100% (23/23)100% (4/4)
jj_2_10 (int): boolean 100% (1/1)100% (23/23)100% (4/4)
jj_2_11 (int): boolean 100% (1/1)100% (23/23)100% (4/4)
jj_2_2 (int): boolean 100% (1/1)100% (23/23)100% (4/4)
jj_2_3 (int): boolean 100% (1/1)100% (23/23)100% (4/4)
jj_2_4 (int): boolean 100% (1/1)100% (23/23)100% (4/4)
jj_2_5 (int): boolean 100% (1/1)100% (23/23)100% (4/4)
jj_2_6 (int): boolean 100% (1/1)100% (23/23)100% (4/4)
jj_2_7 (int): boolean 100% (1/1)100% (23/23)100% (4/4)
jj_2_8 (int): boolean 100% (1/1)100% (23/23)100% (4/4)
jj_2_9 (int): boolean 100% (1/1)100% (23/23)100% (4/4)
jj_3R_19 (): boolean 100% (1/1)100% (36/36)100% (7/7)
jj_3R_39 (): boolean 100% (1/1)100% (38/38)100% (6/6)
jj_3R_41 (): boolean 100% (1/1)100% (18/18)100% (3/3)
jj_3R_42 (): boolean 100% (1/1)100% (17/17)100% (3/3)
jj_3R_43 (): boolean 100% (1/1)100% (17/17)100% (3/3)
jj_3R_44 (): boolean 100% (1/1)100% (17/17)100% (3/3)
jj_3R_48 (): boolean 100% (1/1)100% (17/17)100% (3/3)
jj_3R_53 (): boolean 100% (1/1)100% (18/18)100% (3/3)
jj_3R_54 (): boolean 100% (1/1)100% (18/18)100% (3/3)
jj_3R_57 (): boolean 100% (1/1)100% (18/18)100% (3/3)
jj_3R_71 (): boolean 100% (1/1)100% (17/17)100% (3/3)
jj_3R_72 (): boolean 100% (1/1)100% (17/17)100% (3/3)
jj_3_1 (): boolean 100% (1/1)100% (17/17)100% (3/3)
jj_3_7 (): boolean 100% (1/1)100% (17/17)100% (3/3)
jj_consume_token (int): Token 100% (1/1)100% (87/87)100% (16/16)
jj_ntk (): int 100% (1/1)100% (26/26)100% (3/3)
jj_save (int, int): void 100% (1/1)100% (42/42)100% (6/6)
setDirectives (Hashtable): void 100% (1/1)100% (4/4)100% (2/2)
     
class Parser$JJCalls100% (1/1)100% (1/1)100% (3/3)100% (1/1)
Parser$JJCalls (): void 100% (1/1)100% (3/3)100% (1/1)

1/* Generated By:JJTree&JavaCC: Do not edit this line. Parser.java */
2package org.apache.velocity.runtime.parser;
3 
4import java.io.*;
5import java.util.*;
6 
7import org.apache.velocity.runtime.RuntimeServices;
8import org.apache.velocity.runtime.parser.node.*;
9import org.apache.velocity.runtime.directive.Directive;
10import org.apache.velocity.runtime.directive.Macro;
11import org.apache.velocity.runtime.directive.MacroParseException;
12import org.apache.velocity.util.StringUtils;
13 
14/**
15 * This class is responsible for parsing a Velocity
16 * template. This class was generated by JavaCC using
17 * the JJTree extension to produce an Abstract
18 * Syntax Tree (AST) of the template.
19 *
20 * Please look at the Parser.jjt file which is
21 * what controls the generation of this class.
22 *
23 * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
24 * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
25 * @version $Id: Parser.java,v 1.74 2002/04/27 19:33:30 geirm Exp $
26*/
27public class Parser/*@bgen(jjtree)*/implements ParserTreeConstants, ParserConstants {/*@bgen(jjtree)*/
28  protected JJTParserState jjtree = new JJTParserState();/**
29     *  This Hashtable contains a list of all of the dynamic directives.
30     */
31    private Hashtable directives = new Hashtable(0);
32 
33    /**
34     *  Name of current template we are parsing.  Passed to us in parse()
35     */
36    String currentTemplateName = "";
37 
38    VelocityCharStream velcharstream = null;
39 
40    private RuntimeServices rsvc = null;
41 
42    /**
43     * This constructor was added to allow the re-use of parsers.
44     * The normal constructor takes a single argument which
45     * an InputStream. This simply creates a re-usable parser
46     * object, we satisfy the requirement of an InputStream
47     * by using a newline character as an input stream.
48     */
49    public Parser( RuntimeServices rs)
50    {
51        /*
52         * need to call the CTOR first thing.
53         */
54 
55        this(   new VelocityCharStream(
56                new ByteArrayInputStream("\n".getBytes()), 1, 1 ));
57 
58        /*
59         * now setup a VCS for later use
60         */
61        velcharstream = new VelocityCharStream(
62                new ByteArrayInputStream("\n".getBytes()), 1, 1 );
63 
64        /*
65         *  and save the RuntimeServices
66         */
67        rsvc = rs;
68    }
69 
70    /**
71     * This was also added to allow parsers to be
72     * re-usable. Normal JavaCC use entails passing an
73     * input stream to the constructor and the parsing
74     * process is carried out once. We want to be able
75     * to re-use parsers: we do this by adding this
76     * method and re-initializing the lexer with
77     * the new stream that we want parsed.
78     */
79    public SimpleNode parse( Reader reader, String templateName )
80        throws ParseException
81    {
82        SimpleNode sn = null;
83 
84        currentTemplateName = templateName;
85 
86        try
87        {
88            token_source.clearStateVars();
89 
90            /*
91             *  reinitialize the VelocityCharStream
92             *  with the new reader
93             */
94            velcharstream.ReInit( reader, 1, 1 );
95 
96            /*
97             * now reinit the Parser with this CharStream
98             */
99            ReInit( velcharstream  );
100 
101            /*
102             *  do that voodoo...
103             */
104            sn = process();
105        }
106        catch (MacroParseException mee)
107        {
108            /*
109             *  thrown by the Macro class when something is amiss in the
110             *  Macro specification
111             */
112            rsvc.error ("Parser Error:  #macro() : " + templateName + " : " + StringUtils.stackTrace(mee));
113            throw new ParseException(mee.getMessage());
114        }
115        catch (ParseException pe)
116        {
117            rsvc.error ("Parser Exception: " + templateName + " : " + StringUtils.stackTrace(pe));
118            throw new ParseException (pe.currentToken,
119                pe.expectedTokenSequences, pe.tokenImage);
120        }
121        catch (TokenMgrError tme)
122        {
123            throw new ParseException("Lexical error: " + tme.toString());
124        }
125        catch (Exception e)
126        {
127            rsvc.error ("Parser Error: " + templateName + " : " + StringUtils.stackTrace(e));
128        }
129 
130        currentTemplateName = "";
131 
132        return sn;
133    }
134 
135    /**
136     *  This method sets the directives Hashtable
137     */
138    public void setDirectives(Hashtable directives)
139    {
140        this.directives = directives;
141    }
142 
143    /**
144     *  This method gets a Directive from the directives Hashtable
145     */
146    public Directive getDirective(String directive)
147    {
148        return (Directive) directives.get(directive);
149    }
150 
151    /**
152     *  This method finds out of the directive exists in the directives
153     *  Hashtable.
154     */
155    public boolean isDirective(String directive)
156    {
157        if (directives.containsKey(directive))
158            return true;
159        else
160            return false;
161    }
162 
163 
164    /**
165     * Produces a processed output for an escaped control or
166     * pluggable directive
167     */
168    private String escapedDirective( String strImage )
169    {
170        int iLast = strImage.lastIndexOf("\\");
171 
172        String strDirective = strImage.substring(iLast + 1);
173 
174        boolean bRecognizedDirective = false;
175 
176        /*
177         *  is this a PD or a control directive?
178         */
179 
180        if ( isDirective( strDirective.substring(1)))
181        {
182           bRecognizedDirective = true;
183        }
184        else if ( rsvc.isVelocimacro( strDirective.substring(1), currentTemplateName))
185        {
186            bRecognizedDirective = true;
187        }
188        else
189        {
190            /* order for speed? */
191 
192            if ( strDirective.substring(1).equals("if")
193                || strDirective.substring(1).equals("end")
194                || strDirective.substring(1).equals("set")
195                || strDirective.substring(1).equals("else")
196                || strDirective.substring(1).equals("elseif")
197                || strDirective.substring(1).equals("stop")
198            )
199            {
200                bRecognizedDirective = true;
201            }
202        }
203 
204        /*
205         *  if so, make the proper prefix string (let the escapes do their thing..)
206         *  otherwise, just return what it is..
207         */
208 
209        if (bRecognizedDirective)
210            return ( strImage.substring(0,iLast/2) + strDirective);
211        else
212            return ( strImage );
213    }
214 
215/**
216 * This method is what starts the whole parsing
217 * process. After the parsing is complete and
218 * the template has been turned into an AST,
219 * this method returns the root of AST which
220 * can subsequently be traversed by a visitor
221 * which implements the ParserVisitor interface
222 * which is generated automatically by JavaCC
223 */
224  final public SimpleNode process() throws ParseException {
225                        /*@bgen(jjtree) process */
226  ASTprocess jjtn000 = new ASTprocess(this, JJTPROCESS);
227  boolean jjtc000 = true;
228  jjtree.openNodeScope(jjtn000);
229    try {
230      label_1:
231      while (true) {
232        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
233        case LPAREN:
234        case RPAREN:
235        case ESCAPE_DIRECTIVE:
236        case SET_DIRECTIVE:
237        case DOUBLE_ESCAPE:
238        case ESCAPE:
239        case TEXT:
240        case SINGLE_LINE_COMMENT:
241        case FORMAL_COMMENT:
242        case MULTI_LINE_COMMENT:
243        case STRING_LITERAL:
244        case IF_DIRECTIVE:
245        case STOP_DIRECTIVE:
246        case NUMBER_LITERAL:
247        case WORD:
248        case IDENTIFIER:
249        case DOT:
250        case LCURLY:
251        case RCURLY:
252          ;
253          break;
254        default:
255          jj_la1[0] = jj_gen;
256          break label_1;
257        }
258        Statement();
259      }
260      jj_consume_token(0);
261     jjtree.closeNodeScope(jjtn000, true);
262     jjtc000 = false;
263     {if (true) return jjtn000;}
264    } catch (Throwable jjte000) {
265     if (jjtc000) {
266       jjtree.clearNodeScope(jjtn000);
267       jjtc000 = false;
268     } else {
269       jjtree.popNode();
270     }
271     if (jjte000 instanceof RuntimeException) {
272       {if (true) throw (RuntimeException)jjte000;}
273     }
274     if (jjte000 instanceof ParseException) {
275       {if (true) throw (ParseException)jjte000;}
276     }
277     {if (true) throw (Error)jjte000;}
278    } finally {
279     if (jjtc000) {
280       jjtree.closeNodeScope(jjtn000, true);
281     }
282    }
283    throw new Error("Missing return statement in function");
284  }
285 
286/**
287 * These are the types of statements that
288 * are acceptable in Velocity templates.
289 */
290  final public void Statement() throws ParseException {
291    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
292    case IF_DIRECTIVE:
293      IfStatement();
294      break;
295    case STOP_DIRECTIVE:
296      StopStatement();
297      break;
298    default:
299      jj_la1[1] = jj_gen;
300      if (jj_2_1(2)) {
301        Reference();
302      } else {
303        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
304        case SINGLE_LINE_COMMENT:
305        case FORMAL_COMMENT:
306        case MULTI_LINE_COMMENT:
307          Comment();
308          break;
309        case SET_DIRECTIVE:
310          SetDirective();
311          break;
312        case ESCAPE_DIRECTIVE:
313          EscapedDirective();
314          break;
315        case DOUBLE_ESCAPE:
316          Escape();
317          break;
318        case WORD:
319          Directive();
320          break;
321        case LPAREN:
322        case RPAREN:
323        case ESCAPE:
324        case TEXT:
325        case STRING_LITERAL:
326        case NUMBER_LITERAL:
327        case DOT:
328        case LCURLY:
329        case RCURLY:
330          Text();
331          break;
332        default:
333          jj_la1[2] = jj_gen;
334          jj_consume_token(-1);
335          throw new ParseException();
336        }
337      }
338    }
339  }
340 
341/**
342 *  used to separate the notion of a valid directive that has been
343 *  escaped, versus something that looks like a directive and
344 *  is just schmoo.  This is important to do as a separate production
345 *  that creates a node, because we want this, in either case, to stop
346 *  the further parsing of the Directive() tree.
347 */
348  final public void EscapedDirective() throws ParseException {
349                           /*@bgen(jjtree) EscapedDirective */
350  ASTEscapedDirective jjtn000 = new ASTEscapedDirective(this, JJTESCAPEDDIRECTIVE);
351  boolean jjtc000 = true;
352  jjtree.openNodeScope(jjtn000);
353    try {
354        Token t = null;
355      t = jj_consume_token(ESCAPE_DIRECTIVE);
356      jjtree.closeNodeScope(jjtn000, true);
357      jjtc000 = false;
358        /*
359         *  churn and burn..
360         */
361        t.image = escapedDirective( t.image );
362    } finally {
363      if (jjtc000) {
364        jjtree.closeNodeScope(jjtn000, true);
365      }
366    }
367  }
368 
369/**
370 *  Used to catch and process escape sequences in grammatical constructs
371 *  as escapes outside of VTL are just characters.  Right now we have both
372 *  this and the EscapeDirective() construction because in the EscapeDirective()
373 *  case, we want to suck in the #<directive> and here we don't.  We just want
374 *  the escapes to render correctly
375 */
376  final public void Escape() throws ParseException {
377                 /*@bgen(jjtree) Escape */
378  ASTEscape jjtn000 = new ASTEscape(this, JJTESCAPE);
379  boolean jjtc000 = true;
380  jjtree.openNodeScope(jjtn000);
381    try {
382        Token t = null;
383        int count = 0;
384        boolean control = false;
385      label_2:
386      while (true) {
387        t = jj_consume_token(DOUBLE_ESCAPE);
388        count++;
389        if (jj_2_2(2)) {
390          ;
391        } else {
392          break label_2;
393        }
394      }
395      jjtree.closeNodeScope(jjtn000, true);
396      jjtc000 = false;
397        /*
398         * first, check to see if we have a control directive
399         */
400        switch(t.next.kind ) {
401            case IF_DIRECTIVE :
402            case ELSE_DIRECTIVE :
403            case ELSEIF_DIRECTIVE :
404            case END :
405            case STOP_DIRECTIVE :
406                control = true;
407                break;
408        }
409 
410        /*
411         * if that failed, lets lookahead to see if we matched a PD or a VM
412         */
413 
414        if ( isDirective( t.next.image.substring(1)))
415            control = true;
416        else if ( rsvc.isVelocimacro( t.next.image.substring(1), currentTemplateName))
417            control = true;
418 
419        jjtn000.val = "";
420 
421        for( int i = 0; i < count; i++)
422            jjtn000.val += ( control ? "\\" : "\\\\");
423    } finally {
424      if (jjtc000) {
425        jjtree.closeNodeScope(jjtn000, true);
426      }
427    }
428  }
429 
430  final public void Comment() throws ParseException {
431                  /*@bgen(jjtree) Comment */
432  ASTComment jjtn000 = new ASTComment(this, JJTCOMMENT);
433  boolean jjtc000 = true;
434  jjtree.openNodeScope(jjtn000);
435    try {
436      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
437      case SINGLE_LINE_COMMENT:
438        jj_consume_token(SINGLE_LINE_COMMENT);
439        break;
440      case MULTI_LINE_COMMENT:
441        jj_consume_token(MULTI_LINE_COMMENT);
442        break;
443      case FORMAL_COMMENT:
444        jj_consume_token(FORMAL_COMMENT);
445        break;
446      default:
447        jj_la1[3] = jj_gen;
448        jj_consume_token(-1);
449        throw new ParseException();
450      }
451    } finally {
452      if (jjtc000) {
453        jjtree.closeNodeScope(jjtn000, true);
454      }
455    }
456  }
457 
458  final public void NumberLiteral() throws ParseException {
459                        /*@bgen(jjtree) NumberLiteral */
460  ASTNumberLiteral jjtn000 = new ASTNumberLiteral(this, JJTNUMBERLITERAL);
461  boolean jjtc000 = true;
462  jjtree.openNodeScope(jjtn000);
463    try {
464      jj_consume_token(NUMBER_LITERAL);
465    } finally {
466      if (jjtc000) {
467        jjtree.closeNodeScope(jjtn000, true);
468      }
469    }
470  }
471 
472  final public void StringLiteral() throws ParseException {
473                        /*@bgen(jjtree) StringLiteral */
474  ASTStringLiteral jjtn000 = new ASTStringLiteral(this, JJTSTRINGLITERAL);
475  boolean jjtc000 = true;
476  jjtree.openNodeScope(jjtn000);
477    try {
478      jj_consume_token(STRING_LITERAL);
479    } finally {
480      if (jjtc000) {
481        jjtree.closeNodeScope(jjtn000, true);
482      }
483    }
484  }
485 
486/**
487 * This method corresponds to variable
488 * references in Velocity templates.
489 * The following are examples of variable
490 * references that may be found in a
491 * template:
492 *
493 * $foo
494 * $bar
495 *
496 */
497  final public void Identifier() throws ParseException {
498                     /*@bgen(jjtree) Identifier */
499  ASTIdentifier jjtn000 = new ASTIdentifier(this, JJTIDENTIFIER);
500  boolean jjtc000 = true;
501  jjtree.openNodeScope(jjtn000);
502    try {
503      jj_consume_token(IDENTIFIER);
504    } finally {
505      if (jjtc000) {
506        jjtree.closeNodeScope(jjtn000, true);
507      }
508    }
509  }
510 
511  final public void Word() throws ParseException {
512               /*@bgen(jjtree) Word */
513  ASTWord jjtn000 = new ASTWord(this, JJTWORD);
514  boolean jjtc000 = true;
515  jjtree.openNodeScope(jjtn000);
516    try {
517      jj_consume_token(WORD);
518    } finally {
519      if (jjtc000) {
520        jjtree.closeNodeScope(jjtn000, true);
521      }
522    }
523  }
524 
525/**
526 *   Supports the arguments for the Pluggable Directives
527 *   We add whitespace in here as a token so the VMs can
528 *   easily reconstruct a macro body from the token stream
529 *   See Directive()
530 */
531  final public int DirectiveArg() throws ParseException {
532    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
533    case IDENTIFIER:
534    case LCURLY:
535      Reference();
536        {if (true) return ParserTreeConstants.JJTREFERENCE;}
537      break;
538    case WORD:
539      Word();
540        {if (true) return ParserTreeConstants.JJTWORD;}
541      break;
542    case STRING_LITERAL:
543      StringLiteral();
544        {if (true) return ParserTreeConstants.JJTSTRINGLITERAL;}
545      break;
546    case NUMBER_LITERAL:
547      NumberLiteral();
548        {if (true) return ParserTreeConstants.JJTNUMBERLITERAL;}
549      break;
550    default:
551      jj_la1[4] = jj_gen;
552      if (jj_2_3(2147483647)) {
553        IntegerRange();
554        {if (true) return ParserTreeConstants.JJTINTEGERRANGE;}
555      } else {
556        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
557        case LBRACKET:
558          ObjectArray();
559        {if (true) return ParserTreeConstants.JJTOBJECTARRAY;}
560          break;
561        case TRUE:
562          True();
563        {if (true) return ParserTreeConstants.JJTTRUE;}
564          break;
565        case FALSE:
566          False();
567        {if (true) return ParserTreeConstants.JJTFALSE;}
568          break;
569        default:
570          jj_la1[5] = jj_gen;
571          jj_consume_token(-1);
572          throw new ParseException();
573        }
574      }
575    }
576    throw new Error("Missing return statement in function");
577  }
578 
579/**
580 *   Supports the Pluggable Directives
581 *     #foo( arg+ )
582 */
583  final public SimpleNode Directive() throws ParseException {
584 /*@bgen(jjtree) Directive */
585    ASTDirective jjtn000 = new ASTDirective(this, JJTDIRECTIVE);
586    boolean jjtc000 = true;
587    jjtree.openNodeScope(jjtn000);Token t = null;
588    int argType;
589    int argPos = 0;
590    Directive d;
591    int directiveType;
592    boolean isVM = false;
593    boolean doItNow = false;
594    try {
595      /*
596           * note that if we were escaped, that is now handled by
597           * EscapedDirective()
598           */
599          t = jj_consume_token(WORD);
600        String directiveName = t.image.substring(1);
601 
602        d = (Directive) directives.get(directiveName);
603 
604        /*
605         *  Velocimacro support : if the directive is macro directive
606         *   then set the flag so after the block parsing, we add the VM
607         *   right then. (So available if used w/in the current template )
608         */
609 
610        if (directiveName.equals("macro"))
611        {
612             doItNow = true;
613        }
614 
615        /*
616         * set the directive name from here.  No reason for the thing to know
617         * about parser tokens
618         */
619 
620        jjtn000.setDirectiveName(directiveName);
621 
622        if ( d == null)
623        {
624            /*
625             *  if null, then not a real directive, but maybe a Velocimacro
626             */
627 
628            isVM = rsvc.isVelocimacro(directiveName, currentTemplateName);
629 
630            if (!isVM)
631            {
632                token_source.stateStackPop();
633                token_source.inDirective = false;
634                {if (true) return jjtn000;}
635            }
636 
637 
638            /*
639             *  Currently, all VMs are LINE directives
640             */
641 
642            directiveType = Directive.LINE;
643        }
644        else
645        {
646            directiveType = d.getType();
647        }
648 
649        /*
650         *  now, switch us out of PRE_DIRECTIVE
651         */
652 
653        token_source.SwitchTo(DIRECTIVE);
654 
655        argPos = 0;
656      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
657      case WHITESPACE:
658        jj_consume_token(WHITESPACE);
659        break;
660      default:
661        jj_la1[6] = jj_gen;
662        ;
663      }
664      jj_consume_token(LPAREN);
665      label_3:
666      while (true) {
667        if (jj_2_4(2)) {
668          ;
669        } else {
670          break label_3;
671        }
672        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
673        case WHITESPACE:
674          jj_consume_token(WHITESPACE);
675          break;
676        default:
677          jj_la1[7] = jj_gen;
678          ;
679        }
680        argType = DirectiveArg();
681                if (argType == ParserTreeConstants.JJTWORD)
682                {
683                    if (doItNow && argPos == 0)
684                    {
685                        /* if a VM and it's the 0th arg... ok */
686                        ;
687                    }
688                    else if( t.image.equals("#foreach") && argPos == 1)
689                    {
690                        /* if a foreach and it's the 2nd arg ok */
691                        ;
692                    }
693                    else
694                    {
695                        {if (true) throw new MacroParseException("Invalid arg #"
696                            + argPos + " in "
697                            + (isVM ? "VM " : "directive " )
698                            + t.image
699                            + " at line " + t.beginLine + ", column "
700                            + t.beginColumn
701                            + " in template " + currentTemplateName);}
702                    }
703                }
704                else
705                {
706                    if (doItNow && argPos == 0)
707                    {
708                        /* if a VM and it's the 0th arg, not ok */
709 
710                        {if (true) throw new MacroParseException("Invalid first arg "
711                            + " in #macro() directive - must be a"
712                            + " word token (no \' or \" surrounding)"
713                            + " at line " + t.beginLine + ", column "
714                            + t.beginColumn
715                            + " in template " + currentTemplateName);}
716                    }
717                }
718 
719                argPos++;
720      }
721      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
722      case WHITESPACE:
723        jj_consume_token(WHITESPACE);
724        break;
725      default:
726        jj_la1[8] = jj_gen;
727        ;
728      }
729      jj_consume_token(RPAREN);
730        if (directiveType  == Directive.LINE)
731        {
732            {if (true) return jjtn000;}
733        }
734      ASTBlock jjtn001 = new ASTBlock(this, JJTBLOCK);
735      boolean jjtc001 = true;
736      jjtree.openNodeScope(jjtn001);
737      try {
738        label_4:
739        while (true) {
740          Statement();
741          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
742          case LPAREN:
743          case RPAREN:
744          case ESCAPE_DIRECTIVE:
745          case SET_DIRECTIVE:
746          case DOUBLE_ESCAPE:
747          case ESCAPE:
748          case TEXT:
749          case SINGLE_LINE_COMMENT:
750          case FORMAL_COMMENT:
751          case MULTI_LINE_COMMENT:
752          case STRING_LITERAL:
753          case IF_DIRECTIVE:
754          case STOP_DIRECTIVE:
755          case NUMBER_LITERAL:
756          case WORD:
757          case IDENTIFIER:
758          case DOT:
759          case LCURLY:
760          case RCURLY:
761            ;
762            break;
763          default:
764            jj_la1[9] = jj_gen;
765            break label_4;
766          }
767        }
768      } catch (Throwable jjte001) {
769      if (jjtc001) {
770        jjtree.clearNodeScope(jjtn001);
771        jjtc001 = false;
772      } else {
773        jjtree.popNode();
774      }
775      if (jjte001 instanceof RuntimeException) {
776        {if (true) throw (RuntimeException)jjte001;}
777      }
778      if (jjte001 instanceof ParseException) {
779        {if (true) throw (ParseException)jjte001;}
780      }
781      {if (true) throw (Error)jjte001;}
782      } finally {
783      if (jjtc001) {
784        jjtree.closeNodeScope(jjtn001, true);
785      }
786      }
787      jj_consume_token(END);
788      jjtree.closeNodeScope(jjtn000, true);
789      jjtc000 = false;
790        /*
791         *  VM : if we are processing a #macro directive, we need to
792         *     process the block.  In truth, I can just register the name
793         *     and do the work later when init-ing.  That would work
794         *     as long as things were always defined before use.  This way
795         *     we don't have to worry about forward references and such...
796         */
797 
798        if (doItNow)
799        {
800            Macro.processAndRegister(rsvc, jjtn000, currentTemplateName);
801        }
802 
803        /*
804         *  VM : end
805         */
806 
807        {if (true) return jjtn000;}
808    } catch (Throwable jjte000) {
809      if (jjtc000) {
810        jjtree.clearNodeScope(jjtn000);
811        jjtc000 = false;
812      } else {
813        jjtree.popNode();
814      }
815      if (jjte000 instanceof RuntimeException) {
816        {if (true) throw (RuntimeException)jjte000;}
817      }
818      if (jjte000 instanceof ParseException) {
819        {if (true) throw (ParseException)jjte000;}
820      }
821      {if (true) throw (Error)jjte000;}
822    } finally {
823      if (jjtc000) {
824        jjtree.closeNodeScope(jjtn000, true);
825      }
826    }
827    throw new Error("Missing return statement in function");
828  }
829 
830  final public void ObjectArray() throws ParseException {
831                      /*@bgen(jjtree) ObjectArray */
832  ASTObjectArray jjtn000 = new ASTObjectArray(this, JJTOBJECTARRAY);
833  boolean jjtc000 = true;
834  jjtree.openNodeScope(jjtn000);
835    try {
836      jj_consume_token(LBRACKET);
837      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
838      case LBRACKET:
839      case WHITESPACE:
840      case STRING_LITERAL:
841      case TRUE:
842      case FALSE:
843      case NUMBER_LITERAL:
844      case IDENTIFIER:
845      case LCURLY:
846        Parameter();
847        label_5:
848        while (true) {
849          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
850          case COMMA:
851            ;
852            break;
853          default:
854            jj_la1[10] = jj_gen;
855            break label_5;
856          }
857          jj_consume_token(COMMA);
858          Parameter();
859        }
860        break;
861      default:
862        jj_la1[11] = jj_gen;
863        ;
864      }
865      jj_consume_token(RBRACKET);
866    } catch (Throwable jjte000) {
867      if (jjtc000) {
868        jjtree.clearNodeScope(jjtn000);
869        jjtc000 = false;
870      } else {
871        jjtree.popNode();
872      }
873      if (jjte000 instanceof RuntimeException) {
874        {if (true) throw (RuntimeException)jjte000;}
875      }
876      if (jjte000 instanceof ParseException) {
877        {if (true) throw (ParseException)jjte000;}
878      }
879      {if (true) throw (Error)jjte000;}
880    } finally {
881      if (jjtc000) {
882        jjtree.closeNodeScope(jjtn000, true);
883      }
884    }
885  }
886 
887/**
888 *  supports the [n..m] vector generator for use in
889 *  the #foreach() to generate measured ranges w/o
890 *  needing explicit support from the app/servlet
891 */
892  final public void IntegerRange() throws ParseException {
893                       /*@bgen(jjtree) IntegerRange */
894  ASTIntegerRange jjtn000 = new ASTIntegerRange(this, JJTINTEGERRANGE);
895  boolean jjtc000 = true;
896  jjtree.openNodeScope(jjtn000);
897    try {
898      jj_consume_token(LBRACKET);
899      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
900      case WHITESPACE:
901        jj_consume_token(WHITESPACE);
902        break;
903      default:
904        jj_la1[12] = jj_gen;
905        ;
906      }
907      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
908      case IDENTIFIER:
909      case LCURLY:
910        Reference();
911        break;
912      case NUMBER_LITERAL:
913        NumberLiteral();
914        break;
915      default:
916        jj_la1[13] = jj_gen;
917        jj_consume_token(-1);
918        throw new ParseException();
919      }
920      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
921      case WHITESPACE:
922        jj_consume_token(WHITESPACE);
923        break;
924      default:
925        jj_la1[14] = jj_gen;
926        ;
927      }
928      jj_consume_token(DOUBLEDOT);
929      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
930      case WHITESPACE:
931        jj_consume_token(WHITESPACE);
932        break;
933      default:
934        jj_la1[15] = jj_gen;
935        ;
936      }
937      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
938      case IDENTIFIER:
939      case LCURLY:
940        Reference();
941        break;
942      case NUMBER_LITERAL:
943        NumberLiteral();
944        break;
945      default:
946        jj_la1[16] = jj_gen;
947        jj_consume_token(-1);
948        throw new ParseException();
949      }
950      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
951      case WHITESPACE:
952        jj_consume_token(WHITESPACE);
953        break;
954      default:
955        jj_la1[17] = jj_gen;
956        ;
957      }
958      jj_consume_token(RBRACKET);
959    } catch (Throwable jjte000) {
960      if (jjtc000) {
961        jjtree.clearNodeScope(jjtn000);
962        jjtc000 = false;
963      } else {
964        jjtree.popNode();
965      }
966      if (jjte000 instanceof RuntimeException) {
967        {if (true) throw (RuntimeException)jjte000;}
968      }
969      if (jjte000 instanceof ParseException) {
970        {if (true) throw (ParseException)jjte000;}
971      }
972      {if (true) throw (Error)jjte000;}
973    } finally {
974      if (jjtc000) {
975        jjtree.closeNodeScope(jjtn000, true);
976      }
977    }
978  }
979 
980/**
981 * This method has yet to be fully implemented
982 * but will allow arbitrarily nested method
983 * calls
984 */
985  final public void Parameter() throws ParseException {
986    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
987    case WHITESPACE:
988      jj_consume_token(WHITESPACE);
989      break;
990    default:
991      jj_la1[18] = jj_gen;
992      ;
993    }
994    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
995    case STRING_LITERAL:
996      StringLiteral();
997      break;
998    default:
999      jj_la1[19] = jj_gen;
1000      if (jj_2_5(2147483647)) {
1001        IntegerRange();
1002      } else {
1003        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1004        case LBRACKET:
1005          ObjectArray();
1006          break;
1007        case TRUE:
1008          True();
1009          break;
1010        case FALSE:
1011          False();
1012          break;
1013        case IDENTIFIER:
1014        case LCURLY:
1015          Reference();
1016          break;
1017        case NUMBER_LITERAL:
1018          NumberLiteral();
1019          break;
1020        default:
1021          jj_la1[20] = jj_gen;
1022          jj_consume_token(-1);
1023          throw new ParseException();
1024        }
1025      }
1026    }
1027    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1028    case WHITESPACE:
1029      jj_consume_token(WHITESPACE);
1030      break;
1031    default:
1032      jj_la1[21] = jj_gen;
1033      ;
1034    }
1035  }
1036 
1037/**
1038 * This method has yet to be fully implemented
1039 * but will allow arbitrarily nested method
1040 * calls
1041 */
1042  final public void Method() throws ParseException {
1043                 /*@bgen(jjtree) Method */
1044  ASTMethod jjtn000 = new ASTMethod(this, JJTMETHOD);
1045  boolean jjtc000 = true;
1046  jjtree.openNodeScope(jjtn000);
1047    try {
1048      Identifier();
1049      jj_consume_token(LPAREN);
1050      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1051      case LBRACKET:
1052      case WHITESPACE:
1053      case STRING_LITERAL:
1054      case TRUE:
1055      case FALSE:
1056      case NUMBER_LITERAL:
1057      case IDENTIFIER:
1058      case LCURLY:
1059        Parameter();
1060        label_6:
1061        while (true) {
1062          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1063          case COMMA:
1064            ;
1065            break;
1066          default:
1067            jj_la1[22] = jj_gen;
1068            break label_6;
1069          }
1070          jj_consume_token(COMMA);
1071          Parameter();
1072        }
1073        break;
1074      default:
1075        jj_la1[23] = jj_gen;
1076        ;
1077      }
1078      jj_consume_token(REFMOD2_RPAREN);
1079    } catch (Throwable jjte000) {
1080     if (jjtc000) {
1081       jjtree.clearNodeScope(jjtn000);
1082       jjtc000 = false;
1083     } else {
1084       jjtree.popNode();
1085     }
1086     if (jjte000 instanceof RuntimeException) {
1087       {if (true) throw (RuntimeException)jjte000;}
1088     }
1089     if (jjte000 instanceof ParseException) {
1090       {if (true) throw (ParseException)jjte000;}
1091     }
1092     {if (true) throw (Error)jjte000;}
1093    } finally {
1094     if (jjtc000) {
1095       jjtree.closeNodeScope(jjtn000, true);
1096     }
1097    }
1098  }
1099 
1100  final public void Reference() throws ParseException {
1101                    /*@bgen(jjtree) Reference */
1102  ASTReference jjtn000 = new ASTReference(this, JJTREFERENCE);
1103  boolean jjtc000 = true;
1104  jjtree.openNodeScope(jjtn000);
1105    try {
1106      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1107      case IDENTIFIER:
1108        jj_consume_token(IDENTIFIER);
1109        label_7:
1110        while (true) {
1111          if (jj_2_6(2)) {
1112            ;
1113          } else {
1114            break label_7;
1115          }
1116          jj_consume_token(DOT);
1117          if (jj_2_7(3)) {
1118            Method();
1119          } else {
1120            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1121            case IDENTIFIER:
1122              Identifier();
1123              break;
1124            default:
1125              jj_la1[24] = jj_gen;
1126              jj_consume_token(-1);
1127              throw new ParseException();
1128            }
1129          }
1130        }
1131        break;
1132      case LCURLY:
1133        jj_consume_token(LCURLY);
1134        jj_consume_token(IDENTIFIER);
1135        label_8:
1136        while (true) {
1137          if (jj_2_8(2)) {
1138            ;
1139          } else {
1140            break label_8;
1141          }
1142          jj_consume_token(DOT);
1143          if (jj_2_9(3)) {
1144            Method();
1145          } else {
1146            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1147            case IDENTIFIER:
1148              Identifier();
1149              break;
1150            default:
1151              jj_la1[25] = jj_gen;
1152              jj_consume_token(-1);
1153              throw new ParseException();
1154            }
1155          }
1156        }
1157        jj_consume_token(RCURLY);
1158        break;
1159      default:
1160        jj_la1[26] = jj_gen;
1161        jj_consume_token(-1);
1162        throw new ParseException();
1163      }
1164    } catch (Throwable jjte000) {
1165        if (jjtc000) {
1166          jjtree.clearNodeScope(jjtn000);
1167          jjtc000 = false;
1168        } else {
1169          jjtree.popNode();
1170        }
1171        if (jjte000 instanceof RuntimeException) {
1172          {if (true) throw (RuntimeException)jjte000;}
1173        }
1174        if (jjte000 instanceof ParseException) {
1175          {if (true) throw (ParseException)jjte000;}
1176        }
1177        {if (true) throw (Error)jjte000;}
1178    } finally {
1179        if (jjtc000) {
1180          jjtree.closeNodeScope(jjtn000, true);
1181        }
1182    }
1183  }
1184 
1185  final public void True() throws ParseException {
1186               /*@bgen(jjtree) True */
1187  ASTTrue jjtn000 = new ASTTrue(this, JJTTRUE);
1188  boolean jjtc000 = true;
1189  jjtree.openNodeScope(jjtn000);
1190    try {
1191      jj_consume_token(TRUE);
1192    } finally {
1193      if (jjtc000) {
1194        jjtree.closeNodeScope(jjtn000, true);
1195      }
1196    }
1197  }
1198 
1199  final public void False() throws ParseException {
1200                /*@bgen(jjtree) False */
1201  ASTFalse jjtn000 = new ASTFalse(this, JJTFALSE);
1202  boolean jjtc000 = true;
1203  jjtree.openNodeScope(jjtn000);
1204    try {
1205      jj_consume_token(FALSE);
1206    } finally {
1207      if (jjtc000) {
1208        jjtree.closeNodeScope(jjtn000, true);
1209      }
1210    }
1211  }
1212 
1213/**
1214 * This method is responsible for allowing
1215 * all non-grammar text to pass through
1216 * unscathed.
1217 */
1218  final public void Text() throws ParseException {
1219               /*@bgen(jjtree) Text */
1220  ASTText jjtn000 = new ASTText(this, JJTTEXT);
1221  boolean jjtc000 = true;
1222  jjtree.openNodeScope(jjtn000);
1223    try {
1224      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1225      case TEXT:
1226        jj_consume_token(TEXT);
1227        break;
1228      case DOT:
1229        jj_consume_token(DOT);
1230        break;
1231      case RPAREN:
1232        jj_consume_token(RPAREN);
1233        break;
1234      case LPAREN:
1235        jj_consume_token(LPAREN);
1236        break;
1237      case NUMBER_LITERAL:
1238        jj_consume_token(NUMBER_LITERAL);
1239        break;
1240      case STRING_LITERAL:
1241        jj_consume_token(STRING_LITERAL);
1242        break;
1243      case ESCAPE:
1244        jj_consume_token(ESCAPE);
1245        break;
1246      case LCURLY:
1247        jj_consume_token(LCURLY);
1248        break;
1249      case RCURLY:
1250        jj_consume_token(RCURLY);
1251        break;
1252      default:
1253        jj_la1[27] = jj_gen;
1254        jj_consume_token(-1);
1255        throw new ParseException();
1256      }
1257    } finally {
1258      if (jjtc000) {
1259        jjtree.closeNodeScope(jjtn000, true);
1260      }
1261    }
1262  }
1263 
1264/* -----------------------------------------------------------------------
1265 *
1266 *  Defined Directive Syntax
1267 *
1268 * ----------------------------------------------------------------------*/
1269  final public void IfStatement() throws ParseException {
1270                      /*@bgen(jjtree) IfStatement */
1271  ASTIfStatement jjtn000 = new ASTIfStatement(this, JJTIFSTATEMENT);
1272  boolean jjtc000 = true;
1273  jjtree.openNodeScope(jjtn000);
1274    try {
1275      jj_consume_token(IF_DIRECTIVE);
1276      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1277      case WHITESPACE:
1278        jj_consume_token(WHITESPACE);
1279        break;
1280      default:
1281        jj_la1[28] = jj_gen;
1282        ;
1283      }
1284      jj_consume_token(LPAREN);
1285      Expression();
1286      jj_consume_token(RPAREN);
1287      ASTBlock jjtn001 = new ASTBlock(this, JJTBLOCK);
1288      boolean jjtc001 = true;
1289      jjtree.openNodeScope(jjtn001);
1290      try {
1291        label_9:
1292        while (true) {
1293          Statement();
1294          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1295          case LPAREN:
1296          case RPAREN:
1297          case ESCAPE_DIRECTIVE:
1298          case SET_DIRECTIVE:
1299          case DOUBLE_ESCAPE:
1300          case ESCAPE:
1301          case TEXT:
1302          case SINGLE_LINE_COMMENT:
1303          case FORMAL_COMMENT:
1304          case MULTI_LINE_COMMENT:
1305          case STRING_LITERAL:
1306          case IF_DIRECTIVE:
1307          case STOP_DIRECTIVE:
1308          case NUMBER_LITERAL:
1309          case WORD:
1310          case IDENTIFIER:
1311          case DOT:
1312          case LCURLY:
1313          case RCURLY:
1314            ;
1315            break;
1316          default:
1317            jj_la1[29] = jj_gen;
1318            break label_9;
1319          }
1320        }
1321      } catch (Throwable jjte001) {
1322      if (jjtc001) {
1323        jjtree.clearNodeScope(jjtn001);
1324        jjtc001 = false;
1325      } else {
1326        jjtree.popNode();
1327      }
1328      if (jjte001 instanceof RuntimeException) {
1329        {if (true) throw (RuntimeException)jjte001;}
1330      }
1331      if (jjte001 instanceof ParseException) {
1332        {if (true) throw (ParseException)jjte001;}
1333      }
1334      {if (true) throw (Error)jjte001;}
1335      } finally {
1336      if (jjtc001) {
1337        jjtree.closeNodeScope(jjtn001, true);
1338      }
1339      }
1340      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1341      case ELSEIF_DIRECTIVE:
1342        label_10:
1343        while (true) {
1344          ElseIfStatement();
1345          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1346          case ELSEIF_DIRECTIVE:
1347            ;
1348            break;
1349          default:
1350            jj_la1[30] = jj_gen;
1351            break label_10;
1352          }
1353        }
1354        break;
1355      default:
1356        jj_la1[31] = jj_gen;
1357        ;
1358      }
1359      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1360      case ELSE_DIRECTIVE:
1361        ElseStatement();
1362        break;
1363      default:
1364        jj_la1[32] = jj_gen;
1365        ;
1366      }
1367      jj_consume_token(END);
1368    } catch (Throwable jjte000) {
1369      if (jjtc000) {
1370        jjtree.clearNodeScope(jjtn000);
1371        jjtc000 = false;
1372      } else {
1373        jjtree.popNode();
1374      }
1375      if (jjte000 instanceof RuntimeException) {
1376        {if (true) throw (RuntimeException)jjte000;}
1377      }
1378      if (jjte000 instanceof ParseException) {
1379        {if (true) throw (ParseException)jjte000;}
1380      }
1381      {if (true) throw (Error)jjte000;}
1382    } finally {
1383      if (jjtc000) {
1384        jjtree.closeNodeScope(jjtn000, true);
1385      }
1386    }
1387  }
1388 
1389  final public void ElseStatement() throws ParseException {
1390                        /*@bgen(jjtree) ElseStatement */
1391  ASTElseStatement jjtn000 = new ASTElseStatement(this, JJTELSESTATEMENT);
1392  boolean jjtc000 = true;
1393  jjtree.openNodeScope(jjtn000);
1394    try {
1395      jj_consume_token(ELSE_DIRECTIVE);
1396      ASTBlock jjtn001 = new ASTBlock(this, JJTBLOCK);
1397      boolean jjtc001 = true;
1398      jjtree.openNodeScope(jjtn001);
1399      try {
1400        label_11:
1401        while (true) {
1402          Statement();
1403          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1404          case LPAREN:
1405          case RPAREN:
1406          case ESCAPE_DIRECTIVE:
1407          case SET_DIRECTIVE:
1408          case DOUBLE_ESCAPE:
1409          case ESCAPE:
1410          case TEXT:
1411          case SINGLE_LINE_COMMENT:
1412          case FORMAL_COMMENT:
1413          case MULTI_LINE_COMMENT:
1414          case STRING_LITERAL:
1415          case IF_DIRECTIVE:
1416          case STOP_DIRECTIVE:
1417          case NUMBER_LITERAL:
1418          case WORD:
1419          case IDENTIFIER:
1420          case DOT:
1421          case LCURLY:
1422          case RCURLY:
1423            ;
1424            break;
1425          default:
1426            jj_la1[33] = jj_gen;
1427            break label_11;
1428          }
1429        }
1430      } catch (Throwable jjte001) {
1431      if (jjtc001) {
1432        jjtree.clearNodeScope(jjtn001);
1433        jjtc001 = false;
1434      } else {
1435        jjtree.popNode();
1436      }
1437      if (jjte001 instanceof RuntimeException) {
1438        {if (true) throw (RuntimeException)jjte001;}
1439      }
1440      if (jjte001 instanceof ParseException) {
1441        {if (true) throw (ParseException)jjte001;}
1442      }
1443      {if (true) throw (Error)jjte001;}
1444      } finally {
1445      if (jjtc001) {
1446        jjtree.closeNodeScope(jjtn001, true);
1447      }
1448      }
1449    } catch (Throwable jjte000) {
1450     if (jjtc000) {
1451       jjtree.clearNodeScope(jjtn000);
1452       jjtc000 = false;
1453     } else {
1454       jjtree.popNode();
1455     }
1456     if (jjte000 instanceof RuntimeException) {
1457       {if (true) throw (RuntimeException)jjte000;}
1458     }
1459     if (jjte000 instanceof ParseException) {
1460       {if (true) throw (ParseException)jjte000;}
1461     }
1462     {if (true) throw (Error)jjte000;}
1463    } finally {
1464     if (jjtc000) {
1465       jjtree.closeNodeScope(jjtn000, true);
1466     }
1467    }
1468  }
1469 
1470  final public void ElseIfStatement() throws ParseException {
1471                          /*@bgen(jjtree) ElseIfStatement */
1472  ASTElseIfStatement jjtn000 = new ASTElseIfStatement(this, JJTELSEIFSTATEMENT);
1473  boolean jjtc000 = true;
1474  jjtree.openNodeScope(jjtn000);
1475    try {
1476      jj_consume_token(ELSEIF_DIRECTIVE);
1477      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1478      case WHITESPACE:
1479        jj_consume_token(WHITESPACE);
1480        break;
1481      default:
1482        jj_la1[34] = jj_gen;
1483        ;
1484      }
1485      jj_consume_token(LPAREN);
1486      Expression();
1487      jj_consume_token(RPAREN);
1488      ASTBlock jjtn001 = new ASTBlock(this, JJTBLOCK);
1489      boolean jjtc001 = true;
1490      jjtree.openNodeScope(jjtn001);
1491      try {
1492        label_12:
1493        while (true) {
1494          Statement();
1495          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1496          case LPAREN:
1497          case RPAREN:
1498          case ESCAPE_DIRECTIVE:
1499          case SET_DIRECTIVE:
1500          case DOUBLE_ESCAPE:
1501          case ESCAPE:
1502          case TEXT:
1503          case SINGLE_LINE_COMMENT:
1504          case FORMAL_COMMENT:
1505          case MULTI_LINE_COMMENT:
1506          case STRING_LITERAL:
1507          case IF_DIRECTIVE:
1508          case STOP_DIRECTIVE:
1509          case NUMBER_LITERAL:
1510          case WORD:
1511          case IDENTIFIER:
1512          case DOT:
1513          case LCURLY:
1514          case RCURLY:
1515            ;
1516            break;
1517          default:
1518            jj_la1[35] = jj_gen;
1519            break label_12;
1520          }
1521        }
1522      } catch (Throwable jjte001) {
1523      if (jjtc001) {
1524        jjtree.clearNodeScope(jjtn001);
1525        jjtc001 = false;
1526      } else {
1527        jjtree.popNode();
1528      }
1529      if (jjte001 instanceof RuntimeException) {
1530        {if (true) throw (RuntimeException)jjte001;}
1531      }
1532      if (jjte001 instanceof ParseException) {
1533        {if (true) throw (ParseException)jjte001;}
1534      }
1535      {if (true) throw (Error)jjte001;}
1536      } finally {
1537      if (jjtc001) {
1538        jjtree.closeNodeScope(jjtn001, true);
1539      }
1540      }
1541    } catch (Throwable jjte000) {
1542      if (jjtc000) {
1543        jjtree.clearNodeScope(jjtn000);
1544        jjtc000 = false;
1545      } else {
1546        jjtree.popNode();
1547      }
1548      if (jjte000 instanceof RuntimeException) {
1549        {if (true) throw (RuntimeException)jjte000;}
1550      }
1551      if (jjte000 instanceof ParseException) {
1552        {if (true) throw (ParseException)jjte000;}
1553      }
1554      {if (true) throw (Error)jjte000;}
1555    } finally {
1556      if (jjtc000) {
1557        jjtree.closeNodeScope(jjtn000, true);
1558      }
1559    }
1560  }
1561 
1562/**
1563 *  Currently support both types of set :
1564 *   #set( expr )
1565 *   #set expr
1566 */
1567  final public void SetDirective() throws ParseException {
1568                       /*@bgen(jjtree) SetDirective */
1569  ASTSetDirective jjtn000 = new ASTSetDirective(this, JJTSETDIRECTIVE);
1570  boolean jjtc000 = true;
1571  jjtree.openNodeScope(jjtn000);
1572    try {
1573      jj_consume_token(SET_DIRECTIVE);
1574      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1575      case WHITESPACE:
1576        jj_consume_token(WHITESPACE);
1577        break;
1578      default:
1579        jj_la1[36] = jj_gen;
1580        ;
1581      }
1582      Reference();
1583      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1584      case WHITESPACE:
1585        jj_consume_token(WHITESPACE);
1586        break;
1587      default:
1588        jj_la1[37] = jj_gen;
1589        ;
1590      }
1591      jj_consume_token(EQUALS);
1592      Expression();
1593      jj_consume_token(RPAREN);
1594        /*
1595         * ensure that inSet is false.  Leads to some amusing bugs...
1596         */
1597 
1598        token_source.inSet = false;
1599      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1600      case NEWLINE:
1601        jj_consume_token(NEWLINE);
1602        break;
1603      default:
1604        jj_la1[38] = jj_gen;
1605        ;
1606      }
1607    } catch (Throwable jjte000) {
1608      if (jjtc000) {
1609        jjtree.clearNodeScope(jjtn000);
1610        jjtc000 = false;
1611      } else {
1612        jjtree.popNode();
1613      }
1614      if (jjte000 instanceof RuntimeException) {
1615        {if (true) throw (RuntimeException)jjte000;}
1616      }
1617      if (jjte000 instanceof ParseException) {
1618        {if (true) throw (ParseException)jjte000;}
1619      }
1620      {if (true) throw (Error)jjte000;}
1621    } finally {
1622      if (jjtc000) {
1623        jjtree.closeNodeScope(jjtn000, true);
1624      }
1625    }
1626  }
1627 
1628/**
1629 * This method corresponds to the #stop
1630 * directive which just simulates and EOF
1631 * so that parsing stops. The #stop directive
1632 * is useful for end-user debugging
1633 * purposes.
1634 */
1635  final public void StopStatement() throws ParseException {
1636    jj_consume_token(STOP_DIRECTIVE);
1637  }
1638 
1639/* -----------------------------------------------------------------------
1640 *
1641 *  Expression Syntax
1642 *
1643 * ----------------------------------------------------------------------*/
1644  final public void Expression() throws ParseException {
1645                     /*@bgen(jjtree) Expression */
1646  ASTExpression jjtn000 = new ASTExpression(this, JJTEXPRESSION);
1647  boolean jjtc000 = true;
1648  jjtree.openNodeScope(jjtn000);
1649    try {
1650      ConditionalOrExpression();
1651    } catch (Throwable jjte000) {
1652  if (jjtc000) {
1653    jjtree.clearNodeScope(jjtn000);
1654    jjtc000 = false;
1655  } else {
1656    jjtree.popNode();
1657  }
1658  if (jjte000 instanceof RuntimeException) {
1659    {if (true) throw (RuntimeException)jjte000;}
1660  }
1661  if (jjte000 instanceof ParseException) {
1662    {if (true) throw (ParseException)jjte000;}
1663  }
1664  {if (true) throw (Error)jjte000;}
1665    } finally {
1666  if (jjtc000) {
1667    jjtree.closeNodeScope(jjtn000, true);
1668  }
1669    }
1670  }
1671 
1672  final public void Assignment() throws ParseException {
1673                                    /*@bgen(jjtree) #Assignment( 2) */
1674  ASTAssignment jjtn000 = new ASTAssignment(this, JJTASSIGNMENT);
1675  boolean jjtc000 = true;
1676  jjtree.openNodeScope(jjtn000);
1677    try {
1678      PrimaryExpression();
1679      jj_consume_token(EQUALS);
1680      Expression();
1681    } catch (Throwable jjte000) {
1682      if (jjtc000) {
1683        jjtree.clearNodeScope(jjtn000);
1684        jjtc000 = false;
1685      } else {
1686        jjtree.popNode();
1687      }
1688      if (jjte000 instanceof RuntimeException) {
1689        {if (true) throw (RuntimeException)jjte000;}
1690      }
1691      if (jjte000 instanceof ParseException) {
1692        {if (true) throw (ParseException)jjte000;}
1693      }
1694      {if (true) throw (Error)jjte000;}
1695    } finally {
1696      if (jjtc000) {
1697        jjtree.closeNodeScope(jjtn000,  2);
1698      }
1699    }
1700  }
1701 
1702  final public void ConditionalOrExpression() throws ParseException {
1703    ConditionalAndExpression();
1704    label_13:
1705    while (true) {
1706      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1707      case LOGICAL_OR:
1708        ;
1709        break;
1710      default:
1711        jj_la1[39] = jj_gen;
1712        break label_13;
1713      }
1714      jj_consume_token(LOGICAL_OR);
1715                     ASTOrNode jjtn001 = new ASTOrNode(this, JJTORNODE);
1716                     boolean jjtc001 = true;
1717                     jjtree.openNodeScope(jjtn001);
1718      try {
1719        ConditionalAndExpression();
1720      } catch (Throwable jjte001) {
1721                     if (jjtc001) {
1722                       jjtree.clearNodeScope(jjtn001);
1723                       jjtc001 = false;
1724                     } else {
1725                       jjtree.popNode();
1726                     }
1727                     if (jjte001 instanceof RuntimeException) {
1728                       {if (true) throw (RuntimeException)jjte001;}
1729                     }
1730                     if (jjte001 instanceof ParseException) {
1731                       {if (true) throw (ParseException)jjte001;}
1732                     }
1733                     {if (true) throw (Error)jjte001;}
1734      } finally {
1735                     if (jjtc001) {
1736                       jjtree.closeNodeScope(jjtn001,  2);
1737                     }
1738      }
1739    }
1740  }
1741 
1742  final public void ConditionalAndExpression() throws ParseException {
1743    EqualityExpression();
1744    label_14:
1745    while (true) {
1746      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1747      case LOGICAL_AND:
1748        ;
1749        break;
1750      default:
1751        jj_la1[40] = jj_gen;
1752        break label_14;
1753      }
1754      jj_consume_token(LOGICAL_AND);
1755                    ASTAndNode jjtn001 = new ASTAndNode(this, JJTANDNODE);
1756                    boolean jjtc001 = true;
1757                    jjtree.openNodeScope(jjtn001);
1758      try {
1759        EqualityExpression();
1760      } catch (Throwable jjte001) {
1761                    if (jjtc001) {
1762                      jjtree.clearNodeScope(jjtn001);
1763                      jjtc001 = false;
1764                    } else {
1765                      jjtree.popNode();
1766                    }
1767                    if (jjte001 instanceof RuntimeException) {
1768                      {if (true) throw (RuntimeException)jjte001;}
1769                    }
1770                    if (jjte001 instanceof ParseException) {
1771                      {if (true) throw (ParseException)jjte001;}
1772                    }
1773                    {if (true) throw (Error)jjte001;}
1774      } finally {
1775                    if (jjtc001) {
1776                      jjtree.closeNodeScope(jjtn001,  2);
1777                    }
1778      }
1779    }
1780  }
1781 
1782  final public void EqualityExpression() throws ParseException {
1783    RelationalExpression();
1784    label_15:
1785    while (true) {
1786      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1787      case LOGICAL_EQUALS:
1788      case LOGICAL_NOT_EQUALS:
1789        ;
1790        break;
1791      default:
1792        jj_la1[41] = jj_gen;
1793        break label_15;
1794      }
1795      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1796      case LOGICAL_EQUALS:
1797        jj_consume_token(LOGICAL_EQUALS);
1798                          ASTEQNode jjtn001 = new ASTEQNode(this, JJTEQNODE);
1799                          boolean jjtc001 = true;
1800                          jjtree.openNodeScope(jjtn001);
1801        try {
1802          RelationalExpression();
1803        } catch (Throwable jjte001) {
1804                          if (jjtc001) {
1805                            jjtree.clearNodeScope(jjtn001);
1806                            jjtc001 = false;
1807                          } else {
1808                            jjtree.popNode();
1809                          }
1810                          if (jjte001 instanceof RuntimeException) {
1811                            {if (true) throw (RuntimeException)jjte001;}
1812                          }
1813                          if (jjte001 instanceof ParseException) {
1814                            {if (true) throw (ParseException)jjte001;}
1815                          }
1816                          {if (true) throw (Error)jjte001;}
1817        } finally {
1818                          if (jjtc001) {
1819                            jjtree.closeNodeScope(jjtn001,  2);
1820                          }
1821        }
1822        break;
1823      case LOGICAL_NOT_EQUALS:
1824        jj_consume_token(LOGICAL_NOT_EQUALS);
1825                              ASTNENode jjtn002 = new ASTNENode(this, JJTNENODE);
1826                              boolean jjtc002 = true;
1827                              jjtree.openNodeScope(jjtn002);
1828        try {
1829          RelationalExpression();
1830        } catch (Throwable jjte002) {
1831                              if (jjtc002) {
1832                                jjtree.clearNodeScope(jjtn002);
1833                                jjtc002 = false;
1834                              } else {
1835                                jjtree.popNode();
1836                              }
1837                              if (jjte002 instanceof RuntimeException) {
1838                                {if (true) throw (RuntimeException)jjte002;}
1839                              }
1840                              if (jjte002 instanceof ParseException) {
1841                                {if (true) throw (ParseException)jjte002;}
1842                              }
1843                              {if (true) throw (Error)jjte002;}
1844        } finally {
1845                              if (jjtc002) {
1846                                jjtree.closeNodeScope(jjtn002,  2);
1847                              }
1848        }
1849        break;
1850      default:
1851        jj_la1[42] = jj_gen;
1852        jj_consume_token(-1);
1853        throw new ParseException();
1854      }
1855    }
1856  }
1857 
1858  final public void RelationalExpression() throws ParseException {
1859    AdditiveExpression();
1860    label_16:
1861    while (true) {
1862      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1863      case LOGICAL_LT:
1864      case LOGICAL_LE:
1865      case LOGICAL_GT:
1866      case LOGICAL_GE:
1867        ;
1868        break;
1869      default:
1870        jj_la1[43] = jj_gen;
1871        break label_16;
1872      }
1873      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1874      case LOGICAL_LT:
1875        jj_consume_token(LOGICAL_LT);
1876                        ASTLTNode jjtn001 = new ASTLTNode(this, JJTLTNODE);
1877                        boolean jjtc001 = true;
1878                        jjtree.openNodeScope(jjtn001);
1879        try {
1880          AdditiveExpression();
1881        } catch (Throwable jjte001) {
1882                        if (jjtc001) {
1883                          jjtree.clearNodeScope(jjtn001);
1884                          jjtc001 = false;
1885                        } else {
1886                          jjtree.popNode();
1887                        }
1888                        if (jjte001 instanceof RuntimeException) {
1889                          {if (true) throw (RuntimeException)jjte001;}
1890                        }
1891                        if (jjte001 instanceof ParseException) {
1892                          {if (true) throw (ParseException)jjte001;}
1893                        }
1894                        {if (true) throw (Error)jjte001;}
1895        } finally {
1896                        if (jjtc001) {
1897                          jjtree.closeNodeScope(jjtn001,  2);
1898                        }
1899        }
1900        break;
1901      case LOGICAL_GT:
1902        jj_consume_token(LOGICAL_GT);
1903                        ASTGTNode jjtn002 = new ASTGTNode(this, JJTGTNODE);
1904                        boolean jjtc002 = true;
1905                        jjtree.openNodeScope(jjtn002);
1906        try {
1907          AdditiveExpression();
1908        } catch (Throwable jjte002) {
1909                        if (jjtc002) {
1910                          jjtree.clearNodeScope(jjtn002);
1911                          jjtc002 = false;
1912                        } else {
1913                          jjtree.popNode();
1914                        }
1915                        if (jjte002 instanceof RuntimeException) {
1916                          {if (true) throw (RuntimeException)jjte002;}
1917                        }
1918                        if (jjte002 instanceof ParseException) {
1919                          {if (true) throw (ParseException)jjte002;}
1920                        }
1921                        {if (true) throw (Error)jjte002;}
1922        } finally {
1923                        if (jjtc002) {
1924                          jjtree.closeNodeScope(jjtn002,  2);
1925                        }
1926        }
1927        break;
1928      case LOGICAL_LE:
1929        jj_consume_token(LOGICAL_LE);
1930                        ASTLENode jjtn003 = new ASTLENode(this, JJTLENODE);
1931                        boolean jjtc003 = true;
1932                        jjtree.openNodeScope(jjtn003);
1933        try {
1934          AdditiveExpression();
1935        } catch (Throwable jjte003) {
1936                        if (jjtc003) {
1937                          jjtree.clearNodeScope(jjtn003);
1938                          jjtc003 = false;
1939                        } else {
1940                          jjtree.popNode();
1941                        }
1942                        if (jjte003 instanceof RuntimeException) {
1943                          {if (true) throw (RuntimeException)jjte003;}
1944                        }
1945                        if (jjte003 instanceof ParseException) {
1946                          {if (true) throw (ParseException)jjte003;}
1947                        }
1948                        {if (true) throw (Error)jjte003;}
1949        } finally {
1950                        if (jjtc003) {
1951                          jjtree.closeNodeScope(jjtn003,  2);
1952                        }
1953        }
1954        break;
1955      case LOGICAL_GE:
1956        jj_consume_token(LOGICAL_GE);
1957                        ASTGENode jjtn004 = new ASTGENode(this, JJTGENODE);
1958                        boolean jjtc004 = true;
1959                        jjtree.openNodeScope(jjtn004);
1960        try {
1961          AdditiveExpression();
1962        } catch (Throwable jjte004) {
1963                        if (jjtc004) {
1964                          jjtree.clearNodeScope(jjtn004);
1965                          jjtc004 = false;
1966                        } else {
1967                          jjtree.popNode();
1968                        }
1969                        if (jjte004 instanceof RuntimeException) {
1970                          {if (true) throw (RuntimeException)jjte004;}
1971                        }
1972                        if (jjte004 instanceof ParseException) {
1973                          {if (true) throw (ParseException)jjte004;}
1974                        }
1975                        {if (true) throw (Error)jjte004;}
1976        } finally {
1977                        if (jjtc004) {
1978                          jjtree.closeNodeScope(jjtn004,  2);
1979                        }
1980        }
1981        break;
1982      default:
1983        jj_la1[44] = jj_gen;
1984        jj_consume_token(-1);
1985        throw new ParseException();
1986      }
1987    }
1988  }
1989 
1990  final public void AdditiveExpression() throws ParseException {
1991    MultiplicativeExpression();
1992    label_17:
1993    while (true) {
1994      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1995      case MINUS:
1996      case PLUS:
1997        ;
1998        break;
1999      default:
2000        jj_la1[45] = jj_gen;
2001        break label_17;
2002      }
2003      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2004      case PLUS:
2005        jj_consume_token(PLUS);
2006                  ASTAddNode jjtn001 = new ASTAddNode(this, JJTADDNODE);
2007                  boolean jjtc001 = true;
2008                  jjtree.openNodeScope(jjtn001);
2009        try {
2010          MultiplicativeExpression();
2011        } catch (Throwable jjte001) {
2012                  if (jjtc001) {
2013                    jjtree.clearNodeScope(jjtn001);
2014                    jjtc001 = false;
2015                  } else {
2016                    jjtree.popNode();
2017                  }
2018                  if (jjte001 instanceof RuntimeException) {
2019                    {if (true) throw (RuntimeException)jjte001;}
2020                  }
2021                  if (jjte001 instanceof ParseException) {
2022                    {if (true) throw (ParseException)jjte001;}
2023                  }
2024                  {if (true) throw (Error)jjte001;}
2025        } finally {
2026                  if (jjtc001) {
2027                    jjtree.closeNodeScope(jjtn001,  2);
2028                  }
2029        }
2030        break;
2031      case MINUS:
2032        jj_consume_token(MINUS);
2033                  ASTSubtractNode jjtn002 = new ASTSubtractNode(this, JJTSUBTRACTNODE);
2034                  boolean jjtc002 = true;
2035                  jjtree.openNodeScope(jjtn002);
2036        try {
2037          MultiplicativeExpression();
2038        } catch (Throwable jjte002) {
2039                  if (jjtc002) {
2040                    jjtree.clearNodeScope(jjtn002);
2041                    jjtc002 = false;
2042                  } else {
2043                    jjtree.popNode();
2044                  }
2045                  if (jjte002 instanceof RuntimeException) {
2046                    {if (true) throw (RuntimeException)jjte002;}
2047                  }
2048                  if (jjte002 instanceof ParseException) {
2049                    {if (true) throw (ParseException)jjte002;}
2050                  }
2051                  {if (true) throw (Error)jjte002;}
2052        } finally {
2053                  if (jjtc002) {
2054                    jjtree.closeNodeScope(jjtn002,  2);
2055                  }
2056        }
2057        break;
2058      default:
2059        jj_la1[46] = jj_gen;
2060        jj_consume_token(-1);
2061        throw new ParseException();
2062      }
2063    }
2064  }
2065 
2066  final public void MultiplicativeExpression() throws ParseException {
2067    UnaryExpression();
2068    label_18:
2069    while (true) {
2070      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2071      case MULTIPLY:
2072      case DIVIDE:
2073      case MODULUS:
2074        ;
2075        break;
2076      default:
2077        jj_la1[47] = jj_gen;
2078        break label_18;
2079      }
2080      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2081      case MULTIPLY:
2082        jj_consume_token(MULTIPLY);
2083                          ASTMulNode jjtn001 = new ASTMulNode(this, JJTMULNODE);
2084                          boolean jjtc001 = true;
2085                          jjtree.openNodeScope(jjtn001);
2086        try {
2087          UnaryExpression();
2088        } catch (Throwable jjte001) {
2089                          if (jjtc001) {
2090                            jjtree.clearNodeScope(jjtn001);
2091                            jjtc001 = false;
2092                          } else {
2093                            jjtree.popNode();
2094                          }
2095                          if (jjte001 instanceof RuntimeException) {
2096                            {if (true) throw (RuntimeException)jjte001;}
2097                          }
2098                          if (jjte001 instanceof ParseException) {
2099                            {if (true) throw (ParseException)jjte001;}
2100                          }
2101                          {if (true) throw (Error)jjte001;}
2102        } finally {
2103                          if (jjtc001) {
2104                            jjtree.closeNodeScope(jjtn001,  2);
2105                          }
2106        }
2107        break;
2108      case DIVIDE:
2109        jj_consume_token(DIVIDE);
2110                        ASTDivNode jjtn002 = new ASTDivNode(this, JJTDIVNODE);
2111                        boolean jjtc002 = true;
2112                        jjtree.openNodeScope(jjtn002);
2113        try {
2114          UnaryExpression();
2115        } catch (Throwable jjte002) {
2116                        if (jjtc002) {
2117                          jjtree.clearNodeScope(jjtn002);
2118                          jjtc002 = false;
2119                        } else {
2120                          jjtree.popNode();
2121                        }
2122                        if (jjte002 instanceof RuntimeException) {
2123                          {if (true) throw (RuntimeException)jjte002;}
2124                        }
2125                        if (jjte002 instanceof ParseException) {
2126                          {if (true) throw (ParseException)jjte002;}
2127                        }
2128                        {if (true) throw (Error)jjte002;}
2129        } finally {
2130                        if (jjtc002) {
2131                          jjtree.closeNodeScope(jjtn002,  2);
2132                        }
2133        }
2134        break;
2135      case MODULUS:
2136        jj_consume_token(MODULUS);
2137                         ASTModNode jjtn003 = new ASTModNode(this, JJTMODNODE);
2138                         boolean jjtc003 = true;
2139                         jjtree.openNodeScope(jjtn003);
2140        try {
2141          UnaryExpression();
2142        } catch (Throwable jjte003) {
2143                         if (jjtc003) {
2144                           jjtree.clearNodeScope(jjtn003);
2145                           jjtc003 = false;
2146                         } else {
2147                           jjtree.popNode();
2148                         }
2149                         if (jjte003 instanceof RuntimeException) {
2150                           {if (true) throw (RuntimeException)jjte003;}
2151                         }
2152                         if (jjte003 instanceof ParseException) {
2153                           {if (true) throw (ParseException)jjte003;}
2154                         }
2155                         {if (true) throw (Error)jjte003;}
2156        } finally {
2157                         if (jjtc003) {
2158                           jjtree.closeNodeScope(jjtn003,  2);
2159                         }
2160        }
2161        break;
2162      default:
2163        jj_la1[48] = jj_gen;
2164        jj_consume_token(-1);
2165        throw new ParseException();
2166      }
2167    }
2168  }
2169 
2170  final public void UnaryExpression() throws ParseException {
2171    if (jj_2_10(2)) {
2172      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2173      case WHITESPACE:
2174        jj_consume_token(WHITESPACE);
2175        break;
2176      default:
2177        jj_la1[49] = jj_gen;
2178        ;
2179      }
2180      jj_consume_token(LOGICAL_NOT);
2181                                                    ASTNotNode jjtn001 = new ASTNotNode(this, JJTNOTNODE);
2182                                                    boolean jjtc001 = true;
2183                                                    jjtree.openNodeScope(jjtn001);
2184      try {
2185        UnaryExpression();
2186      } catch (Throwable jjte001) {
2187                                                    if (jjtc001) {
2188                                                      jjtree.clearNodeScope(jjtn001);
2189                                                      jjtc001 = false;
2190                                                    } else {
2191                                                      jjtree.popNode();
2192                                                    }
2193                                                    if (jjte001 instanceof RuntimeException) {
2194                                                      {if (true) throw (RuntimeException)jjte001;}
2195                                                    }
2196                                                    if (jjte001 instanceof ParseException) {
2197                                                      {if (true) throw (ParseException)jjte001;}
2198                                                    }
2199                                                    {if (true) throw (Error)jjte001;}
2200      } finally {
2201                                                    if (jjtc001) {
2202                                                      jjtree.closeNodeScope(jjtn001,  1);
2203                                                    }
2204      }
2205    } else {
2206      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2207      case LBRACKET:
2208      case LPAREN:
2209      case WHITESPACE:
2210      case STRING_LITERAL:
2211      case TRUE:
2212      case FALSE:
2213      case NUMBER_LITERAL:
2214      case IDENTIFIER:
2215      case LCURLY:
2216        PrimaryExpression();
2217        break;
2218      default:
2219        jj_la1[50] = jj_gen;
2220        jj_consume_token(-1);
2221        throw new ParseException();
2222      }
2223    }
2224  }
2225 
2226  final public void PrimaryExpression() throws ParseException {
2227    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2228    case WHITESPACE:
2229      jj_consume_token(WHITESPACE);
2230      break;
2231    default:
2232      jj_la1[51] = jj_gen;
2233      ;
2234    }
2235    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2236    case STRING_LITERAL:
2237      StringLiteral();
2238      break;
2239    case NUMBER_LITERAL:
2240      NumberLiteral();
2241      break;
2242    case IDENTIFIER:
2243    case LCURLY:
2244      Reference();
2245      break;
2246    default:
2247      jj_la1[52] = jj_gen;
2248      if (jj_2_11(2147483647)) {
2249        IntegerRange();
2250      } else {
2251        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2252        case LBRACKET:
2253          ObjectArray();
2254          break;
2255        case TRUE:
2256          True();
2257          break;
2258        case FALSE:
2259          False();
2260          break;
2261        case LPAREN:
2262          jj_consume_token(LPAREN);
2263          Expression();
2264          jj_consume_token(RPAREN);
2265          break;
2266        default:
2267          jj_la1[53] = jj_gen;
2268          jj_consume_token(-1);
2269          throw new ParseException();
2270        }
2271      }
2272    }
2273    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2274    case WHITESPACE:
2275      jj_consume_token(WHITESPACE);
2276      break;
2277    default:
2278      jj_la1[54] = jj_gen;
2279      ;
2280    }
2281  }
2282 
2283  final private boolean jj_2_1(int xla) {
2284    jj_la = xla; jj_lastpos = jj_scanpos = token;
2285    boolean retval = !jj_3_1();
2286    jj_save(0, xla);
2287    return retval;
2288  }
2289 
2290  final private boolean jj_2_2(int xla) {
2291    jj_la = xla; jj_lastpos = jj_scanpos = token;
2292    boolean retval = !jj_3_2();
2293    jj_save(1, xla);
2294    return retval;
2295  }
2296 
2297  final private boolean jj_2_3(int xla) {
2298    jj_la = xla; jj_lastpos = jj_scanpos = token;
2299    boolean retval = !jj_3_3();
2300    jj_save(2, xla);
2301    return retval;
2302  }
2303 
2304  final private boolean jj_2_4(int xla) {
2305    jj_la = xla; jj_lastpos = jj_scanpos = token;
2306    boolean retval = !jj_3_4();
2307    jj_save(3, xla);
2308    return retval;
2309  }
2310 
2311  final private boolean jj_2_5(int xla) {
2312    jj_la = xla; jj_lastpos = jj_scanpos = token;
2313    boolean retval = !jj_3_5();
2314    jj_save(4, xla);
2315    return retval;
2316  }
2317 
2318  final private boolean jj_2_6(int xla) {
2319    jj_la = xla; jj_lastpos = jj_scanpos = token;
2320    boolean retval = !jj_3_6();
2321    jj_save(5, xla);
2322    return retval;
2323  }
2324 
2325  final private boolean jj_2_7(int xla) {
2326    jj_la = xla; jj_lastpos = jj_scanpos = token;
2327    boolean retval = !jj_3_7();
2328    jj_save(6, xla);
2329    return retval;
2330  }
2331 
2332  final private boolean jj_2_8(int xla) {
2333    jj_la = xla; jj_lastpos = jj_scanpos = token;
2334    boolean retval = !jj_3_8();
2335    jj_save(7, xla);
2336    return retval;
2337  }
2338 
2339  final private boolean jj_2_9(int xla) {
2340    jj_la = xla; jj_lastpos = jj_scanpos = token;
2341    boolean retval = !jj_3_9();
2342    jj_save(8, xla);
2343    return retval;
2344  }
2345 
2346  final private boolean jj_2_10(int xla) {
2347    jj_la = xla; jj_lastpos = jj_scanpos = token;
2348    boolean retval = !jj_3_10();
2349    jj_save(9, xla);
2350    return retval;
2351  }
2352 
2353  final private boolean jj_2_11(int xla) {
2354    jj_la = xla; jj_lastpos = jj_scanpos = token;
2355    boolean retval = !jj_3_11();
2356    jj_save(10, xla);
2357    return retval;
2358  }
2359 
2360  final private boolean jj_3R_54() {
2361    if (jj_scan_token(STRING_LITERAL)) return true;
2362    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2363    return false;
2364  }
2365 
2366  final private boolean jj_3R_24() {
2367    if (jj_scan_token(WHITESPACE)) return true;
2368    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2369    return false;
2370  }
2371 
2372  final private boolean jj_3R_41() {
2373    if (jj_scan_token(NUMBER_LITERAL)) return true;
2374    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2375    return false;
2376  }
2377 
2378  final private boolean jj_3_4() {
2379    Token xsp;
2380    xsp = jj_scanpos;
2381    if (jj_3R_24()) jj_scanpos = xsp;
2382    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2383    if (jj_3R_25()) return true;
2384    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2385    return false;
2386  }
2387 
2388  final private boolean jj_3R_38() {
2389    if (jj_scan_token(WHITESPACE)) return true;
2390    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2391    return false;
2392  }
2393 
2394  final private boolean jj_3R_29() {
2395    if (jj_scan_token(WHITESPACE)) return true;
2396    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2397    return false;
2398  }
2399 
2400  final private boolean jj_3R_32() {
2401    if (jj_3R_50()) return true;
2402    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2403    return false;
2404  }
2405 
2406  final private boolean jj_3R_30() {
2407    if (jj_3R_50()) return true;
2408    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2409    return false;
2410  }
2411 
2412  final private boolean jj_3R_37() {
2413    if (jj_3R_41()) return true;
2414    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2415    return false;
2416  }
2417 
2418  final private boolean jj_3_2() {
2419    if (jj_scan_token(DOUBLE_ESCAPE)) return true;
2420    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2421    return false;
2422  }
2423 
2424  final private boolean jj_3R_28() {
2425    if (jj_3R_41()) return true;
2426    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2427    return false;
2428  }
2429 
2430  final private boolean jj_3R_36() {
2431    if (jj_3R_19()) return true;
2432    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2433    return false;
2434  }
2435 
2436  final private boolean jj_3_9() {
2437    if (jj_3R_31()) return true;
2438    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2439    return false;
2440  }
2441 
2442  final private boolean jj_3R_82() {
2443    if (jj_scan_token(COMMA)) return true;
2444    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2445    if (jj_3R_59()) return true;
2446    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2447    return false;
2448  }
2449 
2450  final private boolean jj_3R_23() {
2451    if (jj_scan_token(WHITESPACE)) return true;
2452    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2453    return false;
2454  }
2455 
2456  final private boolean jj_3_7() {
2457    if (jj_3R_31()) return true;
2458    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2459    return false;
2460  }
2461 
2462  final private boolean jj_3R_27() {
2463    if (jj_3R_19()) return true;
2464    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2465    return false;
2466  }
2467 
2468  final private boolean jj_3R_58() {
2469    if (jj_scan_token(FALSE)) return true;
2470    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2471    return false;
2472  }
2473 
2474  final private boolean jj_3R_35() {
2475    if (jj_scan_token(WHITESPACE)) return true;
2476    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2477    return false;
2478  }
2479 
2480  final private boolean jj_3R_57() {
2481    if (jj_scan_token(TRUE)) return true;
2482    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2483    return false;
2484  }
2485 
2486  final private boolean jj_3_8() {
2487    if (jj_scan_token(DOT)) return true;
2488    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2489    Token xsp;
2490    xsp = jj_scanpos;
2491    if (jj_3_9()) {
2492    jj_scanpos = xsp;
2493    if (jj_3R_32()) return true;
2494    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2495    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2496    return false;
2497  }
2498 
2499  final private boolean jj_3R_51() {
2500    if (jj_3R_59()) return true;
2501    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2502    Token xsp;
2503    while (true) {
2504      xsp = jj_scanpos;
2505      if (jj_3R_82()) { jj_scanpos = xsp; break; }
2506      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2507    }
2508    return false;
2509  }
2510 
2511  final private boolean jj_3_6() {
2512    if (jj_scan_token(DOT)) return true;
2513    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2514    Token xsp;
2515    xsp = jj_scanpos;
2516    if (jj_3_7()) {
2517    jj_scanpos = xsp;
2518    if (jj_3R_30()) return true;
2519    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2520    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2521    return false;
2522  }
2523 
2524  final private boolean jj_3R_40() {
2525    if (jj_scan_token(LCURLY)) return true;
2526    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2527    if (jj_scan_token(IDENTIFIER)) return true;
2528    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2529    Token xsp;
2530    while (true) {
2531      xsp = jj_scanpos;
2532      if (jj_3_8()) { jj_scanpos = xsp; break; }
2533      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2534    }
2535    if (jj_scan_token(RCURLY)) return true;
2536    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2537    return false;
2538  }
2539 
2540  final private boolean jj_3R_22() {
2541    if (jj_3R_41()) return true;
2542    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2543    return false;
2544  }
2545 
2546  final private boolean jj_3_11() {
2547    if (jj_scan_token(LBRACKET)) return true;
2548    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2549    Token xsp;
2550    xsp = jj_scanpos;
2551    if (jj_3R_35()) jj_scanpos = xsp;
2552    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2553    xsp = jj_scanpos;
2554    if (jj_3R_36()) {
2555    jj_scanpos = xsp;
2556    if (jj_3R_37()) return true;
2557    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2558    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2559    xsp = jj_scanpos;
2560    if (jj_3R_38()) jj_scanpos = xsp;
2561    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2562    if (jj_scan_token(DOUBLEDOT)) return true;
2563    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2564    return false;
2565  }
2566 
2567  final private boolean jj_3R_26() {
2568    if (jj_scan_token(WHITESPACE)) return true;
2569    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2570    return false;
2571  }
2572 
2573  final private boolean jj_3R_39() {
2574    if (jj_scan_token(IDENTIFIER)) return true;
2575    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2576    Token xsp;
2577    while (true) {
2578      xsp = jj_scanpos;
2579      if (jj_3_6()) { jj_scanpos = xsp; break; }
2580      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2581    }
2582    return false;
2583  }
2584 
2585  final private boolean jj_3_1() {
2586    if (jj_3R_19()) return true;
2587    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2588    return false;
2589  }
2590 
2591  final private boolean jj_3R_81() {
2592    if (jj_scan_token(LPAREN)) return true;
2593    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2594    return false;
2595  }
2596 
2597  final private boolean jj_3R_19() {
2598    Token xsp;
2599    xsp = jj_scanpos;
2600    if (jj_3R_39()) {
2601    jj_scanpos = xsp;
2602    if (jj_3R_40()) return true;
2603    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2604    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2605    return false;
2606  }
2607 
2608  final private boolean jj_3R_80() {
2609    if (jj_3R_58()) return true;
2610    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2611    return false;
2612  }
2613 
2614  final private boolean jj_3R_33() {
2615    if (jj_scan_token(WHITESPACE)) return true;
2616    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2617    return false;
2618  }
2619 
2620  final private boolean jj_3R_79() {
2621    if (jj_3R_57()) return true;
2622    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2623    return false;
2624  }
2625 
2626  final private boolean jj_3R_78() {
2627    if (jj_3R_56()) return true;
2628    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2629    return false;
2630  }
2631 
2632  final private boolean jj_3R_77() {
2633    if (jj_3R_55()) return true;
2634    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2635    return false;
2636  }
2637 
2638  final private boolean jj_3R_76() {
2639    if (jj_3R_19()) return true;
2640    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2641    return false;
2642  }
2643 
2644  final private boolean jj_3R_21() {
2645    if (jj_3R_19()) return true;
2646    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2647    return false;
2648  }
2649 
2650  final private boolean jj_3_5() {
2651    if (jj_scan_token(LBRACKET)) return true;
2652    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2653    Token xsp;
2654    xsp = jj_scanpos;
2655    if (jj_3R_26()) jj_scanpos = xsp;
2656    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2657    xsp = jj_scanpos;
2658    if (jj_3R_27()) {
2659    jj_scanpos = xsp;
2660    if (jj_3R_28()) return true;
2661    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2662    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2663    xsp = jj_scanpos;
2664    if (jj_3R_29()) jj_scanpos = xsp;
2665    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2666    if (jj_scan_token(DOUBLEDOT)) return true;
2667    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2668    return false;
2669  }
2670 
2671  final private boolean jj_3R_75() {
2672    if (jj_3R_41()) return true;
2673    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2674    return false;
2675  }
2676 
2677  final private boolean jj_3R_31() {
2678    if (jj_3R_50()) return true;
2679    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2680    if (jj_scan_token(LPAREN)) return true;
2681    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2682    Token xsp;
2683    xsp = jj_scanpos;
2684    if (jj_3R_51()) jj_scanpos = xsp;
2685    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2686    if (jj_scan_token(REFMOD2_RPAREN)) return true;
2687    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2688    return false;
2689  }
2690 
2691  final private boolean jj_3R_74() {
2692    if (jj_3R_54()) return true;
2693    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2694    return false;
2695  }
2696 
2697  final private boolean jj_3R_73() {
2698    if (jj_scan_token(WHITESPACE)) return true;
2699    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2700    return false;
2701  }
2702 
2703  final private boolean jj_3R_60() {
2704    Token xsp;
2705    xsp = jj_scanpos;
2706    if (jj_3R_73()) jj_scanpos = xsp;
2707    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2708    xsp = jj_scanpos;
2709    if (jj_3R_74()) {
2710    jj_scanpos = xsp;
2711    if (jj_3R_75()) {
2712    jj_scanpos = xsp;
2713    if (jj_3R_76()) {
2714    jj_scanpos = xsp;
2715    if (jj_3R_77()) {
2716    jj_scanpos = xsp;
2717    if (jj_3R_78()) {
2718    jj_scanpos = xsp;
2719    if (jj_3R_79()) {
2720    jj_scanpos = xsp;
2721    if (jj_3R_80()) {
2722    jj_scanpos = xsp;
2723    if (jj_3R_81()) return true;
2724    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2725    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2726    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2727    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2728    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2729    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2730    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2731    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2732    return false;
2733  }
2734 
2735  final private boolean jj_3R_85() {
2736    if (jj_scan_token(WHITESPACE)) return true;
2737    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2738    return false;
2739  }
2740 
2741  final private boolean jj_3R_72() {
2742    if (jj_3R_41()) return true;
2743    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2744    return false;
2745  }
2746 
2747  final private boolean jj_3R_71() {
2748    if (jj_3R_19()) return true;
2749    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2750    return false;
2751  }
2752 
2753  final private boolean jj_3R_83() {
2754    if (jj_scan_token(WHITESPACE)) return true;
2755    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2756    return false;
2757  }
2758 
2759  final private boolean jj_3R_70() {
2760    if (jj_3R_58()) return true;
2761    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2762    return false;
2763  }
2764 
2765  final private boolean jj_3R_69() {
2766    if (jj_3R_57()) return true;
2767    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2768    return false;
2769  }
2770 
2771  final private boolean jj_3R_34() {
2772    Token xsp;
2773    xsp = jj_scanpos;
2774    if (jj_3_10()) {
2775    jj_scanpos = xsp;
2776    if (jj_3R_52()) return true;
2777    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2778    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2779    return false;
2780  }
2781 
2782  final private boolean jj_3_10() {
2783    Token xsp;
2784    xsp = jj_scanpos;
2785    if (jj_3R_33()) jj_scanpos = xsp;
2786    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2787    if (jj_scan_token(LOGICAL_NOT)) return true;
2788    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2789    if (jj_3R_34()) return true;
2790    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2791    return false;
2792  }
2793 
2794  final private boolean jj_3R_52() {
2795    if (jj_3R_60()) return true;
2796    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2797    return false;
2798  }
2799 
2800  final private boolean jj_3R_68() {
2801    if (jj_3R_56()) return true;
2802    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2803    return false;
2804  }
2805 
2806  final private boolean jj_3R_67() {
2807    if (jj_3R_55()) return true;
2808    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2809    return false;
2810  }
2811 
2812  final private boolean jj_3R_66() {
2813    if (jj_3R_54()) return true;
2814    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2815    return false;
2816  }
2817 
2818  final private boolean jj_3R_20() {
2819    if (jj_scan_token(WHITESPACE)) return true;
2820    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2821    return false;
2822  }
2823 
2824  final private boolean jj_3R_87() {
2825    if (jj_3R_41()) return true;
2826    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2827    return false;
2828  }
2829 
2830  final private boolean jj_3R_89() {
2831    if (jj_scan_token(COMMA)) return true;
2832    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2833    if (jj_3R_59()) return true;
2834    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2835    return false;
2836  }
2837 
2838  final private boolean jj_3R_63() {
2839    if (jj_3R_41()) return true;
2840    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2841    return false;
2842  }
2843 
2844  final private boolean jj_3R_65() {
2845    if (jj_scan_token(WHITESPACE)) return true;
2846    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2847    return false;
2848  }
2849 
2850  final private boolean jj_3R_59() {
2851    Token xsp;
2852    xsp = jj_scanpos;
2853    if (jj_3R_65()) jj_scanpos = xsp;
2854    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2855    xsp = jj_scanpos;
2856    if (jj_3R_66()) {
2857    jj_scanpos = xsp;
2858    if (jj_3R_67()) {
2859    jj_scanpos = xsp;
2860    if (jj_3R_68()) {
2861    jj_scanpos = xsp;
2862    if (jj_3R_69()) {
2863    jj_scanpos = xsp;
2864    if (jj_3R_70()) {
2865    jj_scanpos = xsp;
2866    if (jj_3R_71()) {
2867    jj_scanpos = xsp;
2868    if (jj_3R_72()) return true;
2869    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2870    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2871    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2872    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2873    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2874    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2875    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2876    xsp = jj_scanpos;
2877    if (jj_3R_83()) jj_scanpos = xsp;
2878    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2879    return false;
2880  }
2881 
2882  final private boolean jj_3R_61() {
2883    if (jj_scan_token(WHITESPACE)) return true;
2884    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2885    return false;
2886  }
2887 
2888  final private boolean jj_3_3() {
2889    if (jj_scan_token(LBRACKET)) return true;
2890    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2891    Token xsp;
2892    xsp = jj_scanpos;
2893    if (jj_3R_20()) jj_scanpos = xsp;
2894    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2895    xsp = jj_scanpos;
2896    if (jj_3R_21()) {
2897    jj_scanpos = xsp;
2898    if (jj_3R_22()) return true;
2899    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2900    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2901    xsp = jj_scanpos;
2902    if (jj_3R_23()) jj_scanpos = xsp;
2903    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2904    if (jj_scan_token(DOUBLEDOT)) return true;
2905    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2906    return false;
2907  }
2908 
2909  final private boolean jj_3R_49() {
2910    if (jj_3R_58()) return true;
2911    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2912    return false;
2913  }
2914 
2915  final private boolean jj_3R_88() {
2916    if (jj_scan_token(WHITESPACE)) return true;
2917    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2918    return false;
2919  }
2920 
2921  final private boolean jj_3R_86() {
2922    if (jj_3R_19()) return true;
2923    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2924    return false;
2925  }
2926 
2927  final private boolean jj_3R_48() {
2928    if (jj_3R_57()) return true;
2929    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2930    return false;
2931  }
2932 
2933  final private boolean jj_3R_84() {
2934    if (jj_scan_token(WHITESPACE)) return true;
2935    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2936    return false;
2937  }
2938 
2939  final private boolean jj_3R_62() {
2940    if (jj_3R_19()) return true;
2941    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2942    return false;
2943  }
2944 
2945  final private boolean jj_3R_64() {
2946    if (jj_3R_59()) return true;
2947    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2948    Token xsp;
2949    while (true) {
2950      xsp = jj_scanpos;
2951      if (jj_3R_89()) { jj_scanpos = xsp; break; }
2952      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2953    }
2954    return false;
2955  }
2956 
2957  final private boolean jj_3R_47() {
2958    if (jj_3R_56()) return true;
2959    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2960    return false;
2961  }
2962 
2963  final private boolean jj_3R_55() {
2964    if (jj_scan_token(LBRACKET)) return true;
2965    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2966    Token xsp;
2967    xsp = jj_scanpos;
2968    if (jj_3R_61()) jj_scanpos = xsp;
2969    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2970    xsp = jj_scanpos;
2971    if (jj_3R_62()) {
2972    jj_scanpos = xsp;
2973    if (jj_3R_63()) return true;
2974    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2975    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2976    xsp = jj_scanpos;
2977    if (jj_3R_84()) jj_scanpos = xsp;
2978    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2979    if (jj_scan_token(DOUBLEDOT)) return true;
2980    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2981    xsp = jj_scanpos;
2982    if (jj_3R_85()) jj_scanpos = xsp;
2983    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2984    xsp = jj_scanpos;
2985    if (jj_3R_86()) {
2986    jj_scanpos = xsp;
2987    if (jj_3R_87()) return true;
2988    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2989    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2990    xsp = jj_scanpos;
2991    if (jj_3R_88()) jj_scanpos = xsp;
2992    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2993    if (jj_scan_token(RBRACKET)) return true;
2994    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
2995    return false;
2996  }
2997 
2998  final private boolean jj_3R_46() {
2999    if (jj_3R_55()) return true;
3000    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3001    return false;
3002  }
3003 
3004  final private boolean jj_3R_45() {
3005    if (jj_3R_41()) return true;
3006    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3007    return false;
3008  }
3009 
3010  final private boolean jj_3R_56() {
3011    if (jj_scan_token(LBRACKET)) return true;
3012    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3013    Token xsp;
3014    xsp = jj_scanpos;
3015    if (jj_3R_64()) jj_scanpos = xsp;
3016    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3017    if (jj_scan_token(RBRACKET)) return true;
3018    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3019    return false;
3020  }
3021 
3022  final private boolean jj_3R_44() {
3023    if (jj_3R_54()) return true;
3024    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3025    return false;
3026  }
3027 
3028  final private boolean jj_3R_43() {
3029    if (jj_3R_53()) return true;
3030    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3031    return false;
3032  }
3033 
3034  final private boolean jj_3R_42() {
3035    if (jj_3R_19()) return true;
3036    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3037    return false;
3038  }
3039 
3040  final private boolean jj_3R_25() {
3041    Token xsp;
3042    xsp = jj_scanpos;
3043    if (jj_3R_42()) {
3044    jj_scanpos = xsp;
3045    if (jj_3R_43()) {
3046    jj_scanpos = xsp;
3047    if (jj_3R_44()) {
3048    jj_scanpos = xsp;
3049    if (jj_3R_45()) {
3050    jj_scanpos = xsp;
3051    if (jj_3R_46()) {
3052    jj_scanpos = xsp;
3053    if (jj_3R_47()) {
3054    jj_scanpos = xsp;
3055    if (jj_3R_48()) {
3056    jj_scanpos = xsp;
3057    if (jj_3R_49()) return true;
3058    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3059    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3060    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3061    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3062    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3063    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3064    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3065    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3066    return false;
3067  }
3068 
3069  final private boolean jj_3R_53() {
3070    if (jj_scan_token(WORD)) return true;
3071    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3072    return false;
3073  }
3074 
3075  final private boolean jj_3R_50() {
3076    if (jj_scan_token(IDENTIFIER)) return true;
3077    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
3078    return false;
3079  }
3080 
3081  public ParserTokenManager token_source;
3082  public Token token, jj_nt;
3083  private int jj_ntk;
3084  private Token jj_scanpos, jj_lastpos;
3085  private int jj_la;
3086  public boolean lookingAhead = false;
3087  private boolean jj_semLA;
3088  private int jj_gen;
3089  final private int[] jj_la1 = new int[55];
3090  final private int[] jj_la1_0 = {0x13f0360,0x0,0x13f0360,0x380000,0x1000000,0x6000002,0x800000,0x800000,0x800000,0x13f0360,0x8,0x7800002,0x800000,0x0,0x800000,0x800000,0x0,0x800000,0x800000,0x1000000,0x6000002,0x800000,0x8,0x7800002,0x0,0x0,0x0,0x1060060,0x800000,0x13f0360,0x0,0x0,0x0,0x13f0360,0x800000,0x13f0360,0x800000,0x800000,0x8000000,0x0,0x0,0x0,0x0,0x0,0x0,0x30000000,0x30000000,0xc0000000,0xc0000000,0x800000,0x7800022,0x800000,0x1000000,0x6000022,0x800000,};
3091  final private int[] jj_la1_1 = {0xf129000,0x9000,0xe120000,0x0,0x5120000,0x0,0x0,0x0,0x0,0xf129000,0x0,0x5020000,0x0,0x5020000,0x0,0x0,0x5020000,0x0,0x0,0x0,0x5020000,0x0,0x0,0x5020000,0x1000000,0x1000000,0x5000000,0xe020000,0x0,0xf129000,0x2000,0x2000,0x4000,0xf129000,0x0,0xf129000,0x0,0x0,0x0,0x4,0x2,0x180,0x180,0x78,0x78,0x0,0x0,0x1,0x1,0x0,0x5020000,0x0,0x5020000,0x0,0x0,};
3092  final private JJCalls[] jj_2_rtns = new JJCalls[11];
3093  private boolean jj_rescan = false;
3094  private int jj_gc = 0;
3095 
3096  public Parser(CharStream stream) {
3097    token_source = new ParserTokenManager(stream);
3098    token = new Token();
3099    jj_ntk = -1;
3100    jj_gen = 0;
3101    for (int i = 0; i < 55; i++) jj_la1[i] = -1;
3102    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
3103  }
3104 
3105  public void ReInit(CharStream stream) {
3106    token_source.ReInit(stream);
3107    token = new Token();
3108    jj_ntk = -1;
3109    jjtree.reset();
3110    jj_gen = 0;
3111    for (int i = 0; i < 55; i++) jj_la1[i] = -1;
3112    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
3113  }
3114 
3115  public Parser(ParserTokenManager tm) {
3116    token_source = tm;
3117    token = new Token();
3118    jj_ntk = -1;
3119    jj_gen = 0;
3120    for (int i = 0; i < 55; i++) jj_la1[i] = -1;
3121    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
3122  }
3123 
3124  public void ReInit(ParserTokenManager tm) {
3125    token_source = tm;
3126    token = new Token();
3127    jj_ntk = -1;
3128    jjtree.reset();
3129    jj_gen = 0;
3130    for (int i = 0; i < 55; i++) jj_la1[i] = -1;
3131    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
3132  }
3133 
3134  final private Token jj_consume_token(int kind) throws ParseException {
3135    Token oldToken;
3136    if ((oldToken = token).next != null) token = token.next;
3137    else token = token.next = token_source.getNextToken();
3138    jj_ntk = -1;
3139    if (token.kind == kind) {
3140      jj_gen++;
3141      if (++jj_gc > 100) {
3142        jj_gc = 0;
3143        for (int i = 0; i < jj_2_rtns.length; i++) {
3144          JJCalls c = jj_2_rtns[i];
3145          while (c != null) {
3146            if (c.gen < jj_gen) c.first = null;
3147            c = c.next;
3148          }
3149        }
3150      }
3151      return token;
3152    }
3153    token = oldToken;
3154    jj_kind = kind;
3155    throw generateParseException();
3156  }
3157 
3158  final private boolean jj_scan_token(int kind) {
3159    if (jj_scanpos == jj_lastpos) {
3160      jj_la--;
3161      if (jj_scanpos.next == null) {
3162        jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
3163      } else {
3164        jj_lastpos = jj_scanpos = jj_scanpos.next;
3165      }
3166    } else {
3167      jj_scanpos = jj_scanpos.next;
3168    }
3169    if (jj_rescan) {
3170      int i = 0; Token tok = token;
3171      while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
3172      if (tok != null) jj_add_error_token(kind, i);
3173    }
3174    return (jj_scanpos.kind != kind);
3175  }
3176 
3177  final public Token getNextToken() {
3178    if (token.next != null) token = token.next;
3179    else token = token.next = token_source.getNextToken();
3180    jj_ntk = -1;
3181    jj_gen++;
3182    return token;
3183  }
3184 
3185  final public Token getToken(int index) {
3186    Token t = lookingAhead ? jj_scanpos : token;
3187    for (int i = 0; i < index; i++) {
3188      if (t.next != null) t = t.next;
3189      else t = t.next = token_source.getNextToken();
3190    }
3191    return t;
3192  }
3193 
3194  final private int jj_ntk() {
3195    if ((jj_nt=token.next) == null)
3196      return (jj_ntk = (token.next=token_source.getNextToken()).kind);
3197    else
3198      return (jj_ntk = jj_nt.kind);
3199  }
3200 
3201  private java.util.Vector jj_expentries = new java.util.Vector();
3202  private int[] jj_expentry;
3203  private int jj_kind = -1;
3204  private int[] jj_lasttokens = new int[100];
3205  private int jj_endpos;
3206 
3207  private void jj_add_error_token(int kind, int pos) {
3208    if (pos >= 100) return;
3209    if (pos == jj_endpos + 1) {
3210      jj_lasttokens[jj_endpos++] = kind;
3211    } else if (jj_endpos != 0) {
3212      jj_expentry = new int[jj_endpos];
3213      for (int i = 0; i < jj_endpos; i++) {
3214        jj_expentry[i] = jj_lasttokens[i];
3215      }
3216      boolean exists = false;
3217      for (java.util.Enumeration enum = jj_expentries.elements(); enum.hasMoreElements();) {
3218        int[] oldentry = (int[])(enum.nextElement());
3219        if (oldentry.length == jj_expentry.length) {
3220          exists = true;
3221          for (int i = 0; i < jj_expentry.length; i++) {
3222            if (oldentry[i] != jj_expentry[i]) {
3223              exists = false;
3224              break;
3225            }
3226          }
3227          if (exists) break;
3228        }
3229      }
3230      if (!exists) jj_expentries.addElement(jj_expentry);
3231      if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
3232    }
3233  }
3234 
3235  final public ParseException generateParseException() {
3236    jj_expentries.removeAllElements();
3237    boolean[] la1tokens = new boolean[62];
3238    for (int i = 0; i < 62; i++) {
3239      la1tokens[i] = false;
3240    }
3241    if (jj_kind >= 0) {
3242      la1tokens[jj_kind] = true;
3243      jj_kind = -1;
3244    }
3245    for (int i = 0; i < 55; i++) {
3246      if (jj_la1[i] == jj_gen) {
3247        for (int j = 0; j < 32; j++) {
3248          if ((jj_la1_0[i] & (1<<j)) != 0) {
3249            la1tokens[j] = true;
3250          }
3251          if ((jj_la1_1[i] & (1<<j)) != 0) {
3252            la1tokens[32+j] = true;
3253          }
3254        }
3255      }
3256    }
3257    for (int i = 0; i < 62; i++) {
3258      if (la1tokens[i]) {
3259        jj_expentry = new int[1];
3260        jj_expentry[0] = i;
3261        jj_expentries.addElement(jj_expentry);
3262      }
3263    }
3264    jj_endpos = 0;
3265    jj_rescan_token();
3266    jj_add_error_token(0, 0);
3267    int[][] exptokseq = new int[jj_expentries.size()][];
3268    for (int i = 0; i < jj_expentries.size(); i++) {
3269      exptokseq[i] = (int[])jj_expentries.elementAt(i);
3270    }
3271    return new ParseException(token, exptokseq, tokenImage);
3272  }
3273 
3274  final public void enable_tracing() {
3275  }
3276 
3277  final public void disable_tracing() {
3278  }
3279 
3280  final private void jj_rescan_token() {
3281    jj_rescan = true;
3282    for (int i = 0; i < 11; i++) {
3283      JJCalls p = jj_2_rtns[i];
3284      do {
3285        if (p.gen > jj_gen) {
3286          jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
3287          switch (i) {
3288            case 0: jj_3_1(); break;
3289            case 1: jj_3_2(); break;
3290            case 2: jj_3_3(); break;
3291            case 3: jj_3_4(); break;
3292            case 4: jj_3_5(); break;
3293            case 5: jj_3_6(); break;
3294            case 6: jj_3_7(); break;
3295            case 7: jj_3_8(); break;
3296            case 8: jj_3_9(); break;
3297            case 9: jj_3_10(); break;
3298            case 10: jj_3_11(); break;
3299          }
3300        }
3301        p = p.next;
3302      } while (p != null);
3303    }
3304    jj_rescan = false;
3305  }
3306 
3307  final private void jj_save(int index, int xla) {
3308    JJCalls p = jj_2_rtns[index];
3309    while (p.gen > jj_gen) {
3310      if (p.next == null) { p = p.next = new JJCalls(); break; }
3311      p = p.next;
3312    }
3313    p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
3314  }
3315 
3316  static final class JJCalls {
3317    int gen;
3318    Token first;
3319    int arg;
3320    JJCalls next;
3321  }
3322 
3323}

[all classes][org.apache.velocity.runtime.parser]
EMMA 2.0.4015 (stable) (C) Vladimir Roubtsov