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