0001 /* Generated By:JJTree&JavaCC: Do not edit this line. JspParser.java */
0002 package net.sourceforge.pmd.lang.jsp.ast;
0003
0004 import net.sourceforge.pmd.lang.ast.CharStream;
0005 import net.sourceforge.pmd.lang.ast.TokenMgrError;
0006
0007 /**
0008 * JSP Parser for PMD.
0009 * @author Pieter, Application Engineers NV/SA, http://www.ae.be
0010 */
0011 public class JspParser/*@bgen(jjtree)*/implements JspParserTreeConstants, JspParserConstants {/*@bgen(jjtree)*/
0012 protected JJTJspParserState jjtree = new JJTJspParserState();
0013 /**
0014 * Return the contents of a quote.
0015 * @param quote String - starting and ending with " or '
0016 * @return String a substring of quote: quote without the first and list
0017 * character.
0018 */
0019 private static String quoteContent(String quote) {
0020 return quote.substring(1, quote.length()-1);
0021 }
0022
0023 /**
0024 * Return the contents of a EL expression or a Value Binding expression.
0025 * @param expression String - starting with ${ or #{ and ending with }
0026 * @return String a substring of expression: expression without the first two and list
0027 * characters.
0028 */
0029 private static String expressionContent(String expression) {
0030 return expression.substring(2, expression.length()-1).trim();
0031 }
0032
0033 /** ******************************************************************** */
0034 /** ************************* JSP GRAMMAR **************************** */
0035 /** ******************************************************************** */
0036
0037 /**
0038 * The root of the AST of a JSP.
0039 */
0040 final public ASTCompilationUnit CompilationUnit() throws ParseException {
0041 /*@bgen(jjtree) CompilationUnit */
0042 ASTCompilationUnit jjtn000 = new ASTCompilationUnit(this, JJTCOMPILATIONUNIT);
0043 boolean jjtc000 = true;
0044 jjtree.openNodeScope(jjtn000);
0045 try {
0046 Prolog();
0047 Content();
0048 jj_consume_token(0);
0049 jjtree.closeNodeScope(jjtn000, true);
0050 jjtc000 = false;
0051 {if (true) return jjtn000;}
0052 } catch (Throwable jjte000) {
0053 if (jjtc000) {
0054 jjtree.clearNodeScope(jjtn000);
0055 jjtc000 = false;
0056 } else {
0057 jjtree.popNode();
0058 }
0059 if (jjte000 instanceof RuntimeException) {
0060 {if (true) throw (RuntimeException)jjte000;}
0061 }
0062 if (jjte000 instanceof ParseException) {
0063 {if (true) throw (ParseException)jjte000;}
0064 }
0065 {if (true) throw (Error)jjte000;}
0066 } finally {
0067 if (jjtc000) {
0068 jjtree.closeNodeScope(jjtn000, true);
0069 }
0070 }
0071 throw new RuntimeException("Missing return statement in function");
0072 }
0073
0074 /**
0075 * The optional prolog of a JSP, including (xml) declarations and DTD.
0076 */
0077 final public void Prolog() throws ParseException {
0078 if (jj_2_1(2147483647)) {
0079 label_1:
0080 while (true) {
0081 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0082 case COMMENT_START:
0083 case JSP_COMMENT_START:
0084 ;
0085 break;
0086 default:
0087 jj_la1[0] = jj_gen;
0088 break label_1;
0089 }
0090 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0091 case COMMENT_START:
0092 CommentTag();
0093 break;
0094 case JSP_COMMENT_START:
0095 JspComment();
0096 break;
0097 default:
0098 jj_la1[1] = jj_gen;
0099 jj_consume_token(-1);
0100 throw new ParseException();
0101 }
0102 }
0103 Declaration();
0104 } else {
0105 ;
0106 }
0107 if (jj_2_2(2147483647)) {
0108 label_2:
0109 while (true) {
0110 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0111 case COMMENT_START:
0112 case JSP_COMMENT_START:
0113 ;
0114 break;
0115 default:
0116 jj_la1[2] = jj_gen;
0117 break label_2;
0118 }
0119 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0120 case COMMENT_START:
0121 CommentTag();
0122 break;
0123 case JSP_COMMENT_START:
0124 JspComment();
0125 break;
0126 default:
0127 jj_la1[3] = jj_gen;
0128 jj_consume_token(-1);
0129 throw new ParseException();
0130 }
0131 }
0132 DoctypeDeclaration();
0133 } else {
0134 ;
0135 }
0136 }
0137
0138 /**
0139 * Everything between a start-tag and the corresponding end-tag of an element.
0140 */
0141 final public void Content() throws ParseException {
0142 /*@bgen(jjtree) Content */
0143 ASTContent jjtn000 = new ASTContent(this, JJTCONTENT);
0144 boolean jjtc000 = true;
0145 jjtree.openNodeScope(jjtn000);
0146 try {
0147 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0148 case EL_EXPRESSION:
0149 case UNPARSED_TEXT:
0150 Text();
0151 break;
0152 case TAG_START:
0153 case COMMENT_START:
0154 case CDATA_START:
0155 case JSP_COMMENT_START:
0156 case JSP_DECLARATION_START:
0157 case JSP_EXPRESSION_START:
0158 case JSP_SCRIPTLET_START:
0159 case JSP_DIRECTIVE_START:
0160 ContentElementPossiblyWithText();
0161 break;
0162 default:
0163 jj_la1[4] = jj_gen;
0164 jj_consume_token(-1);
0165 throw new ParseException();
0166 }
0167 label_3:
0168 while (true) {
0169 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0170 case TAG_START:
0171 case COMMENT_START:
0172 case CDATA_START:
0173 case JSP_COMMENT_START:
0174 case JSP_DECLARATION_START:
0175 case JSP_EXPRESSION_START:
0176 case JSP_SCRIPTLET_START:
0177 case JSP_DIRECTIVE_START:
0178 ;
0179 break;
0180 default:
0181 jj_la1[5] = jj_gen;
0182 break label_3;
0183 }
0184 ContentElementPossiblyWithText();
0185 }
0186 } catch (Throwable jjte000) {
0187 if (jjtc000) {
0188 jjtree.clearNodeScope(jjtn000);
0189 jjtc000 = false;
0190 } else {
0191 jjtree.popNode();
0192 }
0193 if (jjte000 instanceof RuntimeException) {
0194 {if (true) throw (RuntimeException)jjte000;}
0195 }
0196 if (jjte000 instanceof ParseException) {
0197 {if (true) throw (ParseException)jjte000;}
0198 }
0199 {if (true) throw (Error)jjte000;}
0200 } finally {
0201 if (jjtc000) {
0202 jjtree.closeNodeScope(jjtn000, true);
0203 }
0204 }
0205 }
0206
0207 /**
0208 * A single (non-text) element that can occur between a start- and end-tag of an element.
0209 * Possibly followed by text.
0210 */
0211 final public void ContentElementPossiblyWithText() throws ParseException {
0212 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0213 case COMMENT_START:
0214 CommentTag();
0215 break;
0216 case TAG_START:
0217 Element();
0218 break;
0219 case CDATA_START:
0220 CData();
0221 break;
0222 case JSP_COMMENT_START:
0223 JspComment();
0224 break;
0225 case JSP_DECLARATION_START:
0226 JspDeclaration();
0227 break;
0228 case JSP_EXPRESSION_START:
0229 JspExpression();
0230 break;
0231 case JSP_SCRIPTLET_START:
0232 JspScriptlet();
0233 break;
0234 case JSP_DIRECTIVE_START:
0235 JspDirective();
0236 break;
0237 default:
0238 jj_la1[6] = jj_gen;
0239 jj_consume_token(-1);
0240 throw new ParseException();
0241 }
0242 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0243 case EL_EXPRESSION:
0244 case UNPARSED_TEXT:
0245 Text();
0246 break;
0247 default:
0248 jj_la1[7] = jj_gen;
0249 ;
0250 }
0251 }
0252
0253 final public void JspDirective() throws ParseException {
0254 /*@bgen(jjtree) JspDirective */
0255 ASTJspDirective jjtn000 = new ASTJspDirective(this, JJTJSPDIRECTIVE);
0256 boolean jjtc000 = true;
0257 jjtree.openNodeScope(jjtn000);Token t;
0258 try {
0259 jj_consume_token(JSP_DIRECTIVE_START);
0260 t = jj_consume_token(JSP_DIRECTIVE_NAME);
0261 jjtn000.setName(t.image);
0262 label_4:
0263 while (true) {
0264 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0265 case JSP_DIRECTIVE_ATTRIBUTE_NAME:
0266 ;
0267 break;
0268 default:
0269 jj_la1[8] = jj_gen;
0270 break label_4;
0271 }
0272 JspDirectiveAttribute();
0273 }
0274 jj_consume_token(JSP_DIRECTIVE_END);
0275 } catch (Throwable jjte000) {
0276 if (jjtc000) {
0277 jjtree.clearNodeScope(jjtn000);
0278 jjtc000 = false;
0279 } else {
0280 jjtree.popNode();
0281 }
0282 if (jjte000 instanceof RuntimeException) {
0283 {if (true) throw (RuntimeException)jjte000;}
0284 }
0285 if (jjte000 instanceof ParseException) {
0286 {if (true) throw (ParseException)jjte000;}
0287 }
0288 {if (true) throw (Error)jjte000;}
0289 } finally {
0290 if (jjtc000) {
0291 jjtree.closeNodeScope(jjtn000, true);
0292 }
0293 }
0294 }
0295
0296 final public void JspDirectiveAttribute() throws ParseException {
0297 /*@bgen(jjtree) JspDirectiveAttribute */
0298 ASTJspDirectiveAttribute jjtn000 = new ASTJspDirectiveAttribute(this, JJTJSPDIRECTIVEATTRIBUTE);
0299 boolean jjtc000 = true;
0300 jjtree.openNodeScope(jjtn000);Token t;
0301 try {
0302 t = jj_consume_token(JSP_DIRECTIVE_ATTRIBUTE_NAME);
0303 jjtn000.setName(t.image);
0304 jj_consume_token(JSP_DIRECTIVE_ATTRIBUTE_EQUALS);
0305 t = jj_consume_token(JSP_DIRECTIVE_ATTRIBUTE_VALUE);
0306 jjtree.closeNodeScope(jjtn000, true);
0307 jjtc000 = false;
0308 jjtn000.setValue(quoteContent(t.image));
0309 } finally {
0310 if (jjtc000) {
0311 jjtree.closeNodeScope(jjtn000, true);
0312 }
0313 }
0314 }
0315
0316 final public void JspScriptlet() throws ParseException {
0317 /*@bgen(jjtree) JspScriptlet */
0318 ASTJspScriptlet jjtn000 = new ASTJspScriptlet(this, JJTJSPSCRIPTLET);
0319 boolean jjtc000 = true;
0320 jjtree.openNodeScope(jjtn000);Token t;
0321 try {
0322 jj_consume_token(JSP_SCRIPTLET_START);
0323 t = jj_consume_token(JSP_SCRIPTLET);
0324 jjtn000.setImage(t.image.trim());
0325 jj_consume_token(JSP_SCRIPTLET_END);
0326 } finally {
0327 if (jjtc000) {
0328 jjtree.closeNodeScope(jjtn000, true);
0329 }
0330 }
0331 }
0332
0333 final public void JspExpression() throws ParseException {
0334 /*@bgen(jjtree) JspExpression */
0335 ASTJspExpression jjtn000 = new ASTJspExpression(this, JJTJSPEXPRESSION);
0336 boolean jjtc000 = true;
0337 jjtree.openNodeScope(jjtn000);Token t;
0338 try {
0339 jj_consume_token(JSP_EXPRESSION_START);
0340 t = jj_consume_token(JSP_EXPRESSION);
0341 jjtn000.setImage(t.image.trim());
0342 jj_consume_token(JSP_EXPRESSION_END);
0343 } finally {
0344 if (jjtc000) {
0345 jjtree.closeNodeScope(jjtn000, true);
0346 }
0347 }
0348 }
0349
0350 final public void JspDeclaration() throws ParseException {
0351 /*@bgen(jjtree) JspDeclaration */
0352 ASTJspDeclaration jjtn000 = new ASTJspDeclaration(this, JJTJSPDECLARATION);
0353 boolean jjtc000 = true;
0354 jjtree.openNodeScope(jjtn000);Token t;
0355 try {
0356 jj_consume_token(JSP_DECLARATION_START);
0357 t = jj_consume_token(JSP_DECLARATION);
0358 jjtn000.setImage(t.image.trim());
0359 jj_consume_token(JSP_DECLARATION_END);
0360 } finally {
0361 if (jjtc000) {
0362 jjtree.closeNodeScope(jjtn000, true);
0363 }
0364 }
0365 }
0366
0367 final public void JspComment() throws ParseException {
0368 /*@bgen(jjtree) JspComment */
0369 ASTJspComment jjtn000 = new ASTJspComment(this, JJTJSPCOMMENT);
0370 boolean jjtc000 = true;
0371 jjtree.openNodeScope(jjtn000);Token t;
0372 try {
0373 jj_consume_token(JSP_COMMENT_START);
0374 t = jj_consume_token(JSP_COMMENT_CONTENT);
0375 jjtn000.setImage(t.image.trim());
0376 jj_consume_token(JSP_COMMENT_END);
0377 } finally {
0378 if (jjtc000) {
0379 jjtree.closeNodeScope(jjtn000, true);
0380 }
0381 }
0382 }
0383
0384 /**
0385 * This production groups all characters between two tags, where
0386 * tag is an xml-tag "<...>" or a jsp-page-tag "<%...%>" or CDATA "<![CDATA[...]]>".
0387 * Text consists of unparsed text and/or Expression Language expressions.
0388 */
0389 final public void Text() throws ParseException {
0390 /*@bgen(jjtree) Text */
0391 ASTText jjtn000 = new ASTText(this, JJTTEXT);
0392 boolean jjtc000 = true;
0393 jjtree.openNodeScope(jjtn000);StringBuffer content = new StringBuffer();
0394 String tmp;
0395 try {
0396 label_5:
0397 while (true) {
0398 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0399 case UNPARSED_TEXT:
0400 tmp = UnparsedText();
0401 content.append(tmp);
0402 break;
0403 case EL_EXPRESSION:
0404 tmp = ElExpression();
0405 content.append(tmp);
0406 break;
0407 default:
0408 jj_la1[9] = jj_gen;
0409 jj_consume_token(-1);
0410 throw new ParseException();
0411 }
0412 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0413 case EL_EXPRESSION:
0414 case UNPARSED_TEXT:
0415 ;
0416 break;
0417 default:
0418 jj_la1[10] = jj_gen;
0419 break label_5;
0420 }
0421 }
0422 jjtree.closeNodeScope(jjtn000, true);
0423 jjtc000 = false;
0424 jjtn000.setImage(content.toString());
0425 } catch (Throwable jjte000) {
0426 if (jjtc000) {
0427 jjtree.clearNodeScope(jjtn000);
0428 jjtc000 = false;
0429 } else {
0430 jjtree.popNode();
0431 }
0432 if (jjte000 instanceof RuntimeException) {
0433 {if (true) throw (RuntimeException)jjte000;}
0434 }
0435 if (jjte000 instanceof ParseException) {
0436 {if (true) throw (ParseException)jjte000;}
0437 }
0438 {if (true) throw (Error)jjte000;}
0439 } finally {
0440 if (jjtc000) {
0441 jjtree.closeNodeScope(jjtn000, true);
0442 }
0443 }
0444 }
0445
0446 final public String UnparsedText() throws ParseException {
0447 /*@bgen(jjtree) UnparsedText */
0448 ASTUnparsedText jjtn000 = new ASTUnparsedText(this, JJTUNPARSEDTEXT);
0449 boolean jjtc000 = true;
0450 jjtree.openNodeScope(jjtn000);Token t;
0451 try {
0452 t = jj_consume_token(UNPARSED_TEXT);
0453 jjtree.closeNodeScope(jjtn000, true);
0454 jjtc000 = false;
0455 jjtn000.setImage(t.image);
0456 {if (true) return t.image;}
0457 } finally {
0458 if (jjtc000) {
0459 jjtree.closeNodeScope(jjtn000, true);
0460 }
0461 }
0462 throw new RuntimeException("Missing return statement in function");
0463 }
0464
0465 /**
0466 * Text that contains no single quotes, and that does not contain the start
0467 * of a EL expression or value binding.
0468 */
0469 final public String UnparsedTextNoSingleQuotes() throws ParseException {
0470 /*@bgen(jjtree) UnparsedText */
0471 ASTUnparsedText jjtn000 = new ASTUnparsedText(this, JJTUNPARSEDTEXT);
0472 boolean jjtc000 = true;
0473 jjtree.openNodeScope(jjtn000);Token t;
0474 try {
0475 t = jj_consume_token(UNPARSED_TEXT_NO_SINGLE_QUOTES);
0476 jjtree.closeNodeScope(jjtn000, true);
0477 jjtc000 = false;
0478 jjtn000.setImage(t.image);
0479 {if (true) return t.image;}
0480 } finally {
0481 if (jjtc000) {
0482 jjtree.closeNodeScope(jjtn000, true);
0483 }
0484 }
0485 throw new RuntimeException("Missing return statement in function");
0486 }
0487
0488 /**
0489 * Text that contains no double quotes, and that does not contain the start
0490 * of a EL expression or value binding.
0491 */
0492 final public String UnparsedTextNoDoubleQuotes() throws ParseException {
0493 /*@bgen(jjtree) UnparsedText */
0494 ASTUnparsedText jjtn000 = new ASTUnparsedText(this, JJTUNPARSEDTEXT);
0495 boolean jjtc000 = true;
0496 jjtree.openNodeScope(jjtn000);Token t;
0497 try {
0498 t = jj_consume_token(UNPARSED_TEXT_NO_DOUBLE_QUOTES);
0499 jjtree.closeNodeScope(jjtn000, true);
0500 jjtc000 = false;
0501 jjtn000.setImage(t.image);
0502 {if (true) return t.image;}
0503 } finally {
0504 if (jjtc000) {
0505 jjtree.closeNodeScope(jjtn000, true);
0506 }
0507 }
0508 throw new RuntimeException("Missing return statement in function");
0509 }
0510
0511 /**
0512 * An EL expression, not within an attribute value.
0513 */
0514 final public String ElExpression() throws ParseException {
0515 /*@bgen(jjtree) ElExpression */
0516 ASTElExpression jjtn000 = new ASTElExpression(this, JJTELEXPRESSION);
0517 boolean jjtc000 = true;
0518 jjtree.openNodeScope(jjtn000);Token t;
0519 try {
0520 t = jj_consume_token(EL_EXPRESSION);
0521 jjtree.closeNodeScope(jjtn000, true);
0522 jjtc000 = false;
0523 jjtn000.setImage(expressionContent(t.image));
0524 {if (true) return t.image;}
0525 } finally {
0526 if (jjtc000) {
0527 jjtree.closeNodeScope(jjtn000, true);
0528 }
0529 }
0530 throw new RuntimeException("Missing return statement in function");
0531 }
0532
0533 final public String ValueBindingInAttribute() throws ParseException {
0534 /*@bgen(jjtree) ValueBinding */
0535 ASTValueBinding jjtn000 = new ASTValueBinding(this, JJTVALUEBINDING);
0536 boolean jjtc000 = true;
0537 jjtree.openNodeScope(jjtn000);Token t;
0538 try {
0539 t = jj_consume_token(VALUE_BINDING_IN_ATTRIBUTE);
0540 jjtree.closeNodeScope(jjtn000, true);
0541 jjtc000 = false;
0542 jjtn000.setImage(expressionContent(t.image));
0543 {if (true) return t.image;}
0544 } finally {
0545 if (jjtc000) {
0546 jjtree.closeNodeScope(jjtn000, true);
0547 }
0548 }
0549 throw new RuntimeException("Missing return statement in function");
0550 }
0551
0552 final public String ElExpressionInAttribute() throws ParseException {
0553 /*@bgen(jjtree) ElExpression */
0554 ASTElExpression jjtn000 = new ASTElExpression(this, JJTELEXPRESSION);
0555 boolean jjtc000 = true;
0556 jjtree.openNodeScope(jjtn000);Token t;
0557 try {
0558 t = jj_consume_token(EL_EXPRESSION_IN_ATTRIBUTE);
0559 jjtree.closeNodeScope(jjtn000, true);
0560 jjtc000 = false;
0561 jjtn000.setImage(expressionContent(t.image));
0562 {if (true) return t.image;}
0563 } finally {
0564 if (jjtc000) {
0565 jjtree.closeNodeScope(jjtn000, true);
0566 }
0567 }
0568 throw new RuntimeException("Missing return statement in function");
0569 }
0570
0571 final public void CData() throws ParseException {
0572 /*@bgen(jjtree) CData */
0573 ASTCData jjtn000 = new ASTCData(this, JJTCDATA);
0574 boolean jjtc000 = true;
0575 jjtree.openNodeScope(jjtn000);StringBuffer content = new StringBuffer();
0576 Token t;
0577 try {
0578 jj_consume_token(CDATA_START);
0579 label_6:
0580 while (true) {
0581 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0582 case UNPARSED:
0583 ;
0584 break;
0585 default:
0586 jj_la1[11] = jj_gen;
0587 break label_6;
0588 }
0589 t = jj_consume_token(UNPARSED);
0590 content.append(t.image);
0591 }
0592 jj_consume_token(CDATA_END);
0593 jjtree.closeNodeScope(jjtn000, true);
0594 jjtc000 = false;
0595 jjtn000.setImage(content.toString());
0596 } finally {
0597 if (jjtc000) {
0598 jjtree.closeNodeScope(jjtn000, true);
0599 }
0600 }
0601 }
0602
0603 /**
0604 * A XML element, either with a single empty tag, or with a starting and closing tag
0605 * with optional contained content.
0606 */
0607 final public void Element() throws ParseException {
0608 /*@bgen(jjtree) Element */
0609 ASTElement jjtn000 = new ASTElement(this, JJTELEMENT);
0610 boolean jjtc000 = true;
0611 jjtree.openNodeScope(jjtn000);Token startTagName;
0612 Token endTagName;
0613 String tagName;
0614 try {
0615 jj_consume_token(TAG_START);
0616 startTagName = jj_consume_token(TAG_NAME);
0617 tagName = startTagName.image; jjtn000.setName(tagName);
0618 label_7:
0619 while (true) {
0620 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0621 case ATTR_NAME:
0622 ;
0623 break;
0624 default:
0625 jj_la1[12] = jj_gen;
0626 break label_7;
0627 }
0628 Attribute();
0629 }
0630 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0631 case TAG_END:
0632 jj_consume_token(TAG_END);
0633 jjtn000.setEmpty(false);
0634 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0635 case TAG_START:
0636 case COMMENT_START:
0637 case CDATA_START:
0638 case JSP_COMMENT_START:
0639 case JSP_DECLARATION_START:
0640 case JSP_EXPRESSION_START:
0641 case JSP_SCRIPTLET_START:
0642 case JSP_DIRECTIVE_START:
0643 case EL_EXPRESSION:
0644 case UNPARSED_TEXT:
0645 Content();
0646 break;
0647 default:
0648 jj_la1[13] = jj_gen;
0649 ;
0650 }
0651 jj_consume_token(ENDTAG_START);
0652 endTagName = jj_consume_token(TAG_NAME);
0653 if (! tagName.equalsIgnoreCase(endTagName.image)) {
0654 {if (true) throw new StartAndEndTagMismatchException(
0655 startTagName.beginLine, startTagName.beginColumn,
0656 startTagName.image,
0657 endTagName.beginLine, endTagName.beginColumn,
0658 endTagName.image );}
0659 }
0660 jj_consume_token(TAG_END);
0661 break;
0662 case TAG_SLASHEND:
0663 jj_consume_token(TAG_SLASHEND);
0664 jjtree.closeNodeScope(jjtn000, true);
0665 jjtc000 = false;
0666 jjtn000.setEmpty(true);
0667 break;
0668 default:
0669 jj_la1[14] = jj_gen;
0670 jj_consume_token(-1);
0671 throw new ParseException();
0672 }
0673 } catch (Throwable jjte000) {
0674 if (jjtc000) {
0675 jjtree.clearNodeScope(jjtn000);
0676 jjtc000 = false;
0677 } else {
0678 jjtree.popNode();
0679 }
0680 if (jjte000 instanceof RuntimeException) {
0681 {if (true) throw (RuntimeException)jjte000;}
0682 }
0683 if (jjte000 instanceof ParseException) {
0684 {if (true) throw (ParseException)jjte000;}
0685 }
0686 {if (true) throw (Error)jjte000;}
0687 } finally {
0688 if (jjtc000) {
0689 jjtree.closeNodeScope(jjtn000, true);
0690 }
0691 }
0692 }
0693
0694 final public void Attribute() throws ParseException {
0695 /*@bgen(jjtree) Attribute */
0696 ASTAttribute jjtn000 = new ASTAttribute(this, JJTATTRIBUTE);
0697 boolean jjtc000 = true;
0698 jjtree.openNodeScope(jjtn000);Token t;
0699 try {
0700 t = jj_consume_token(ATTR_NAME);
0701 jjtn000.setName(t.image);
0702 jj_consume_token(ATTR_EQ);
0703 AttributeValue();
0704 } catch (Throwable jjte000) {
0705 if (jjtc000) {
0706 jjtree.clearNodeScope(jjtn000);
0707 jjtc000 = false;
0708 } else {
0709 jjtree.popNode();
0710 }
0711 if (jjte000 instanceof RuntimeException) {
0712 {if (true) throw (RuntimeException)jjte000;}
0713 }
0714 if (jjte000 instanceof ParseException) {
0715 {if (true) throw (ParseException)jjte000;}
0716 }
0717 {if (true) throw (Error)jjte000;}
0718 } finally {
0719 if (jjtc000) {
0720 jjtree.closeNodeScope(jjtn000, true);
0721 }
0722 }
0723 }
0724
0725 /**
0726 * The value of an attribute of an element.
0727 * EL expressions, JSF value bindings, and JSP expressions
0728 * are parsed as sub-nodes of the AttributeValue node.
0729 */
0730 final public void AttributeValue() throws ParseException {
0731 /*@bgen(jjtree) AttributeValue */
0732 ASTAttributeValue jjtn000 = new ASTAttributeValue(this, JJTATTRIBUTEVALUE);
0733 boolean jjtc000 = true;
0734 jjtree.openNodeScope(jjtn000);StringBuffer content = new StringBuffer();
0735 String tmp;
0736 Token t;
0737 try {
0738 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0739 case DOUBLE_QUOTE:
0740 jj_consume_token(DOUBLE_QUOTE);
0741 label_8:
0742 while (true) {
0743 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0744 case EL_EXPRESSION_IN_ATTRIBUTE:
0745 case VALUE_BINDING_IN_ATTRIBUTE:
0746 case JSP_EXPRESSION_IN_ATTRIBUTE:
0747 case UNPARSED_TEXT_NO_DOUBLE_QUOTES:
0748 ;
0749 break;
0750 default:
0751 jj_la1[15] = jj_gen;
0752 break label_8;
0753 }
0754 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0755 case UNPARSED_TEXT_NO_DOUBLE_QUOTES:
0756 tmp = UnparsedTextNoDoubleQuotes();
0757 break;
0758 case EL_EXPRESSION_IN_ATTRIBUTE:
0759 case VALUE_BINDING_IN_ATTRIBUTE:
0760 case JSP_EXPRESSION_IN_ATTRIBUTE:
0761 tmp = QuoteIndependentAttributeValueContent();
0762 break;
0763 default:
0764 jj_la1[16] = jj_gen;
0765 jj_consume_token(-1);
0766 throw new ParseException();
0767 }
0768 content.append(tmp);
0769 }
0770 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0771 case ENDING_DOUBLE_QUOTE:
0772 jj_consume_token(ENDING_DOUBLE_QUOTE);
0773 break;
0774 case DOLLAR_OR_HASH_DOUBLE_QUOTE:
0775 t = jj_consume_token(DOLLAR_OR_HASH_DOUBLE_QUOTE);
0776 content.append(t.image.substring(0, 1));
0777 break;
0778 default:
0779 jj_la1[17] = jj_gen;
0780 jj_consume_token(-1);
0781 throw new ParseException();
0782 }
0783 break;
0784 case SINGLE_QUOTE:
0785 jj_consume_token(SINGLE_QUOTE);
0786 label_9:
0787 while (true) {
0788 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0789 case EL_EXPRESSION_IN_ATTRIBUTE:
0790 case VALUE_BINDING_IN_ATTRIBUTE:
0791 case JSP_EXPRESSION_IN_ATTRIBUTE:
0792 case UNPARSED_TEXT_NO_SINGLE_QUOTES:
0793 ;
0794 break;
0795 default:
0796 jj_la1[18] = jj_gen;
0797 break label_9;
0798 }
0799 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0800 case UNPARSED_TEXT_NO_SINGLE_QUOTES:
0801 tmp = UnparsedTextNoSingleQuotes();
0802 break;
0803 case EL_EXPRESSION_IN_ATTRIBUTE:
0804 case VALUE_BINDING_IN_ATTRIBUTE:
0805 case JSP_EXPRESSION_IN_ATTRIBUTE:
0806 tmp = QuoteIndependentAttributeValueContent();
0807 break;
0808 default:
0809 jj_la1[19] = jj_gen;
0810 jj_consume_token(-1);
0811 throw new ParseException();
0812 }
0813 content.append(tmp);
0814 }
0815 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0816 case ENDING_SINGLE_QUOTE:
0817 jj_consume_token(ENDING_SINGLE_QUOTE);
0818 break;
0819 case DOLLAR_OR_HASH_SINGLE_QUOTE:
0820 t = jj_consume_token(DOLLAR_OR_HASH_SINGLE_QUOTE);
0821 content.append(t.image.substring(0, 1));
0822 break;
0823 default:
0824 jj_la1[20] = jj_gen;
0825 jj_consume_token(-1);
0826 throw new ParseException();
0827 }
0828 break;
0829 default:
0830 jj_la1[21] = jj_gen;
0831 jj_consume_token(-1);
0832 throw new ParseException();
0833 }
0834 jjtree.closeNodeScope(jjtn000, true);
0835 jjtc000 = false;
0836 jjtn000.setImage( content.toString() );
0837 } catch (Throwable jjte000) {
0838 if (jjtc000) {
0839 jjtree.clearNodeScope(jjtn000);
0840 jjtc000 = false;
0841 } else {
0842 jjtree.popNode();
0843 }
0844 if (jjte000 instanceof RuntimeException) {
0845 {if (true) throw (RuntimeException)jjte000;}
0846 }
0847 if (jjte000 instanceof ParseException) {
0848 {if (true) throw (ParseException)jjte000;}
0849 }
0850 {if (true) throw (Error)jjte000;}
0851 } finally {
0852 if (jjtc000) {
0853 jjtree.closeNodeScope(jjtn000, true);
0854 }
0855 }
0856 }
0857
0858 /**
0859 * Partial content of an attribute value that can contain all quotes.
0860 * This groups EL expressions, value bindings, and JSP expressions.
0861 */
0862 final public String QuoteIndependentAttributeValueContent() throws ParseException {
0863 String tmp;
0864 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0865 case EL_EXPRESSION_IN_ATTRIBUTE:
0866 tmp = ElExpressionInAttribute();
0867 break;
0868 case VALUE_BINDING_IN_ATTRIBUTE:
0869 tmp = ValueBindingInAttribute();
0870 break;
0871 case JSP_EXPRESSION_IN_ATTRIBUTE:
0872 tmp = JspExpressionInAttribute();
0873 break;
0874 default:
0875 jj_la1[22] = jj_gen;
0876 jj_consume_token(-1);
0877 throw new ParseException();
0878 }
0879 {if (true) return tmp;}
0880 throw new RuntimeException("Missing return statement in function");
0881 }
0882
0883 final public String JspExpressionInAttribute() throws ParseException {
0884 /*@bgen(jjtree) JspExpressionInAttribute */
0885 ASTJspExpressionInAttribute jjtn000 = new ASTJspExpressionInAttribute(this, JJTJSPEXPRESSIONINATTRIBUTE);
0886 boolean jjtc000 = true;
0887 jjtree.openNodeScope(jjtn000);Token t;
0888 try {
0889 t = jj_consume_token(JSP_EXPRESSION_IN_ATTRIBUTE);
0890 jjtree.closeNodeScope(jjtn000, true);
0891 jjtc000 = false;
0892 jjtn000.setImage(t.image.substring(3, t.image.length()-2).trim()); // without <% and %>
0893 {if (true) return t.image;}
0894 } finally {
0895 if (jjtc000) {
0896 jjtree.closeNodeScope(jjtn000, true);
0897 }
0898 }
0899 throw new RuntimeException("Missing return statement in function");
0900 }
0901
0902 final public void CommentTag() throws ParseException {
0903 /*@bgen(jjtree) CommentTag */
0904 ASTCommentTag jjtn000 = new ASTCommentTag(this, JJTCOMMENTTAG);
0905 boolean jjtc000 = true;
0906 jjtree.openNodeScope(jjtn000);StringBuffer content = new StringBuffer();
0907 Token t;
0908 try {
0909 jj_consume_token(COMMENT_START);
0910 label_10:
0911 while (true) {
0912 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0913 case COMMENT_TEXT:
0914 ;
0915 break;
0916 default:
0917 jj_la1[23] = jj_gen;
0918 break label_10;
0919 }
0920 t = jj_consume_token(COMMENT_TEXT);
0921 content.append(t.image);
0922 }
0923 jj_consume_token(COMMENT_END);
0924 jjtree.closeNodeScope(jjtn000, true);
0925 jjtc000 = false;
0926 jjtn000.setImage(content.toString().trim());
0927 } finally {
0928 if (jjtc000) {
0929 jjtree.closeNodeScope(jjtn000, true);
0930 }
0931 }
0932 }
0933
0934 final public void Declaration() throws ParseException {
0935 /*@bgen(jjtree) Declaration */
0936 ASTDeclaration jjtn000 = new ASTDeclaration(this, JJTDECLARATION);
0937 boolean jjtc000 = true;
0938 jjtree.openNodeScope(jjtn000);Token t;
0939 try {
0940 jj_consume_token(DECL_START);
0941 t = jj_consume_token(TAG_NAME);
0942 jjtn000.setName(t.image);
0943 label_11:
0944 while (true) {
0945 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0946 case ATTR_NAME:
0947 ;
0948 break;
0949 default:
0950 jj_la1[24] = jj_gen;
0951 break label_11;
0952 }
0953 Attribute();
0954 }
0955 jj_consume_token(DECL_END);
0956 } catch (Throwable jjte000) {
0957 if (jjtc000) {
0958 jjtree.clearNodeScope(jjtn000);
0959 jjtc000 = false;
0960 } else {
0961 jjtree.popNode();
0962 }
0963 if (jjte000 instanceof RuntimeException) {
0964 {if (true) throw (RuntimeException)jjte000;}
0965 }
0966 if (jjte000 instanceof ParseException) {
0967 {if (true) throw (ParseException)jjte000;}
0968 }
0969 {if (true) throw (Error)jjte000;}
0970 } finally {
0971 if (jjtc000) {
0972 jjtree.closeNodeScope(jjtn000, true);
0973 }
0974 }
0975 }
0976
0977 final public void DoctypeDeclaration() throws ParseException {
0978 /*@bgen(jjtree) DoctypeDeclaration */
0979 ASTDoctypeDeclaration jjtn000 = new ASTDoctypeDeclaration(this, JJTDOCTYPEDECLARATION);
0980 boolean jjtc000 = true;
0981 jjtree.openNodeScope(jjtn000);Token t;
0982 try {
0983 jj_consume_token(DOCTYPE_DECL_START);
0984 jj_consume_token(WHITESPACES);
0985 t = jj_consume_token(NAME);
0986 jjtn000.setName(t.image);
0987 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0988 case WHITESPACES:
0989 jj_consume_token(WHITESPACES);
0990 break;
0991 default:
0992 jj_la1[25] = jj_gen;
0993 ;
0994 }
0995 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
0996 case PUBLIC:
0997 case SYSTEM:
0998 DoctypeExternalId();
0999 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1000 case WHITESPACES:
1001 jj_consume_token(WHITESPACES);
1002 break;
1003 default:
1004 jj_la1[26] = jj_gen;
1005 ;
1006 }
1007 break;
1008 default:
1009 jj_la1[27] = jj_gen;
1010 ;
1011 }
1012 jj_consume_token(DOCTYPE_DECL_END);
1013 } catch (Throwable jjte000) {
1014 if (jjtc000) {
1015 jjtree.clearNodeScope(jjtn000);
1016 jjtc000 = false;
1017 } else {
1018 jjtree.popNode();
1019 }
1020 if (jjte000 instanceof RuntimeException) {
1021 {if (true) throw (RuntimeException)jjte000;}
1022 }
1023 if (jjte000 instanceof ParseException) {
1024 {if (true) throw (ParseException)jjte000;}
1025 }
1026 {if (true) throw (Error)jjte000;}
1027 } finally {
1028 if (jjtc000) {
1029 jjtree.closeNodeScope(jjtn000, true);
1030 }
1031 }
1032 }
1033
1034 final public void DoctypeExternalId() throws ParseException {
1035 /*@bgen(jjtree) DoctypeExternalId */
1036 ASTDoctypeExternalId jjtn000 = new ASTDoctypeExternalId(this, JJTDOCTYPEEXTERNALID);
1037 boolean jjtc000 = true;
1038 jjtree.openNodeScope(jjtn000);Token systemLiteral;
1039 Token pubIdLiteral;
1040 try {
1041 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1042 case SYSTEM:
1043 jj_consume_token(SYSTEM);
1044 jj_consume_token(WHITESPACES);
1045 systemLiteral = jj_consume_token(QUOTED_LITERAL);
1046 jjtree.closeNodeScope(jjtn000, true);
1047 jjtc000 = false;
1048 jjtn000.setUri(quoteContent(systemLiteral.image));
1049 break;
1050 case PUBLIC:
1051 jj_consume_token(PUBLIC);
1052 jj_consume_token(WHITESPACES);
1053 pubIdLiteral = jj_consume_token(QUOTED_LITERAL);
1054 jjtn000.setPublicId(quoteContent(pubIdLiteral.image));
1055 jj_consume_token(WHITESPACES);
1056 systemLiteral = jj_consume_token(QUOTED_LITERAL);
1057 jjtree.closeNodeScope(jjtn000, true);
1058 jjtc000 = false;
1059 jjtn000.setUri(quoteContent(systemLiteral.image));
1060 break;
1061 default:
1062 jj_la1[28] = jj_gen;
1063 jj_consume_token(-1);
1064 throw new ParseException();
1065 }
1066 } finally {
1067 if (jjtc000) {
1068 jjtree.closeNodeScope(jjtn000, true);
1069 }
1070 }
1071 }
1072
1073 private boolean jj_2_1(int xla) {
1074 jj_la = xla; jj_lastpos = jj_scanpos = token;
1075 try { return !jj_3_1(); }
1076 catch(LookaheadSuccess ls) { return true; }
1077 finally { jj_save(0, xla); }
1078 }
1079
1080 private boolean jj_2_2(int xla) {
1081 jj_la = xla; jj_lastpos = jj_scanpos = token;
1082 try { return !jj_3_2(); }
1083 catch(LookaheadSuccess ls) { return true; }
1084 finally { jj_save(1, xla); }
1085 }
1086
1087 private boolean jj_3R_30() {
1088 if (jj_scan_token(DOUBLE_QUOTE)) return true;
1089 Token xsp;
1090 while (true) {
1091 xsp = jj_scanpos;
1092 if (jj_3R_32()) { jj_scanpos = xsp; break; }
1093 }
1094 xsp = jj_scanpos;
1095 if (jj_scan_token(72)) {
1096 jj_scanpos = xsp;
1097 if (jj_3R_33()) return true;
1098 }
1099 return false;
1100 }
1101
1102 private boolean jj_3R_29() {
1103 if (jj_scan_token(PUBLIC)) return true;
1104 if (jj_scan_token(WHITESPACES)) return true;
1105 if (jj_scan_token(QUOTED_LITERAL)) return true;
1106 if (jj_scan_token(WHITESPACES)) return true;
1107 if (jj_scan_token(QUOTED_LITERAL)) return true;
1108 return false;
1109 }
1110
1111 private boolean jj_3R_47() {
1112 if (jj_scan_token(VALUE_BINDING_IN_ATTRIBUTE)) return true;
1113 return false;
1114 }
1115
1116 private boolean jj_3R_27() {
1117 Token xsp;
1118 xsp = jj_scanpos;
1119 if (jj_3R_30()) {
1120 jj_scanpos = xsp;
1121 if (jj_3R_31()) return true;
1122 }
1123 return false;
1124 }
1125
1126 private boolean jj_3R_25() {
1127 Token xsp;
1128 xsp = jj_scanpos;
1129 if (jj_3R_28()) {
1130 jj_scanpos = xsp;
1131 if (jj_3R_29()) return true;
1132 }
1133 return false;
1134 }
1135
1136 private boolean jj_3R_28() {
1137 if (jj_scan_token(SYSTEM)) return true;
1138 if (jj_scan_token(WHITESPACES)) return true;
1139 if (jj_scan_token(QUOTED_LITERAL)) return true;
1140 return false;
1141 }
1142
1143 private boolean jj_3R_21() {
1144 if (jj_3R_25()) return true;
1145 Token xsp;
1146 xsp = jj_scanpos;
1147 if (jj_scan_token(48)) jj_scanpos = xsp;
1148 return false;
1149 }
1150
1151 private boolean jj_3R_40() {
1152 if (jj_scan_token(UNPARSED_TEXT_NO_DOUBLE_QUOTES)) return true;
1153 return false;
1154 }
1155
1156 private boolean jj_3R_15() {
1157 if (jj_scan_token(DOCTYPE_DECL_START)) return true;
1158 if (jj_scan_token(WHITESPACES)) return true;
1159 if (jj_scan_token(NAME)) return true;
1160 Token xsp;
1161 xsp = jj_scanpos;
1162 if (jj_scan_token(48)) jj_scanpos = xsp;
1163 xsp = jj_scanpos;
1164 if (jj_3R_21()) jj_scanpos = xsp;
1165 if (jj_scan_token(DOCTYPE_DECL_END)) return true;
1166 return false;
1167 }
1168
1169 private boolean jj_3R_24() {
1170 if (jj_scan_token(ATTR_NAME)) return true;
1171 if (jj_scan_token(ATTR_EQ)) return true;
1172 if (jj_3R_27()) return true;
1173 return false;
1174 }
1175
1176 private boolean jj_3R_20() {
1177 if (jj_3R_23()) return true;
1178 return false;
1179 }
1180
1181 private boolean jj_3R_42() {
1182 if (jj_scan_token(UNPARSED_TEXT_NO_SINGLE_QUOTES)) return true;
1183 return false;
1184 }
1185
1186 private boolean jj_3R_18() {
1187 if (jj_3R_24()) return true;
1188 return false;
1189 }
1190
1191 private boolean jj_3R_13() {
1192 if (jj_scan_token(DECL_START)) return true;
1193 if (jj_scan_token(TAG_NAME)) return true;
1194 Token xsp;
1195 while (true) {
1196 xsp = jj_scanpos;
1197 if (jj_3R_18()) { jj_scanpos = xsp; break; }
1198 }
1199 if (jj_scan_token(DECL_END)) return true;
1200 return false;
1201 }
1202
1203 private boolean jj_3R_17() {
1204 if (jj_3R_23()) return true;
1205 return false;
1206 }
1207
1208 private boolean jj_3R_26() {
1209 if (jj_scan_token(COMMENT_TEXT)) return true;
1210 return false;
1211 }
1212
1213 private boolean jj_3R_19() {
1214 if (jj_3R_22()) return true;
1215 return false;
1216 }
1217
1218 private boolean jj_3R_14() {
1219 Token xsp;
1220 xsp = jj_scanpos;
1221 if (jj_3R_19()) {
1222 jj_scanpos = xsp;
1223 if (jj_3R_20()) return true;
1224 }
1225 return false;
1226 }
1227
1228 private boolean jj_3R_22() {
1229 if (jj_scan_token(COMMENT_START)) return true;
1230 Token xsp;
1231 while (true) {
1232 xsp = jj_scanpos;
1233 if (jj_3R_26()) { jj_scanpos = xsp; break; }
1234 }
1235 if (jj_scan_token(COMMENT_END)) return true;
1236 return false;
1237 }
1238
1239 private boolean jj_3_2() {
1240 Token xsp;
1241 while (true) {
1242 xsp = jj_scanpos;
1243 if (jj_3R_14()) { jj_scanpos = xsp; break; }
1244 }
1245 if (jj_3R_15()) return true;
1246 return false;
1247 }
1248
1249 private boolean jj_3R_12() {
1250 Token xsp;
1251 xsp = jj_scanpos;
1252 if (jj_3R_16()) {
1253 jj_scanpos = xsp;
1254 if (jj_3R_17()) return true;
1255 }
1256 return false;
1257 }
1258
1259 private boolean jj_3R_16() {
1260 if (jj_3R_22()) return true;
1261 return false;
1262 }
1263
1264 private boolean jj_3R_48() {
1265 if (jj_scan_token(JSP_EXPRESSION_IN_ATTRIBUTE)) return true;
1266 return false;
1267 }
1268
1269 private boolean jj_3R_45() {
1270 if (jj_3R_48()) return true;
1271 return false;
1272 }
1273
1274 private boolean jj_3_1() {
1275 Token xsp;
1276 while (true) {
1277 xsp = jj_scanpos;
1278 if (jj_3R_12()) { jj_scanpos = xsp; break; }
1279 }
1280 if (jj_3R_13()) return true;
1281 return false;
1282 }
1283
1284 private boolean jj_3R_44() {
1285 if (jj_3R_47()) return true;
1286 return false;
1287 }
1288
1289 private boolean jj_3R_43() {
1290 if (jj_3R_46()) return true;
1291 return false;
1292 }
1293
1294 private boolean jj_3R_39() {
1295 if (jj_3R_41()) return true;
1296 return false;
1297 }
1298
1299 private boolean jj_3R_35() {
1300 if (jj_scan_token(DOLLAR_OR_HASH_SINGLE_QUOTE)) return true;
1301 return false;
1302 }
1303
1304 private boolean jj_3R_38() {
1305 if (jj_3R_42()) return true;
1306 return false;
1307 }
1308
1309 private boolean jj_3R_33() {
1310 if (jj_scan_token(DOLLAR_OR_HASH_DOUBLE_QUOTE)) return true;
1311 return false;
1312 }
1313
1314 private boolean jj_3R_41() {
1315 Token xsp;
1316 xsp = jj_scanpos;
1317 if (jj_3R_43()) {
1318 jj_scanpos = xsp;
1319 if (jj_3R_44()) {
1320 jj_scanpos = xsp;
1321 if (jj_3R_45()) return true;
1322 }
1323 }
1324 return false;
1325 }
1326
1327 private boolean jj_3R_34() {
1328 Token xsp;
1329 xsp = jj_scanpos;
1330 if (jj_3R_38()) {
1331 jj_scanpos = xsp;
1332 if (jj_3R_39()) return true;
1333 }
1334 return false;
1335 }
1336
1337 private boolean jj_3R_37() {
1338 if (jj_3R_41()) return true;
1339 return false;
1340 }
1341
1342 private boolean jj_3R_36() {
1343 if (jj_3R_40()) return true;
1344 return false;
1345 }
1346
1347 private boolean jj_3R_23() {
1348 if (jj_scan_token(JSP_COMMENT_START)) return true;
1349 if (jj_scan_token(JSP_COMMENT_CONTENT)) return true;
1350 if (jj_scan_token(JSP_COMMENT_END)) return true;
1351 return false;
1352 }
1353
1354 private boolean jj_3R_32() {
1355 Token xsp;
1356 xsp = jj_scanpos;
1357 if (jj_3R_36()) {
1358 jj_scanpos = xsp;
1359 if (jj_3R_37()) return true;
1360 }
1361 return false;
1362 }
1363
1364 private boolean jj_3R_31() {
1365 if (jj_scan_token(SINGLE_QUOTE)) return true;
1366 Token xsp;
1367 while (true) {
1368 xsp = jj_scanpos;
1369 if (jj_3R_34()) { jj_scanpos = xsp; break; }
1370 }
1371 xsp = jj_scanpos;
1372 if (jj_scan_token(69)) {
1373 jj_scanpos = xsp;
1374 if (jj_3R_35()) return true;
1375 }
1376 return false;
1377 }
1378
1379 private boolean jj_3R_46() {
1380 if (jj_scan_token(EL_EXPRESSION_IN_ATTRIBUTE)) return true;
1381 return false;
1382 }
1383
1384 /** Generated Token Manager. */
1385 public JspParserTokenManager token_source;
1386 /** Current token. */
1387 public Token token;
1388 /** Next token. */
1389 public Token jj_nt;
1390 private int jj_ntk;
1391 private Token jj_scanpos, jj_lastpos;
1392 private int jj_la;
1393 private int jj_gen;
1394 final private int[] jj_la1 = new int[29];
1395 static private int[] jj_la1_0;
1396 static private int[] jj_la1_1;
1397 static private int[] jj_la1_2;
1398 static {
1399 jj_la1_init_0();
1400 jj_la1_init_1();
1401 jj_la1_init_2();
1402 }
1403 private static void jj_la1_init_0() {
1404 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,};
1405 }
1406 private static void jj_la1_init_1() {
1407 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,};
1408 }
1409 private static void jj_la1_init_2() {
1410 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,};
1411 }
1412 final private JJCalls[] jj_2_rtns = new JJCalls[2];
1413 private boolean jj_rescan = false;
1414 private int jj_gc = 0;
1415
1416 /** Constructor with user supplied CharStream. */
1417 public JspParser(CharStream stream) {
1418 token_source = new JspParserTokenManager(stream);
1419 token = new Token();
1420 jj_ntk = -1;
1421 jj_gen = 0;
1422 for (int i = 0; i < 29; i++) jj_la1[i] = -1;
1423 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
1424 }
1425
1426 /** Reinitialise. */
1427 public void ReInit(CharStream stream) {
1428 token_source.ReInit(stream);
1429 token = new Token();
1430 jj_ntk = -1;
1431 jjtree.reset();
1432 jj_gen = 0;
1433 for (int i = 0; i < 29; i++) jj_la1[i] = -1;
1434 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
1435 }
1436
1437 /** Constructor with generated Token Manager. */
1438 public JspParser(JspParserTokenManager tm) {
1439 token_source = tm;
1440 token = new Token();
1441 jj_ntk = -1;
1442 jj_gen = 0;
1443 for (int i = 0; i < 29; i++) jj_la1[i] = -1;
1444 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
1445 }
1446
1447 /** Reinitialise. */
1448 public void ReInit(JspParserTokenManager tm) {
1449 token_source = tm;
1450 token = new Token();
1451 jj_ntk = -1;
1452 jjtree.reset();
1453 jj_gen = 0;
1454 for (int i = 0; i < 29; i++) jj_la1[i] = -1;
1455 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
1456 }
1457
1458 private Token jj_consume_token(int kind) throws ParseException {
1459 Token oldToken;
1460 if ((oldToken = token).next != null) token = token.next;
1461 else token = token.next = token_source.getNextToken();
1462 jj_ntk = -1;
1463 if (token.kind == kind) {
1464 jj_gen++;
1465 if (++jj_gc > 100) {
1466 jj_gc = 0;
1467 for (int i = 0; i < jj_2_rtns.length; i++) {
1468 JJCalls c = jj_2_rtns[i];
1469 while (c != null) {
1470 if (c.gen < jj_gen) c.first = null;
1471 c = c.next;
1472 }
1473 }
1474 }
1475 return token;
1476 }
1477 token = oldToken;
1478 jj_kind = kind;
1479 throw generateParseException();
1480 }
1481
1482 static private final class LookaheadSuccess extends java.lang.Error { }
1483 final private LookaheadSuccess jj_ls = new LookaheadSuccess();
1484 private boolean jj_scan_token(int kind) {
1485 if (jj_scanpos == jj_lastpos) {
1486 jj_la--;
1487 if (jj_scanpos.next == null) {
1488 jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
1489 } else {
1490 jj_lastpos = jj_scanpos = jj_scanpos.next;
1491 }
1492 } else {
1493 jj_scanpos = jj_scanpos.next;
1494 }
1495 if (jj_rescan) {
1496 int i = 0; Token tok = token;
1497 while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
1498 if (tok != null) jj_add_error_token(kind, i);
1499 }
1500 if (jj_scanpos.kind != kind) return true;
1501 if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
1502 return false;
1503 }
1504
1505
1506 /** Get the next Token. */
1507 final public Token getNextToken() {
1508 if (token.next != null) token = token.next;
1509 else token = token.next = token_source.getNextToken();
1510 jj_ntk = -1;
1511 jj_gen++;
1512 return token;
1513 }
1514
1515 /** Get the specific Token. */
1516 final public Token getToken(int index) {
1517 Token t = token;
1518 for (int i = 0; i < index; i++) {
1519 if (t.next != null) t = t.next;
1520 else t = t.next = token_source.getNextToken();
1521 }
1522 return t;
1523 }
1524
1525 private int jj_ntk() {
1526 if ((jj_nt=token.next) == null)
1527 return (jj_ntk = (token.next=token_source.getNextToken()).kind);
1528 else
1529 return (jj_ntk = jj_nt.kind);
1530 }
1531
1532 private java.util.List jj_expentries = new java.util.ArrayList();
1533 private int[] jj_expentry;
1534 private int jj_kind = -1;
1535 private int[] jj_lasttokens = new int[100];
1536 private int jj_endpos;
1537
1538 private void jj_add_error_token(int kind, int pos) {
1539 if (pos >= 100) return;
1540 if (pos == jj_endpos + 1) {
1541 jj_lasttokens[jj_endpos++] = kind;
1542 } else if (jj_endpos != 0) {
1543 jj_expentry = new int[jj_endpos];
1544 for (int i = 0; i < jj_endpos; i++) {
1545 jj_expentry[i] = jj_lasttokens[i];
1546 }
1547 jj_entries_loop: for (java.util.Iterator it = jj_expentries.iterator(); it.hasNext();) {
1548 int[] oldentry = (int[])(it.next());
1549 if (oldentry.length == jj_expentry.length) {
1550 for (int i = 0; i < jj_expentry.length; i++) {
1551 if (oldentry[i] != jj_expentry[i]) {
1552 continue jj_entries_loop;
1553 }
1554 }
1555 jj_expentries.add(jj_expentry);
1556 break jj_entries_loop;
1557 }
1558 }
1559 if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
1560 }
1561 }
1562
1563 /** Generate ParseException. */
1564 public ParseException generateParseException() {
1565 jj_expentries.clear();
1566 boolean[] la1tokens = new boolean[77];
1567 if (jj_kind >= 0) {
1568 la1tokens[jj_kind] = true;
1569 jj_kind = -1;
1570 }
1571 for (int i = 0; i < 29; i++) {
1572 if (jj_la1[i] == jj_gen) {
1573 for (int j = 0; j < 32; j++) {
1574 if ((jj_la1_0[i] & (1<<j)) != 0) {
1575 la1tokens[j] = true;
1576 }
1577 if ((jj_la1_1[i] & (1<<j)) != 0) {
1578 la1tokens[32+j] = true;
1579 }
1580 if ((jj_la1_2[i] & (1<<j)) != 0) {
1581 la1tokens[64+j] = true;
1582 }
1583 }
1584 }
1585 }
1586 for (int i = 0; i < 77; i++) {
1587 if (la1tokens[i]) {
1588 jj_expentry = new int[1];
1589 jj_expentry[0] = i;
1590 jj_expentries.add(jj_expentry);
1591 }
1592 }
1593 jj_endpos = 0;
1594 jj_rescan_token();
1595 jj_add_error_token(0, 0);
1596 int[][] exptokseq = new int[jj_expentries.size()][];
1597 for (int i = 0; i < jj_expentries.size(); i++) {
1598 exptokseq[i] = (int[])jj_expentries.get(i);
1599 }
1600 return new ParseException(token, exptokseq, tokenImage);
1601 }
1602
1603 /** Enable tracing. */
1604 final public void enable_tracing() {
1605 }
1606
1607 /** Disable tracing. */
1608 final public void disable_tracing() {
1609 }
1610
1611 private void jj_rescan_token() {
1612 jj_rescan = true;
1613 for (int i = 0; i < 2; i++) {
1614 try {
1615 JJCalls p = jj_2_rtns[i];
1616 do {
1617 if (p.gen > jj_gen) {
1618 jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
1619 switch (i) {
1620 case 0: jj_3_1(); break;
1621 case 1: jj_3_2(); break;
1622 }
1623 }
1624 p = p.next;
1625 } while (p != null);
1626 } catch(LookaheadSuccess ls) { }
1627 }
1628 jj_rescan = false;
1629 }
1630
1631 private void jj_save(int index, int xla) {
1632 JJCalls p = jj_2_rtns[index];
1633 while (p.gen > jj_gen) {
1634 if (p.next == null) { p = p.next = new JJCalls(); break; }
1635 p = p.next;
1636 }
1637 p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
1638 }
1639
1640 static final class JJCalls {
1641 int gen;
1642 Token first;
1643 int arg;
1644 JJCalls next;
1645 }
1646
1647 }
|