View Javadoc

1   /* Generated By:JJTree&JavaCC: Do not edit this line. JspParser.java */
2   /*** 
3    * JSP Parser for PMD.
4    * @author Pieter � Application Engineers NV/SA � http://www.ae.be
5    */
6   
7   package net.sourceforge.pmd.jsp.ast;
8   
9   public class JspParser/*@bgen(jjtree)*/implements JspParserTreeConstants, JspParserConstants {/*@bgen(jjtree)*/
10    protected JJTJspParserState jjtree = new JJTJspParserState();
11          /***
12  	 * Return the contents of a quote.
13  	 * @param quote String - starting and ending with " or '
14  	 * @return String a substring of quote: quote without the first and list
15  	 * character.
16  	 */
17          private static String quoteContent(String quote) {
18                  return quote.substring(1, quote.length()-1);
19          }
20  
21          /***
22  	 * Return the contents of a EL expression or a Value Binding expression.
23  	 * @param expression String - starting with ${ or #{ and ending with }
24  	 * @return String a substring of expression: expression without the first two and list
25  	 * characters.
26  	 */
27          private static String expressionContent(String expression) {
28                  return expression.substring(2, expression.length()-1).trim();
29          }
30  
31  /*** ******************************************************************** */
32  /*** *************************  JSP GRAMMAR  **************************** */
33  /*** ******************************************************************** */
34  
35  /***
36   * The root of the AST of a JSP.
37   */
38    final public ASTCompilationUnit CompilationUnit() throws ParseException {
39   /*@bgen(jjtree) CompilationUnit */
40    ASTCompilationUnit jjtn000 = new ASTCompilationUnit(this, JJTCOMPILATIONUNIT);
41    boolean jjtc000 = true;
42    jjtree.openNodeScope(jjtn000);
43      try {
44        Prolog();
45        Content();
46        jj_consume_token(0);
47      jjtree.closeNodeScope(jjtn000, true);
48      jjtc000 = false;
49      {if (true) return jjtn000;}
50      } catch (Throwable jjte000) {
51      if (jjtc000) {
52        jjtree.clearNodeScope(jjtn000);
53        jjtc000 = false;
54      } else {
55        jjtree.popNode();
56      }
57      if (jjte000 instanceof RuntimeException) {
58        {if (true) throw (RuntimeException)jjte000;}
59      }
60      if (jjte000 instanceof ParseException) {
61        {if (true) throw (ParseException)jjte000;}
62      }
63      {if (true) throw (Error)jjte000;}
64      } finally {
65      if (jjtc000) {
66        jjtree.closeNodeScope(jjtn000, true);
67      }
68      }
69      throw new RuntimeException("Missing return statement in function");
70    }
71  
72  /***
73   * The optional prolog of a JSP, including (xml) declarations and DTD.
74   */
75    final public void Prolog() throws ParseException {
76      if (jj_2_1(2147483647)) {
77        label_1:
78        while (true) {
79          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
80          case COMMENT_START:
81          case JSP_COMMENT_START:
82            ;
83            break;
84          default:
85            jj_la1[0] = jj_gen;
86            break label_1;
87          }
88          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
89          case COMMENT_START:
90            CommentTag();
91            break;
92          case JSP_COMMENT_START:
93            JspComment();
94            break;
95          default:
96            jj_la1[1] = jj_gen;
97            jj_consume_token(-1);
98            throw new ParseException();
99          }
100       }
101       Declaration();
102     } else {
103       ;
104     }
105     if (jj_2_2(2147483647)) {
106       label_2:
107       while (true) {
108         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
109         case COMMENT_START:
110         case JSP_COMMENT_START:
111           ;
112           break;
113         default:
114           jj_la1[2] = jj_gen;
115           break label_2;
116         }
117         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
118         case COMMENT_START:
119           CommentTag();
120           break;
121         case JSP_COMMENT_START:
122           JspComment();
123           break;
124         default:
125           jj_la1[3] = jj_gen;
126           jj_consume_token(-1);
127           throw new ParseException();
128         }
129       }
130       DoctypeDeclaration();
131     } else {
132       ;
133     }
134   }
135 
136 /***
137  * Everything between a start-tag and the corresponding end-tag of an element.
138  */
139   final public void Content() throws ParseException {
140  /*@bgen(jjtree) Content */
141   ASTContent jjtn000 = new ASTContent(this, JJTCONTENT);
142   boolean jjtc000 = true;
143   jjtree.openNodeScope(jjtn000);
144     try {
145       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
146       case EL_EXPRESSION:
147       case UNPARSED_TEXT:
148         Text();
149         break;
150       case TAG_START:
151       case COMMENT_START:
152       case CDATA_START:
153       case JSP_COMMENT_START:
154       case JSP_DECLARATION_START:
155       case JSP_EXPRESSION_START:
156       case JSP_SCRIPTLET_START:
157       case JSP_DIRECTIVE_START:
158         ContentElementPossiblyWithText();
159         break;
160       default:
161         jj_la1[4] = jj_gen;
162         jj_consume_token(-1);
163         throw new ParseException();
164       }
165       label_3:
166       while (true) {
167         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
168         case TAG_START:
169         case COMMENT_START:
170         case CDATA_START:
171         case JSP_COMMENT_START:
172         case JSP_DECLARATION_START:
173         case JSP_EXPRESSION_START:
174         case JSP_SCRIPTLET_START:
175         case JSP_DIRECTIVE_START:
176           ;
177           break;
178         default:
179           jj_la1[5] = jj_gen;
180           break label_3;
181         }
182         ContentElementPossiblyWithText();
183       }
184     } catch (Throwable jjte000) {
185           if (jjtc000) {
186             jjtree.clearNodeScope(jjtn000);
187             jjtc000 = false;
188           } else {
189             jjtree.popNode();
190           }
191           if (jjte000 instanceof RuntimeException) {
192             {if (true) throw (RuntimeException)jjte000;}
193           }
194           if (jjte000 instanceof ParseException) {
195             {if (true) throw (ParseException)jjte000;}
196           }
197           {if (true) throw (Error)jjte000;}
198     } finally {
199           if (jjtc000) {
200             jjtree.closeNodeScope(jjtn000, true);
201           }
202     }
203   }
204 
205 /***
206  * A single (non-text) element that can occur between a start- and end-tag of an element.
207  * Possibly followed by text.
208  */
209   final public void ContentElementPossiblyWithText() throws ParseException {
210     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
211     case COMMENT_START:
212       CommentTag();
213       break;
214     case TAG_START:
215       Element();
216       break;
217     case CDATA_START:
218       CData();
219       break;
220     case JSP_COMMENT_START:
221       JspComment();
222       break;
223     case JSP_DECLARATION_START:
224       JspDeclaration();
225       break;
226     case JSP_EXPRESSION_START:
227       JspExpression();
228       break;
229     case JSP_SCRIPTLET_START:
230       JspScriptlet();
231       break;
232     case JSP_DIRECTIVE_START:
233       JspDirective();
234       break;
235     default:
236       jj_la1[6] = jj_gen;
237       jj_consume_token(-1);
238       throw new ParseException();
239     }
240     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
241     case EL_EXPRESSION:
242     case UNPARSED_TEXT:
243       Text();
244       break;
245     default:
246       jj_la1[7] = jj_gen;
247       ;
248     }
249   }
250 
251   final public void JspDirective() throws ParseException {
252  /*@bgen(jjtree) JspDirective */
253         ASTJspDirective jjtn000 = new ASTJspDirective(this, JJTJSPDIRECTIVE);
254         boolean jjtc000 = true;
255         jjtree.openNodeScope(jjtn000);Token t;
256     try {
257       jj_consume_token(JSP_DIRECTIVE_START);
258       t = jj_consume_token(JSP_DIRECTIVE_NAME);
259                                    jjtn000.setName(t.image);
260       label_4:
261       while (true) {
262         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
263         case JSP_DIRECTIVE_ATTRIBUTE_NAME:
264           ;
265           break;
266         default:
267           jj_la1[8] = jj_gen;
268           break label_4;
269         }
270         JspDirectiveAttribute();
271       }
272       jj_consume_token(JSP_DIRECTIVE_END);
273     } catch (Throwable jjte000) {
274           if (jjtc000) {
275             jjtree.clearNodeScope(jjtn000);
276             jjtc000 = false;
277           } else {
278             jjtree.popNode();
279           }
280           if (jjte000 instanceof RuntimeException) {
281             {if (true) throw (RuntimeException)jjte000;}
282           }
283           if (jjte000 instanceof ParseException) {
284             {if (true) throw (ParseException)jjte000;}
285           }
286           {if (true) throw (Error)jjte000;}
287     } finally {
288           if (jjtc000) {
289             jjtree.closeNodeScope(jjtn000, true);
290           }
291     }
292   }
293 
294   final public void JspDirectiveAttribute() throws ParseException {
295  /*@bgen(jjtree) JspDirectiveAttribute */
296         ASTJspDirectiveAttribute jjtn000 = new ASTJspDirectiveAttribute(this, JJTJSPDIRECTIVEATTRIBUTE);
297         boolean jjtc000 = true;
298         jjtree.openNodeScope(jjtn000);Token t;
299     try {
300       t = jj_consume_token(JSP_DIRECTIVE_ATTRIBUTE_NAME);
301                                              jjtn000.setName(t.image);
302       jj_consume_token(JSP_DIRECTIVE_ATTRIBUTE_EQUALS);
303       t = jj_consume_token(JSP_DIRECTIVE_ATTRIBUTE_VALUE);
304                                               jjtree.closeNodeScope(jjtn000, true);
305                                               jjtc000 = false;
306                                               jjtn000.setValue(quoteContent(t.image));
307     } finally {
308           if (jjtc000) {
309             jjtree.closeNodeScope(jjtn000, true);
310           }
311     }
312   }
313 
314   final public void JspScriptlet() throws ParseException {
315  /*@bgen(jjtree) JspScriptlet */
316         ASTJspScriptlet jjtn000 = new ASTJspScriptlet(this, JJTJSPSCRIPTLET);
317         boolean jjtc000 = true;
318         jjtree.openNodeScope(jjtn000);Token t;
319     try {
320       jj_consume_token(JSP_SCRIPTLET_START);
321       t = jj_consume_token(JSP_SCRIPTLET);
322                               jjtn000.setImage(t.image.trim());
323       jj_consume_token(JSP_SCRIPTLET_END);
324     } finally {
325           if (jjtc000) {
326             jjtree.closeNodeScope(jjtn000, true);
327           }
328     }
329   }
330 
331   final public void JspExpression() throws ParseException {
332  /*@bgen(jjtree) JspExpression */
333         ASTJspExpression jjtn000 = new ASTJspExpression(this, JJTJSPEXPRESSION);
334         boolean jjtc000 = true;
335         jjtree.openNodeScope(jjtn000);Token t;
336     try {
337       jj_consume_token(JSP_EXPRESSION_START);
338       t = jj_consume_token(JSP_EXPRESSION);
339                                jjtn000.setImage(t.image.trim());
340       jj_consume_token(JSP_EXPRESSION_END);
341     } finally {
342           if (jjtc000) {
343             jjtree.closeNodeScope(jjtn000, true);
344           }
345     }
346   }
347 
348   final public void JspDeclaration() throws ParseException {
349  /*@bgen(jjtree) JspDeclaration */
350         ASTJspDeclaration jjtn000 = new ASTJspDeclaration(this, JJTJSPDECLARATION);
351         boolean jjtc000 = true;
352         jjtree.openNodeScope(jjtn000);Token t;
353     try {
354       jj_consume_token(JSP_DECLARATION_START);
355       t = jj_consume_token(JSP_DECLARATION);
356                                 jjtn000.setImage(t.image.trim());
357       jj_consume_token(JSP_DECLARATION_END);
358     } finally {
359           if (jjtc000) {
360             jjtree.closeNodeScope(jjtn000, true);
361           }
362     }
363   }
364 
365   final public void JspComment() throws ParseException {
366  /*@bgen(jjtree) JspComment */
367         ASTJspComment jjtn000 = new ASTJspComment(this, JJTJSPCOMMENT);
368         boolean jjtc000 = true;
369         jjtree.openNodeScope(jjtn000);Token t;
370     try {
371       jj_consume_token(JSP_COMMENT_START);
372       t = jj_consume_token(JSP_COMMENT_CONTENT);
373                                     jjtn000.setImage(t.image.trim());
374       jj_consume_token(JSP_COMMENT_END);
375     } finally {
376           if (jjtc000) {
377             jjtree.closeNodeScope(jjtn000, true);
378           }
379     }
380   }
381 
382 /***
383  * This production groups all characters between two tags, where
384  * tag is an xml-tag "<...>" or a jsp-page-tag "<%...%>" or CDATA "<![CDATA[...]]>".
385  * Text consists of unparsed text and/or Expression Language expressions.
386  */
387   final public void Text() throws ParseException {
388  /*@bgen(jjtree) Text */
389         ASTText jjtn000 = new ASTText(this, JJTTEXT);
390         boolean jjtc000 = true;
391         jjtree.openNodeScope(jjtn000);StringBuffer content = new StringBuffer();
392         String tmp;
393     try {
394       label_5:
395       while (true) {
396         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
397         case UNPARSED_TEXT:
398           tmp = UnparsedText();
399                                        content.append(tmp);
400           break;
401         case EL_EXPRESSION:
402           tmp = ElExpression();
403                                        content.append(tmp);
404           break;
405         default:
406           jj_la1[9] = jj_gen;
407           jj_consume_token(-1);
408           throw new ParseException();
409         }
410         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
411         case EL_EXPRESSION:
412         case UNPARSED_TEXT:
413           ;
414           break;
415         default:
416           jj_la1[10] = jj_gen;
417           break label_5;
418         }
419       }
420           jjtree.closeNodeScope(jjtn000, true);
421           jjtc000 = false;
422           jjtn000.setImage(content.toString());
423     } catch (Throwable jjte000) {
424           if (jjtc000) {
425             jjtree.clearNodeScope(jjtn000);
426             jjtc000 = false;
427           } else {
428             jjtree.popNode();
429           }
430           if (jjte000 instanceof RuntimeException) {
431             {if (true) throw (RuntimeException)jjte000;}
432           }
433           if (jjte000 instanceof ParseException) {
434             {if (true) throw (ParseException)jjte000;}
435           }
436           {if (true) throw (Error)jjte000;}
437     } finally {
438           if (jjtc000) {
439             jjtree.closeNodeScope(jjtn000, true);
440           }
441     }
442   }
443 
444   final public String UnparsedText() throws ParseException {
445  /*@bgen(jjtree) UnparsedText */
446   ASTUnparsedText jjtn000 = new ASTUnparsedText(this, JJTUNPARSEDTEXT);
447   boolean jjtc000 = true;
448   jjtree.openNodeScope(jjtn000);Token t;
449     try {
450       t = jj_consume_token(UNPARSED_TEXT);
451           jjtree.closeNodeScope(jjtn000, true);
452           jjtc000 = false;
453                 jjtn000.setImage(t.image);
454                 {if (true) return t.image;}
455     } finally {
456           if (jjtc000) {
457             jjtree.closeNodeScope(jjtn000, true);
458           }
459     }
460     throw new RuntimeException("Missing return statement in function");
461   }
462 
463 /***
464  * Text that contains no single quotes, and that does not contain the start
465  * of a EL expression or value binding.
466  */
467   final public String UnparsedTextNoSingleQuotes() throws ParseException {
468  /*@bgen(jjtree) UnparsedText */
469   ASTUnparsedText jjtn000 = new ASTUnparsedText(this, JJTUNPARSEDTEXT);
470   boolean jjtc000 = true;
471   jjtree.openNodeScope(jjtn000);Token t;
472     try {
473       t = jj_consume_token(UNPARSED_TEXT_NO_SINGLE_QUOTES);
474           jjtree.closeNodeScope(jjtn000, true);
475           jjtc000 = false;
476                 jjtn000.setImage(t.image);
477                 {if (true) return t.image;}
478     } finally {
479           if (jjtc000) {
480             jjtree.closeNodeScope(jjtn000, true);
481           }
482     }
483     throw new RuntimeException("Missing return statement in function");
484   }
485 
486 /***
487  * Text that contains no double quotes, and that does not contain the start
488  * of a EL expression or value binding.
489  */
490   final public String UnparsedTextNoDoubleQuotes() throws ParseException {
491  /*@bgen(jjtree) UnparsedText */
492   ASTUnparsedText jjtn000 = new ASTUnparsedText(this, JJTUNPARSEDTEXT);
493   boolean jjtc000 = true;
494   jjtree.openNodeScope(jjtn000);Token t;
495     try {
496       t = jj_consume_token(UNPARSED_TEXT_NO_DOUBLE_QUOTES);
497           jjtree.closeNodeScope(jjtn000, true);
498           jjtc000 = false;
499                 jjtn000.setImage(t.image);
500                 {if (true) return t.image;}
501     } finally {
502           if (jjtc000) {
503             jjtree.closeNodeScope(jjtn000, true);
504           }
505     }
506     throw new RuntimeException("Missing return statement in function");
507   }
508 
509 /***
510  * An EL expression, not within an attribute value.
511  */
512   final public String ElExpression() throws ParseException {
513  /*@bgen(jjtree) ElExpression */
514         ASTElExpression jjtn000 = new ASTElExpression(this, JJTELEXPRESSION);
515         boolean jjtc000 = true;
516         jjtree.openNodeScope(jjtn000);Token t;
517     try {
518       t = jj_consume_token(EL_EXPRESSION);
519           jjtree.closeNodeScope(jjtn000, true);
520           jjtc000 = false;
521                 jjtn000.setImage(expressionContent(t.image));
522                 {if (true) return t.image;}
523     } finally {
524           if (jjtc000) {
525             jjtree.closeNodeScope(jjtn000, true);
526           }
527     }
528     throw new RuntimeException("Missing return statement in function");
529   }
530 
531   final public String ValueBindingInAttribute() throws ParseException {
532  /*@bgen(jjtree) ValueBinding */
533         ASTValueBinding jjtn000 = new ASTValueBinding(this, JJTVALUEBINDING);
534         boolean jjtc000 = true;
535         jjtree.openNodeScope(jjtn000);Token t;
536     try {
537       t = jj_consume_token(VALUE_BINDING_IN_ATTRIBUTE);
538           jjtree.closeNodeScope(jjtn000, true);
539           jjtc000 = false;
540                 jjtn000.setImage(expressionContent(t.image));
541                 {if (true) return t.image;}
542     } finally {
543           if (jjtc000) {
544             jjtree.closeNodeScope(jjtn000, true);
545           }
546     }
547     throw new RuntimeException("Missing return statement in function");
548   }
549 
550   final public String ElExpressionInAttribute() throws ParseException {
551  /*@bgen(jjtree) ElExpression */
552         ASTElExpression jjtn000 = new ASTElExpression(this, JJTELEXPRESSION);
553         boolean jjtc000 = true;
554         jjtree.openNodeScope(jjtn000);Token t;
555     try {
556       t = jj_consume_token(EL_EXPRESSION_IN_ATTRIBUTE);
557           jjtree.closeNodeScope(jjtn000, true);
558           jjtc000 = false;
559                 jjtn000.setImage(expressionContent(t.image));
560                 {if (true) return t.image;}
561     } finally {
562           if (jjtc000) {
563             jjtree.closeNodeScope(jjtn000, true);
564           }
565     }
566     throw new RuntimeException("Missing return statement in function");
567   }
568 
569   final public void CData() throws ParseException {
570  /*@bgen(jjtree) CData */
571         ASTCData jjtn000 = new ASTCData(this, JJTCDATA);
572         boolean jjtc000 = true;
573         jjtree.openNodeScope(jjtn000);StringBuffer content = new StringBuffer();
574         Token t;
575     try {
576       jj_consume_token(CDATA_START);
577       label_6:
578       while (true) {
579         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
580         case UNPARSED:
581           ;
582           break;
583         default:
584           jj_la1[11] = jj_gen;
585           break label_6;
586         }
587         t = jj_consume_token(UNPARSED);
588                                           content.append(t.image);
589       }
590       jj_consume_token(CDATA_END);
591           jjtree.closeNodeScope(jjtn000, true);
592           jjtc000 = false;
593                 jjtn000.setImage(content.toString());
594     } finally {
595           if (jjtc000) {
596             jjtree.closeNodeScope(jjtn000, true);
597           }
598     }
599   }
600 
601 /***
602  * A XML element, either with a single empty tag, or with a starting and closing tag
603  * with optional contained content.
604  */
605   final public void Element() throws ParseException {
606  /*@bgen(jjtree) Element */
607         ASTElement jjtn000 = new ASTElement(this, JJTELEMENT);
608         boolean jjtc000 = true;
609         jjtree.openNodeScope(jjtn000);Token startTagName;
610         Token endTagName;
611         String tagName;
612     try {
613       jj_consume_token(TAG_START);
614       startTagName = jj_consume_token(TAG_NAME);
615                                 tagName = startTagName.image; jjtn000.setName(tagName);
616       label_7:
617       while (true) {
618         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
619         case ATTR_NAME:
620           ;
621           break;
622         default:
623           jj_la1[12] = jj_gen;
624           break label_7;
625         }
626         Attribute();
627       }
628       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
629       case TAG_END:
630         jj_consume_token(TAG_END);
631                   jjtn000.setEmpty(false);
632         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
633         case TAG_START:
634         case COMMENT_START:
635         case CDATA_START:
636         case JSP_COMMENT_START:
637         case JSP_DECLARATION_START:
638         case JSP_EXPRESSION_START:
639         case JSP_SCRIPTLET_START:
640         case JSP_DIRECTIVE_START:
641         case EL_EXPRESSION:
642         case UNPARSED_TEXT:
643           Content();
644           break;
645         default:
646           jj_la1[13] = jj_gen;
647           ;
648         }
649         jj_consume_token(ENDTAG_START);
650         endTagName = jj_consume_token(TAG_NAME);
651                         if (! tagName.equalsIgnoreCase(endTagName.image)) {
652                                 {if (true) throw new StartAndEndTagMismatchException(
653                                         startTagName.beginLine, startTagName.beginColumn,
654                                         startTagName.image,
655                                         endTagName.beginLine, endTagName.beginColumn,
656                                         endTagName.image  );}
657                         }
658         jj_consume_token(TAG_END);
659         break;
660       case TAG_SLASHEND:
661         jj_consume_token(TAG_SLASHEND);
662                           jjtree.closeNodeScope(jjtn000, true);
663                           jjtc000 = false;
664                           jjtn000.setEmpty(true);
665         break;
666       default:
667         jj_la1[14] = jj_gen;
668         jj_consume_token(-1);
669         throw new ParseException();
670       }
671     } catch (Throwable jjte000) {
672       if (jjtc000) {
673         jjtree.clearNodeScope(jjtn000);
674         jjtc000 = false;
675       } else {
676         jjtree.popNode();
677       }
678       if (jjte000 instanceof RuntimeException) {
679         {if (true) throw (RuntimeException)jjte000;}
680       }
681       if (jjte000 instanceof ParseException) {
682         {if (true) throw (ParseException)jjte000;}
683       }
684       {if (true) throw (Error)jjte000;}
685     } finally {
686       if (jjtc000) {
687         jjtree.closeNodeScope(jjtn000, true);
688       }
689     }
690   }
691 
692   final public void Attribute() throws ParseException {
693  /*@bgen(jjtree) Attribute */
694         ASTAttribute jjtn000 = new ASTAttribute(this, JJTATTRIBUTE);
695         boolean jjtc000 = true;
696         jjtree.openNodeScope(jjtn000);Token t;
697     try {
698       t = jj_consume_token(ATTR_NAME);
699                     jjtn000.setName(t.image);
700       jj_consume_token(ATTR_EQ);
701       AttributeValue();
702     } catch (Throwable jjte000) {
703     if (jjtc000) {
704       jjtree.clearNodeScope(jjtn000);
705       jjtc000 = false;
706     } else {
707       jjtree.popNode();
708     }
709     if (jjte000 instanceof RuntimeException) {
710       {if (true) throw (RuntimeException)jjte000;}
711     }
712     if (jjte000 instanceof ParseException) {
713       {if (true) throw (ParseException)jjte000;}
714     }
715     {if (true) throw (Error)jjte000;}
716     } finally {
717     if (jjtc000) {
718       jjtree.closeNodeScope(jjtn000, true);
719     }
720     }
721   }
722 
723 /***
724  * The value of an attribute of an element.
725  * EL expressions, JSF value bindings, and JSP expressions
726  * are parsed as sub-nodes of the AttributeValue node.
727  */
728   final public void AttributeValue() throws ParseException {
729  /*@bgen(jjtree) AttributeValue */
730         ASTAttributeValue jjtn000 = new ASTAttributeValue(this, JJTATTRIBUTEVALUE);
731         boolean jjtc000 = true;
732         jjtree.openNodeScope(jjtn000);StringBuffer content = new StringBuffer();
733         String tmp;
734         Token t;
735     try {
736       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
737       case DOUBLE_QUOTE:
738         jj_consume_token(DOUBLE_QUOTE);
739         label_8:
740         while (true) {
741           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
742           case EL_EXPRESSION_IN_ATTRIBUTE:
743           case VALUE_BINDING_IN_ATTRIBUTE:
744           case JSP_EXPRESSION_IN_ATTRIBUTE:
745           case UNPARSED_TEXT_NO_DOUBLE_QUOTES:
746             ;
747             break;
748           default:
749             jj_la1[15] = jj_gen;
750             break label_8;
751           }
752           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
753           case UNPARSED_TEXT_NO_DOUBLE_QUOTES:
754             tmp = UnparsedTextNoDoubleQuotes();
755             break;
756           case EL_EXPRESSION_IN_ATTRIBUTE:
757           case VALUE_BINDING_IN_ATTRIBUTE:
758           case JSP_EXPRESSION_IN_ATTRIBUTE:
759             tmp = QuoteIndependentAttributeValueContent();
760             break;
761           default:
762             jj_la1[16] = jj_gen;
763             jj_consume_token(-1);
764             throw new ParseException();
765           }
766                             content.append(tmp);
767         }
768         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
769         case ENDING_DOUBLE_QUOTE:
770           jj_consume_token(ENDING_DOUBLE_QUOTE);
771           break;
772         case DOLLAR_OR_HASH_DOUBLE_QUOTE:
773           t = jj_consume_token(DOLLAR_OR_HASH_DOUBLE_QUOTE);
774                                                                     content.append(t.image.substring(0, 1));
775           break;
776         default:
777           jj_la1[17] = jj_gen;
778           jj_consume_token(-1);
779           throw new ParseException();
780         }
781         break;
782       case SINGLE_QUOTE:
783         jj_consume_token(SINGLE_QUOTE);
784         label_9:
785         while (true) {
786           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
787           case EL_EXPRESSION_IN_ATTRIBUTE:
788           case VALUE_BINDING_IN_ATTRIBUTE:
789           case JSP_EXPRESSION_IN_ATTRIBUTE:
790           case UNPARSED_TEXT_NO_SINGLE_QUOTES:
791             ;
792             break;
793           default:
794             jj_la1[18] = jj_gen;
795             break label_9;
796           }
797           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
798           case UNPARSED_TEXT_NO_SINGLE_QUOTES:
799             tmp = UnparsedTextNoSingleQuotes();
800             break;
801           case EL_EXPRESSION_IN_ATTRIBUTE:
802           case VALUE_BINDING_IN_ATTRIBUTE:
803           case JSP_EXPRESSION_IN_ATTRIBUTE:
804             tmp = QuoteIndependentAttributeValueContent();
805             break;
806           default:
807             jj_la1[19] = jj_gen;
808             jj_consume_token(-1);
809             throw new ParseException();
810           }
811                             content.append(tmp);
812         }
813         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
814         case ENDING_SINGLE_QUOTE:
815           jj_consume_token(ENDING_SINGLE_QUOTE);
816           break;
817         case DOLLAR_OR_HASH_SINGLE_QUOTE:
818           t = jj_consume_token(DOLLAR_OR_HASH_SINGLE_QUOTE);
819                                                                  content.append(t.image.substring(0, 1));
820           break;
821         default:
822           jj_la1[20] = jj_gen;
823           jj_consume_token(-1);
824           throw new ParseException();
825         }
826         break;
827       default:
828         jj_la1[21] = jj_gen;
829         jj_consume_token(-1);
830         throw new ParseException();
831       }
832           jjtree.closeNodeScope(jjtn000, true);
833           jjtc000 = false;
834           jjtn000.setImage( content.toString() );
835     } catch (Throwable jjte000) {
836           if (jjtc000) {
837             jjtree.clearNodeScope(jjtn000);
838             jjtc000 = false;
839           } else {
840             jjtree.popNode();
841           }
842           if (jjte000 instanceof RuntimeException) {
843             {if (true) throw (RuntimeException)jjte000;}
844           }
845           if (jjte000 instanceof ParseException) {
846             {if (true) throw (ParseException)jjte000;}
847           }
848           {if (true) throw (Error)jjte000;}
849     } finally {
850           if (jjtc000) {
851             jjtree.closeNodeScope(jjtn000, true);
852           }
853     }
854   }
855 
856 /***
857  * Partial content of an attribute value that can contain all quotes.
858  * This groups EL expressions, value bindings, and JSP expressions.
859  */
860   final public String QuoteIndependentAttributeValueContent() throws ParseException {
861         String tmp;
862     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
863     case EL_EXPRESSION_IN_ATTRIBUTE:
864       tmp = ElExpressionInAttribute();
865       break;
866     case VALUE_BINDING_IN_ATTRIBUTE:
867       tmp = ValueBindingInAttribute();
868       break;
869     case JSP_EXPRESSION_IN_ATTRIBUTE:
870       tmp = JspExpressionInAttribute();
871       break;
872     default:
873       jj_la1[22] = jj_gen;
874       jj_consume_token(-1);
875       throw new ParseException();
876     }
877           {if (true) return tmp;}
878     throw new RuntimeException("Missing return statement in function");
879   }
880 
881   final public String JspExpressionInAttribute() throws ParseException {
882  /*@bgen(jjtree) JspExpressionInAttribute */
883         ASTJspExpressionInAttribute jjtn000 = new ASTJspExpressionInAttribute(this, JJTJSPEXPRESSIONINATTRIBUTE);
884         boolean jjtc000 = true;
885         jjtree.openNodeScope(jjtn000);Token t;
886     try {
887       t = jj_consume_token(JSP_EXPRESSION_IN_ATTRIBUTE);
888           jjtree.closeNodeScope(jjtn000, true);
889           jjtc000 = false;
890                 jjtn000.setImage(t.image.substring(3, t.image.length()-2).trim()); // without <% and %>
891                 {if (true) return t.image;}
892     } finally {
893           if (jjtc000) {
894             jjtree.closeNodeScope(jjtn000, true);
895           }
896     }
897     throw new RuntimeException("Missing return statement in function");
898   }
899 
900   final public void CommentTag() throws ParseException {
901  /*@bgen(jjtree) CommentTag */
902         ASTCommentTag jjtn000 = new ASTCommentTag(this, JJTCOMMENTTAG);
903         boolean jjtc000 = true;
904         jjtree.openNodeScope(jjtn000);StringBuffer content = new StringBuffer();
905         Token t;
906     try {
907       jj_consume_token(COMMENT_START);
908       label_10:
909       while (true) {
910         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
911         case COMMENT_TEXT:
912           ;
913           break;
914         default:
915           jj_la1[23] = jj_gen;
916           break label_10;
917         }
918         t = jj_consume_token(COMMENT_TEXT);
919                          content.append(t.image);
920       }
921       jj_consume_token(COMMENT_END);
922           jjtree.closeNodeScope(jjtn000, true);
923           jjtc000 = false;
924                 jjtn000.setImage(content.toString().trim());
925     } finally {
926     if (jjtc000) {
927       jjtree.closeNodeScope(jjtn000, true);
928     }
929     }
930   }
931 
932   final public void Declaration() throws ParseException {
933  /*@bgen(jjtree) Declaration */
934         ASTDeclaration jjtn000 = new ASTDeclaration(this, JJTDECLARATION);
935         boolean jjtc000 = true;
936         jjtree.openNodeScope(jjtn000);Token t;
937     try {
938       jj_consume_token(DECL_START);
939       t = jj_consume_token(TAG_NAME);
940                    jjtn000.setName(t.image);
941       label_11:
942       while (true) {
943         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
944         case ATTR_NAME:
945           ;
946           break;
947         default:
948           jj_la1[24] = jj_gen;
949           break label_11;
950         }
951         Attribute();
952       }
953       jj_consume_token(DECL_END);
954     } catch (Throwable jjte000) {
955     if (jjtc000) {
956       jjtree.clearNodeScope(jjtn000);
957       jjtc000 = false;
958     } else {
959       jjtree.popNode();
960     }
961     if (jjte000 instanceof RuntimeException) {
962       {if (true) throw (RuntimeException)jjte000;}
963     }
964     if (jjte000 instanceof ParseException) {
965       {if (true) throw (ParseException)jjte000;}
966     }
967     {if (true) throw (Error)jjte000;}
968     } finally {
969     if (jjtc000) {
970       jjtree.closeNodeScope(jjtn000, true);
971     }
972     }
973   }
974 
975   final public void DoctypeDeclaration() throws ParseException {
976  /*@bgen(jjtree) DoctypeDeclaration */
977         ASTDoctypeDeclaration jjtn000 = new ASTDoctypeDeclaration(this, JJTDOCTYPEDECLARATION);
978         boolean jjtc000 = true;
979         jjtree.openNodeScope(jjtn000);Token t;
980     try {
981       jj_consume_token(DOCTYPE_DECL_START);
982       jj_consume_token(WHITESPACES);
983       t = jj_consume_token(NAME);
984                       jjtn000.setName(t.image);
985       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
986       case WHITESPACES:
987         jj_consume_token(WHITESPACES);
988         break;
989       default:
990         jj_la1[25] = jj_gen;
991         ;
992       }
993       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
994       case PUBLIC:
995       case SYSTEM:
996         DoctypeExternalId();
997         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
998         case WHITESPACES:
999           jj_consume_token(WHITESPACES);
1000           break;
1001         default:
1002           jj_la1[26] = jj_gen;
1003           ;
1004         }
1005         break;
1006       default:
1007         jj_la1[27] = jj_gen;
1008         ;
1009       }
1010       jj_consume_token(DOCTYPE_DECL_END);
1011     } catch (Throwable jjte000) {
1012           if (jjtc000) {
1013             jjtree.clearNodeScope(jjtn000);
1014             jjtc000 = false;
1015           } else {
1016             jjtree.popNode();
1017           }
1018           if (jjte000 instanceof RuntimeException) {
1019             {if (true) throw (RuntimeException)jjte000;}
1020           }
1021           if (jjte000 instanceof ParseException) {
1022             {if (true) throw (ParseException)jjte000;}
1023           }
1024           {if (true) throw (Error)jjte000;}
1025     } finally {
1026           if (jjtc000) {
1027             jjtree.closeNodeScope(jjtn000, true);
1028           }
1029     }
1030   }
1031 
1032   final public void DoctypeExternalId() throws ParseException {
1033  /*@bgen(jjtree) DoctypeExternalId */
1034         ASTDoctypeExternalId jjtn000 = new ASTDoctypeExternalId(this, JJTDOCTYPEEXTERNALID);
1035         boolean jjtc000 = true;
1036         jjtree.openNodeScope(jjtn000);Token systemLiteral;
1037         Token pubIdLiteral;
1038     try {
1039       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1040       case SYSTEM:
1041         jj_consume_token(SYSTEM);
1042         jj_consume_token(WHITESPACES);
1043         systemLiteral = jj_consume_token(QUOTED_LITERAL);
1044                                   jjtree.closeNodeScope(jjtn000, true);
1045                                   jjtc000 = false;
1046                                   jjtn000.setUri(quoteContent(systemLiteral.image));
1047         break;
1048       case PUBLIC:
1049         jj_consume_token(PUBLIC);
1050         jj_consume_token(WHITESPACES);
1051         pubIdLiteral = jj_consume_token(QUOTED_LITERAL);
1052                                   jjtn000.setPublicId(quoteContent(pubIdLiteral.image));
1053         jj_consume_token(WHITESPACES);
1054         systemLiteral = jj_consume_token(QUOTED_LITERAL);
1055                                   jjtree.closeNodeScope(jjtn000, true);
1056                                   jjtc000 = false;
1057                                   jjtn000.setUri(quoteContent(systemLiteral.image));
1058         break;
1059       default:
1060         jj_la1[28] = jj_gen;
1061         jj_consume_token(-1);
1062         throw new ParseException();
1063       }
1064     } finally {
1065                   if (jjtc000) {
1066                     jjtree.closeNodeScope(jjtn000, true);
1067                   }
1068     }
1069   }
1070 
1071   final private boolean jj_2_1(int xla) {
1072     jj_la = xla; jj_lastpos = jj_scanpos = token;
1073     try { return !jj_3_1(); }
1074     catch(LookaheadSuccess ls) { return true; }
1075     finally { jj_save(0, xla); }
1076   }
1077 
1078   final private boolean jj_2_2(int xla) {
1079     jj_la = xla; jj_lastpos = jj_scanpos = token;
1080     try { return !jj_3_2(); }
1081     catch(LookaheadSuccess ls) { return true; }
1082     finally { jj_save(1, xla); }
1083   }
1084 
1085   final private boolean jj_3R_31() {
1086     if (jj_scan_token(SINGLE_QUOTE)) return true;
1087     Token xsp;
1088     while (true) {
1089       xsp = jj_scanpos;
1090       if (jj_3R_34()) { jj_scanpos = xsp; break; }
1091     }
1092     xsp = jj_scanpos;
1093     if (jj_scan_token(69)) {
1094     jj_scanpos = xsp;
1095     if (jj_3R_35()) return true;
1096     }
1097     return false;
1098   }
1099 
1100   final private boolean jj_3R_46() {
1101     if (jj_scan_token(EL_EXPRESSION_IN_ATTRIBUTE)) return true;
1102     return false;
1103   }
1104 
1105   final private boolean jj_3R_30() {
1106     if (jj_scan_token(DOUBLE_QUOTE)) return true;
1107     Token xsp;
1108     while (true) {
1109       xsp = jj_scanpos;
1110       if (jj_3R_32()) { jj_scanpos = xsp; break; }
1111     }
1112     xsp = jj_scanpos;
1113     if (jj_scan_token(72)) {
1114     jj_scanpos = xsp;
1115     if (jj_3R_33()) return true;
1116     }
1117     return false;
1118   }
1119 
1120   final private boolean jj_3R_29() {
1121     if (jj_scan_token(PUBLIC)) return true;
1122     if (jj_scan_token(WHITESPACES)) return true;
1123     if (jj_scan_token(QUOTED_LITERAL)) return true;
1124     if (jj_scan_token(WHITESPACES)) return true;
1125     if (jj_scan_token(QUOTED_LITERAL)) return true;
1126     return false;
1127   }
1128 
1129   final private boolean jj_3R_47() {
1130     if (jj_scan_token(VALUE_BINDING_IN_ATTRIBUTE)) return true;
1131     return false;
1132   }
1133 
1134   final private boolean jj_3R_27() {
1135     Token xsp;
1136     xsp = jj_scanpos;
1137     if (jj_3R_30()) {
1138     jj_scanpos = xsp;
1139     if (jj_3R_31()) return true;
1140     }
1141     return false;
1142   }
1143 
1144   final private boolean jj_3R_25() {
1145     Token xsp;
1146     xsp = jj_scanpos;
1147     if (jj_3R_28()) {
1148     jj_scanpos = xsp;
1149     if (jj_3R_29()) return true;
1150     }
1151     return false;
1152   }
1153 
1154   final private boolean jj_3R_28() {
1155     if (jj_scan_token(SYSTEM)) return true;
1156     if (jj_scan_token(WHITESPACES)) return true;
1157     if (jj_scan_token(QUOTED_LITERAL)) return true;
1158     return false;
1159   }
1160 
1161   final private boolean jj_3R_21() {
1162     if (jj_3R_25()) return true;
1163     Token xsp;
1164     xsp = jj_scanpos;
1165     if (jj_scan_token(48)) jj_scanpos = xsp;
1166     return false;
1167   }
1168 
1169   final private boolean jj_3R_40() {
1170     if (jj_scan_token(UNPARSED_TEXT_NO_DOUBLE_QUOTES)) return true;
1171     return false;
1172   }
1173 
1174   final private boolean jj_3R_15() {
1175     if (jj_scan_token(DOCTYPE_DECL_START)) return true;
1176     if (jj_scan_token(WHITESPACES)) return true;
1177     if (jj_scan_token(NAME)) return true;
1178     Token xsp;
1179     xsp = jj_scanpos;
1180     if (jj_scan_token(48)) jj_scanpos = xsp;
1181     xsp = jj_scanpos;
1182     if (jj_3R_21()) jj_scanpos = xsp;
1183     if (jj_scan_token(DOCTYPE_DECL_END)) return true;
1184     return false;
1185   }
1186 
1187   final private boolean jj_3R_24() {
1188     if (jj_scan_token(ATTR_NAME)) return true;
1189     if (jj_scan_token(ATTR_EQ)) return true;
1190     if (jj_3R_27()) return true;
1191     return false;
1192   }
1193 
1194   final private boolean jj_3R_20() {
1195     if (jj_3R_23()) return true;
1196     return false;
1197   }
1198 
1199   final private boolean jj_3R_42() {
1200     if (jj_scan_token(UNPARSED_TEXT_NO_SINGLE_QUOTES)) return true;
1201     return false;
1202   }
1203 
1204   final private boolean jj_3R_18() {
1205     if (jj_3R_24()) return true;
1206     return false;
1207   }
1208 
1209   final private boolean jj_3R_13() {
1210     if (jj_scan_token(DECL_START)) return true;
1211     if (jj_scan_token(TAG_NAME)) return true;
1212     Token xsp;
1213     while (true) {
1214       xsp = jj_scanpos;
1215       if (jj_3R_18()) { jj_scanpos = xsp; break; }
1216     }
1217     if (jj_scan_token(DECL_END)) return true;
1218     return false;
1219   }
1220 
1221   final private boolean jj_3R_17() {
1222     if (jj_3R_23()) return true;
1223     return false;
1224   }
1225 
1226   final private boolean jj_3R_26() {
1227     if (jj_scan_token(COMMENT_TEXT)) return true;
1228     return false;
1229   }
1230 
1231   final private boolean jj_3R_19() {
1232     if (jj_3R_22()) return true;
1233     return false;
1234   }
1235 
1236   final private boolean jj_3R_14() {
1237     Token xsp;
1238     xsp = jj_scanpos;
1239     if (jj_3R_19()) {
1240     jj_scanpos = xsp;
1241     if (jj_3R_20()) return true;
1242     }
1243     return false;
1244   }
1245 
1246   final private boolean jj_3R_22() {
1247     if (jj_scan_token(COMMENT_START)) return true;
1248     Token xsp;
1249     while (true) {
1250       xsp = jj_scanpos;
1251       if (jj_3R_26()) { jj_scanpos = xsp; break; }
1252     }
1253     if (jj_scan_token(COMMENT_END)) return true;
1254     return false;
1255   }
1256 
1257   final private boolean jj_3_2() {
1258     Token xsp;
1259     while (true) {
1260       xsp = jj_scanpos;
1261       if (jj_3R_14()) { jj_scanpos = xsp; break; }
1262     }
1263     if (jj_3R_15()) return true;
1264     return false;
1265   }
1266 
1267   final private boolean jj_3R_12() {
1268     Token xsp;
1269     xsp = jj_scanpos;
1270     if (jj_3R_16()) {
1271     jj_scanpos = xsp;
1272     if (jj_3R_17()) return true;
1273     }
1274     return false;
1275   }
1276 
1277   final private boolean jj_3R_16() {
1278     if (jj_3R_22()) return true;
1279     return false;
1280   }
1281 
1282   final private boolean jj_3R_48() {
1283     if (jj_scan_token(JSP_EXPRESSION_IN_ATTRIBUTE)) return true;
1284     return false;
1285   }
1286 
1287   final private boolean jj_3R_45() {
1288     if (jj_3R_48()) return true;
1289     return false;
1290   }
1291 
1292   final private boolean jj_3_1() {
1293     Token xsp;
1294     while (true) {
1295       xsp = jj_scanpos;
1296       if (jj_3R_12()) { jj_scanpos = xsp; break; }
1297     }
1298     if (jj_3R_13()) return true;
1299     return false;
1300   }
1301 
1302   final private boolean jj_3R_44() {
1303     if (jj_3R_47()) return true;
1304     return false;
1305   }
1306 
1307   final private boolean jj_3R_43() {
1308     if (jj_3R_46()) return true;
1309     return false;
1310   }
1311 
1312   final private boolean jj_3R_39() {
1313     if (jj_3R_41()) return true;
1314     return false;
1315   }
1316 
1317   final private boolean jj_3R_35() {
1318     if (jj_scan_token(DOLLAR_OR_HASH_SINGLE_QUOTE)) return true;
1319     return false;
1320   }
1321 
1322   final private boolean jj_3R_38() {
1323     if (jj_3R_42()) return true;
1324     return false;
1325   }
1326 
1327   final private boolean jj_3R_33() {
1328     if (jj_scan_token(DOLLAR_OR_HASH_DOUBLE_QUOTE)) return true;
1329     return false;
1330   }
1331 
1332   final private boolean jj_3R_41() {
1333     Token xsp;
1334     xsp = jj_scanpos;
1335     if (jj_3R_43()) {
1336     jj_scanpos = xsp;
1337     if (jj_3R_44()) {
1338     jj_scanpos = xsp;
1339     if (jj_3R_45()) return true;
1340     }
1341     }
1342     return false;
1343   }
1344 
1345   final private boolean jj_3R_34() {
1346     Token xsp;
1347     xsp = jj_scanpos;
1348     if (jj_3R_38()) {
1349     jj_scanpos = xsp;
1350     if (jj_3R_39()) return true;
1351     }
1352     return false;
1353   }
1354 
1355   final private boolean jj_3R_37() {
1356     if (jj_3R_41()) return true;
1357     return false;
1358   }
1359 
1360   final private boolean jj_3R_36() {
1361     if (jj_3R_40()) return true;
1362     return false;
1363   }
1364 
1365   final private boolean jj_3R_23() {
1366     if (jj_scan_token(JSP_COMMENT_START)) return true;
1367     if (jj_scan_token(JSP_COMMENT_CONTENT)) return true;
1368     if (jj_scan_token(JSP_COMMENT_END)) return true;
1369     return false;
1370   }
1371 
1372   final private boolean jj_3R_32() {
1373     Token xsp;
1374     xsp = jj_scanpos;
1375     if (jj_3R_36()) {
1376     jj_scanpos = xsp;
1377     if (jj_3R_37()) return true;
1378     }
1379     return false;
1380   }
1381 
1382   public JspParserTokenManager token_source;
1383   public Token token, jj_nt;
1384   private int jj_ntk;
1385   private Token jj_scanpos, jj_lastpos;
1386   private int jj_la;
1387   public boolean lookingAhead = false;
1388   private boolean jj_semLA;
1389   private int jj_gen;
1390   final private int[] jj_la1 = new int[29];
1391   static private int[] jj_la1_0;
1392   static private int[] jj_la1_1;
1393   static private int[] jj_la1_2;
1394   static {
1395       jj_la1_0();
1396       jj_la1_1();
1397       jj_la1_2();
1398    }
1399    private static void jj_la1_0() {
1400       jj_la1_0 = new int[] {0x11000000,0x11000000,0x11000000,0x11000000,0xf9400000,0xf9400000,0xf9400000,0x0,0x0,0x0,0x0,0x0,0x0,0xf9400000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
1401    }
1402    private static void jj_la1_1() {
1403       jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x7,0x1,0x1,0x6,0x10,0x6,0x6,0x400000,0x4000000,0x7,0x28000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x10000,0x10000,0xc0000,0xc0000,};
1404    }
1405    private static void jj_la1_2() {
1406       jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x21c,0x21c,0x500,0x5c,0x5c,0xa0,0x3,0x1c,0x1000,0x0,0x0,0x0,0x0,0x0,};
1407    }
1408   final private JJCalls[] jj_2_rtns = new JJCalls[2];
1409   private boolean jj_rescan = false;
1410   private int jj_gc = 0;
1411 
1412   public JspParser(CharStream stream) {
1413     token_source = new JspParserTokenManager(stream);
1414     token = new Token();
1415     jj_ntk = -1;
1416     jj_gen = 0;
1417     for (int i = 0; i < 29; i++) jj_la1[i] = -1;
1418     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
1419   }
1420 
1421   public void ReInit(CharStream stream) {
1422     token_source.ReInit(stream);
1423     token = new Token();
1424     jj_ntk = -1;
1425     jjtree.reset();
1426     jj_gen = 0;
1427     for (int i = 0; i < 29; i++) jj_la1[i] = -1;
1428     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
1429   }
1430 
1431   public JspParser(JspParserTokenManager tm) {
1432     token_source = tm;
1433     token = new Token();
1434     jj_ntk = -1;
1435     jj_gen = 0;
1436     for (int i = 0; i < 29; i++) jj_la1[i] = -1;
1437     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
1438   }
1439 
1440   public void ReInit(JspParserTokenManager tm) {
1441     token_source = tm;
1442     token = new Token();
1443     jj_ntk = -1;
1444     jjtree.reset();
1445     jj_gen = 0;
1446     for (int i = 0; i < 29; i++) jj_la1[i] = -1;
1447     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
1448   }
1449 
1450   final private Token jj_consume_token(int kind) throws ParseException {
1451     Token oldToken;
1452     if ((oldToken = token).next != null) token = token.next;
1453     else token = token.next = token_source.getNextToken();
1454     jj_ntk = -1;
1455     if (token.kind == kind) {
1456       jj_gen++;
1457       if (++jj_gc > 100) {
1458         jj_gc = 0;
1459         for (int i = 0; i < jj_2_rtns.length; i++) {
1460           JJCalls c = jj_2_rtns[i];
1461           while (c != null) {
1462             if (c.gen < jj_gen) c.first = null;
1463             c = c.next;
1464           }
1465         }
1466       }
1467       return token;
1468     }
1469     token = oldToken;
1470     jj_kind = kind;
1471     throw generateParseException();
1472   }
1473 
1474   static private final class LookaheadSuccess extends java.lang.Error { }
1475   final private LookaheadSuccess jj_ls = new LookaheadSuccess();
1476   final private boolean jj_scan_token(int kind) {
1477     if (jj_scanpos == jj_lastpos) {
1478       jj_la--;
1479       if (jj_scanpos.next == null) {
1480         jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
1481       } else {
1482         jj_lastpos = jj_scanpos = jj_scanpos.next;
1483       }
1484     } else {
1485       jj_scanpos = jj_scanpos.next;
1486     }
1487     if (jj_rescan) {
1488       int i = 0; Token tok = token;
1489       while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
1490       if (tok != null) jj_add_error_token(kind, i);
1491     }
1492     if (jj_scanpos.kind != kind) return true;
1493     if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
1494     return false;
1495   }
1496 
1497   final public Token getNextToken() {
1498     if (token.next != null) token = token.next;
1499     else token = token.next = token_source.getNextToken();
1500     jj_ntk = -1;
1501     jj_gen++;
1502     return token;
1503   }
1504 
1505   final public Token getToken(int index) {
1506     Token t = lookingAhead ? jj_scanpos : token;
1507     for (int i = 0; i < index; i++) {
1508       if (t.next != null) t = t.next;
1509       else t = t.next = token_source.getNextToken();
1510     }
1511     return t;
1512   }
1513 
1514   final private int jj_ntk() {
1515     if ((jj_nt=token.next) == null)
1516       return (jj_ntk = (token.next=token_source.getNextToken()).kind);
1517     else
1518       return (jj_ntk = jj_nt.kind);
1519   }
1520 
1521   private java.util.Vector jj_expentries = new java.util.Vector();
1522   private int[] jj_expentry;
1523   private int jj_kind = -1;
1524   private int[] jj_lasttokens = new int[100];
1525   private int jj_endpos;
1526 
1527   private void jj_add_error_token(int kind, int pos) {
1528     if (pos >= 100) return;
1529     if (pos == jj_endpos + 1) {
1530       jj_lasttokens[jj_endpos++] = kind;
1531     } else if (jj_endpos != 0) {
1532       jj_expentry = new int[jj_endpos];
1533       for (int i = 0; i < jj_endpos; i++) {
1534         jj_expentry[i] = jj_lasttokens[i];
1535       }
1536       boolean exists = false;
1537       for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements();) {
1538         int[] oldentry = (int[])(e.nextElement());
1539         if (oldentry.length == jj_expentry.length) {
1540           exists = true;
1541           for (int i = 0; i < jj_expentry.length; i++) {
1542             if (oldentry[i] != jj_expentry[i]) {
1543               exists = false;
1544               break;
1545             }
1546           }
1547           if (exists) break;
1548         }
1549       }
1550       if (!exists) jj_expentries.addElement(jj_expentry);
1551       if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
1552     }
1553   }
1554 
1555   public ParseException generateParseException() {
1556     jj_expentries.removeAllElements();
1557     boolean[] la1tokens = new boolean[77];
1558     for (int i = 0; i < 77; i++) {
1559       la1tokens[i] = false;
1560     }
1561     if (jj_kind >= 0) {
1562       la1tokens[jj_kind] = true;
1563       jj_kind = -1;
1564     }
1565     for (int i = 0; i < 29; i++) {
1566       if (jj_la1[i] == jj_gen) {
1567         for (int j = 0; j < 32; j++) {
1568           if ((jj_la1_0[i] & (1<<j)) != 0) {
1569             la1tokens[j] = true;
1570           }
1571           if ((jj_la1_1[i] & (1<<j)) != 0) {
1572             la1tokens[32+j] = true;
1573           }
1574           if ((jj_la1_2[i] & (1<<j)) != 0) {
1575             la1tokens[64+j] = true;
1576           }
1577         }
1578       }
1579     }
1580     for (int i = 0; i < 77; i++) {
1581       if (la1tokens[i]) {
1582         jj_expentry = new int[1];
1583         jj_expentry[0] = i;
1584         jj_expentries.addElement(jj_expentry);
1585       }
1586     }
1587     jj_endpos = 0;
1588     jj_rescan_token();
1589     jj_add_error_token(0, 0);
1590     int[][] exptokseq = new int[jj_expentries.size()][];
1591     for (int i = 0; i < jj_expentries.size(); i++) {
1592       exptokseq[i] = (int[])jj_expentries.elementAt(i);
1593     }
1594     return new ParseException(token, exptokseq, tokenImage);
1595   }
1596 
1597   final public void enable_tracing() {
1598   }
1599 
1600   final public void disable_tracing() {
1601   }
1602 
1603   final private void jj_rescan_token() {
1604     jj_rescan = true;
1605     for (int i = 0; i < 2; i++) {
1606     try {
1607       JJCalls p = jj_2_rtns[i];
1608       do {
1609         if (p.gen > jj_gen) {
1610           jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
1611           switch (i) {
1612             case 0: jj_3_1(); break;
1613             case 1: jj_3_2(); break;
1614           }
1615         }
1616         p = p.next;
1617       } while (p != null);
1618       } catch(LookaheadSuccess ls) { }
1619     }
1620     jj_rescan = false;
1621   }
1622 
1623   final private void jj_save(int index, int xla) {
1624     JJCalls p = jj_2_rtns[index];
1625     while (p.gen > jj_gen) {
1626       if (p.next == null) { p = p.next = new JJCalls(); break; }
1627       p = p.next;
1628     }
1629     p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
1630   }
1631 
1632   static final class JJCalls {
1633     int gen;
1634     Token first;
1635     int arg;
1636     JJCalls next;
1637   }
1638 
1639 }