KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sourceforge > pmd > jsp > ast > JspParser


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 JavaDoc quoteContent(String JavaDoc 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 JavaDoc expressionContent(String JavaDoc 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 JavaDoc jjte000) {
51     if (jjtc000) {
52       jjtree.clearNodeScope(jjtn000);
53       jjtc000 = false;
54     } else {
55       jjtree.popNode();
56     }
57     if (jjte000 instanceof RuntimeException JavaDoc) {
58       {if (true) throw (RuntimeException JavaDoc)jjte000;}
59     }
60     if (jjte000 instanceof ParseException) {
61       {if (true) throw (ParseException)jjte000;}
62     }
63     {if (true) throw (Error JavaDoc)jjte000;}
64     } finally {
65     if (jjtc000) {
66       jjtree.closeNodeScope(jjtn000, true);
67     }
68     }
69     throw new RuntimeException JavaDoc("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 JavaDoc jjte000) {
185           if (jjtc000) {
186             jjtree.clearNodeScope(jjtn000);
187             jjtc000 = false;
188           } else {
189             jjtree.popNode();
190           }
191           if (jjte000 instanceof RuntimeException JavaDoc) {
192             {if (true) throw (RuntimeException JavaDoc)jjte000;}
193           }
194           if (jjte000 instanceof ParseException) {
195             {if (true) throw (ParseException)jjte000;}
196           }
197           {if (true) throw (Error JavaDoc)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 JavaDoc jjte000) {
274           if (jjtc000) {
275             jjtree.clearNodeScope(jjtn000);
276             jjtc000 = false;
277           } else {
278             jjtree.popNode();
279           }
280           if (jjte000 instanceof RuntimeException JavaDoc) {
281             {if (true) throw (RuntimeException JavaDoc)jjte000;}
282           }
283           if (jjte000 instanceof ParseException) {
284             {if (true) throw (ParseException)jjte000;}
285           }
286           {if (true) throw (Error JavaDoc)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 JavaDoc content = new StringBuffer JavaDoc();
392         String JavaDoc 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 JavaDoc jjte000) {
424           if (jjtc000) {
425             jjtree.clearNodeScope(jjtn000);
426             jjtc000 = false;
427           } else {
428             jjtree.popNode();
429           }
430           if (jjte000 instanceof RuntimeException JavaDoc) {
431             {if (true) throw (RuntimeException JavaDoc)jjte000;}
432           }
433           if (jjte000 instanceof ParseException) {
434             {if (true) throw (ParseException)jjte000;}
435           }
436           {if (true) throw (Error JavaDoc)jjte000;}
437     } finally {
438           if (jjtc000) {
439             jjtree.closeNodeScope(jjtn000, true);
440           }
441     }
442   }
443
444   final public String JavaDoc 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 JavaDoc("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 JavaDoc 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 JavaDoc("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 JavaDoc 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 JavaDoc("Missing return statement in function");
507   }
508
509 /**
510  * An EL expression, not within an attribute value.
511  */

512   final public String JavaDoc 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 JavaDoc("Missing return statement in function");
529   }
530
531   final public String JavaDoc 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 JavaDoc("Missing return statement in function");
548   }
549
550   final public String JavaDoc 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 JavaDoc("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 JavaDoc content = new StringBuffer JavaDoc();
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 JavaDoc 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 JavaDoc jjte000) {
672       if (jjtc000) {
673         jjtree.clearNodeScope(jjtn000);
674         jjtc000 = false;
675       } else {
676         jjtree.popNode();
677       }
678       if (jjte000 instanceof RuntimeException JavaDoc) {
679         {if (true) throw (RuntimeException JavaDoc)jjte000;}
680       }
681       if (jjte000 instanceof ParseException) {
682         {if (true) throw (ParseException)jjte000;}
683       }
684       {if (true) throw (Error JavaDoc)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 JavaDoc jjte000) {
703     if (jjtc000) {
704       jjtree.clearNodeScope(jjtn000);
705       jjtc000 = false;
706     } else {
707       jjtree.popNode();
708     }
709     if (jjte000 instanceof RuntimeException JavaDoc) {
710       {if (true) throw (RuntimeException JavaDoc)jjte000;}
711     }
712     if (jjte000 instanceof ParseException) {
713       {if (true) throw (ParseException)jjte000;}
714     }
715     {if (true) throw (Error JavaDoc)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 JavaDoc content = new StringBuffer JavaDoc();
733         String JavaDoc 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 JavaDoc jjte000) {
836           if (jjtc000) {
837             jjtree.clearNodeScope(jjtn000);
838             jjtc000 = false;
839           } else {
840             jjtree.popNode();
841           }
842           if (jjte000 instanceof RuntimeException JavaDoc) {
843             {if (true) throw (RuntimeException JavaDoc)jjte000;}
844           }
845           if (jjte000 instanceof ParseException) {
846             {if (true) throw (ParseException)jjte000;}
847           }
848           {if (true) throw (Error JavaDoc)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 JavaDoc QuoteIndependentAttributeValueContent() throws ParseException {
861         String JavaDoc 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 JavaDoc("Missing return statement in function");
879   }
880
881   final public String JavaDoc 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 JavaDoc("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 JavaDoc content = new StringBuffer JavaDoc();
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 JavaDoc jjte000) {
955     if (jjtc000) {
956       jjtree.clearNodeScope(jjtn000);
957       jjtc000 = false;
958     } else {
959       jjtree.popNode();
960     }
961     if (jjte000 instanceof RuntimeException JavaDoc) {
962       {if (true) throw (RuntimeException JavaDoc)jjte000;}
963     }
964     if (jjte000 instanceof ParseException) {
965       {if (true) throw (ParseException)jjte000;}
966     }
967     {if (true) throw (Error JavaDoc)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 JavaDoc jjte000) {
1012          if (jjtc000) {
1013            jjtree.clearNodeScope(jjtn000);
1014            jjtc000 = false;
1015          } else {
1016            jjtree.popNode();
1017          }
1018          if (jjte000 instanceof RuntimeException JavaDoc) {
1019            {if (true) throw (RuntimeException JavaDoc)jjte000;}
1020          }
1021          if (jjte000 instanceof ParseException) {
1022            {if (true) throw (ParseException)jjte000;}
1023          }
1024          {if (true) throw (Error JavaDoc)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 JavaDoc { }
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 JavaDoc jj_expentries = new java.util.Vector JavaDoc();
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 JavaDoc 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}
1640
Popular Tags