Author: markt Date: Sat May 17 10:33:43 2008 New Revision: 657404 URL: http://svn.apache.org/viewvc?rev=657404&view=rev Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=44994 Correct BNF grammar so ${0 lt a ? 1 lt a ? "many": "one": "none"} does not throw an exception The patch is bigger than I would like due to the code generation tools used
Modified: tomcat/trunk/java/org/apache/el/parser/ELParser.html tomcat/trunk/java/org/apache/el/parser/ELParser.java tomcat/trunk/java/org/apache/el/parser/ELParser.jjt tomcat/trunk/java/org/apache/el/parser/ELParserConstants.java tomcat/trunk/java/org/apache/el/parser/ELParserTokenManager.java tomcat/trunk/java/org/apache/el/parser/ParseException.java Modified: tomcat/trunk/java/org/apache/el/parser/ELParser.html URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/parser/ELParser.html?rev=657404&r1=657403&r2=657404&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/el/parser/ELParser.html (original) +++ tomcat/trunk/java/org/apache/el/parser/ELParser.html Sat May 17 10:33:43 2008 @@ -51,7 +51,7 @@ <TR> <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod6">Choice</A></TD> <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> -<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod7">Or</A> ( <QUESTIONMARK> <A HREF="#prod7">Or</A> <COLON> <A HREF="#prod6">Choice</A> )*</TD> +<TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod7">Or</A> ( <QUESTIONMARK> <A HREF="#prod6">Choice</A> <COLON> <A HREF="#prod6">Choice</A> )*</TD> </TR> <TR> <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod7">Or</A></TD> Modified: tomcat/trunk/java/org/apache/el/parser/ELParser.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/parser/ELParser.java?rev=657404&r1=657403&r2=657404&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/el/parser/ELParser.java (original) +++ tomcat/trunk/java/org/apache/el/parser/ELParser.java Sat May 17 10:33:43 2008 @@ -27,15 +27,6 @@ throw new ELException(pe.getMessage()); } } - - public static void main(String[] argv) throws Exception { - String[] str = { "${foo()}", "${fn.fn:foo() ? a : b}", "${fn:foo() ? (fn_af.f:fd() ? a : b) : b}", "${a.b.c ? a : b}" }; - for (int i = 0; i < str.length; i++) { - SimpleNode sn = (SimpleNode) ELParser.parse(str[i]); - System.out.println("====\n" + str[i]); - sn.dump("\t"); - } - } /* * CompositeExpression @@ -216,31 +207,31 @@ break label_2; } jj_consume_token(QUESTIONMARK); - Or(); + Choice(); jj_consume_token(COLON); - AstChoice jjtn001 = new AstChoice(JJTCHOICE); - boolean jjtc001 = true; - jjtree.openNodeScope(jjtn001); + AstChoice jjtn001 = new AstChoice(JJTCHOICE); + boolean jjtc001 = true; + jjtree.openNodeScope(jjtn001); try { Choice(); } catch (Throwable jjte001) { - if (jjtc001) { - jjtree.clearNodeScope(jjtn001); - jjtc001 = false; - } else { - jjtree.popNode(); - } - if (jjte001 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte001;} - } - if (jjte001 instanceof ParseException) { - {if (true) throw (ParseException)jjte001;} - } - {if (true) throw (Error)jjte001;} + if (jjtc001) { + jjtree.clearNodeScope(jjtn001); + jjtc001 = false; + } else { + jjtree.popNode(); + } + if (jjte001 instanceof RuntimeException) { + {if (true) throw (RuntimeException)jjte001;} + } + if (jjte001 instanceof ParseException) { + {if (true) throw (ParseException)jjte001;} + } + {if (true) throw (Error)jjte001;} } finally { - if (jjtc001) { - jjtree.closeNodeScope(jjtn001, 3); - } + if (jjtc001) { + jjtree.closeNodeScope(jjtn001, 3); + } } } } Modified: tomcat/trunk/java/org/apache/el/parser/ELParser.jjt URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/parser/ELParser.jjt?rev=657404&r1=657403&r2=657404&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/el/parser/ELParser.jjt (original) +++ tomcat/trunk/java/org/apache/el/parser/ELParser.jjt Sat May 17 10:33:43 2008 @@ -104,7 +104,7 @@ */ void Choice() : {} { - Or() (<QUESTIONMARK> Or() <COLON> Choice() #Choice(3))* + Or() (<QUESTIONMARK> Choice() <COLON> Choice() #Choice(3))* } /* Modified: tomcat/trunk/java/org/apache/el/parser/ELParserConstants.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/parser/ELParserConstants.java?rev=657404&r1=657403&r2=657404&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/el/parser/ELParserConstants.java (original) +++ tomcat/trunk/java/org/apache/el/parser/ELParserConstants.java Sat May 17 10:33:43 2008 @@ -19,131 +19,126 @@ public interface ELParserConstants { - int EOF = 0; - - int LITERAL_EXPRESSION = 1; - - int START_DYNAMIC_EXPRESSION = 2; - - int START_DEFERRED_EXPRESSION = 3; - - int INTEGER_LITERAL = 9; - - int FLOATING_POINT_LITERAL = 10; - - int EXPONENT = 11; - - int STRING_LITERAL = 12; - - int BADLY_ESCAPED_STRING_LITERAL = 13; - - int TRUE = 14; - - int FALSE = 15; - - int NULL = 16; - - int END_EXPRESSION = 17; - - int DOT = 18; - - int LPAREN = 19; - - int RPAREN = 20; - - int LBRACK = 21; - - int RBRACK = 22; - - int COLON = 23; - - int COMMA = 24; - - int GT0 = 25; - - int GT1 = 26; - - int LT0 = 27; - - int LT1 = 28; - - int GE0 = 29; - - int GE1 = 30; - - int LE0 = 31; - - int LE1 = 32; - - int EQ0 = 33; - - int EQ1 = 34; - - int NE0 = 35; - - int NE1 = 36; - - int NOT0 = 37; - - int NOT1 = 38; - - int AND0 = 39; - - int AND1 = 40; - - int OR0 = 41; - - int OR1 = 42; - - int EMPTY = 43; - - int INSTANCEOF = 44; - - int MULT = 45; - - int PLUS = 46; - - int MINUS = 47; - - int QUESTIONMARK = 48; - - int DIV0 = 49; - - int DIV1 = 50; - - int MOD0 = 51; - - int MOD1 = 52; - - int IDENTIFIER = 53; - - int NAMESPACE = 54; - - int FUNCTIONSUFFIX = 55; - - int IMPL_OBJ_START = 56; - - int LETTER = 57; - - int DIGIT = 58; - - int ILLEGAL_CHARACTER = 59; - - int DEFAULT = 0; - - int IN_EXPRESSION = 1; - - String[] tokenImage = { "<EOF>", "<LITERAL_EXPRESSION>", "\"${\"", - "\"#{\"", "\"\\\\\"", "\" \"", "\"\\t\"", "\"\\n\"", "\"\\r\"", - "<INTEGER_LITERAL>", "<FLOATING_POINT_LITERAL>", "<EXPONENT>", - "<STRING_LITERAL>", "<BADLY_ESCAPED_STRING_LITERAL>", "\"true\"", - "\"false\"", "\"null\"", "\"}\"", "\".\"", "\"(\"", "\")\"", - "\"[\"", "\"]\"", "\":\"", "\",\"", "\">\"", "\"gt\"", "\"<\"", - "\"lt\"", "\">=\"", "\"ge\"", "\"<=\"", "\"le\"", "\"==\"", - "\"eq\"", "\"!=\"", "\"ne\"", "\"!\"", "\"not\"", "\"&&\"", - "\"and\"", "\"||\"", "\"or\"", "\"empty\"", "\"instanceof\"", - "\"*\"", "\"+\"", "\"-\"", "\"?\"", "\"/\"", "\"div\"", "\"%\"", - "\"mod\"", "<IDENTIFIER>", "<NAMESPACE>", "<FUNCTIONSUFFIX>", - "\"#\"", "<LETTER>", "<DIGIT>", "<ILLEGAL_CHARACTER>", }; + int EOF = 0; + int LITERAL_EXPRESSION = 1; + int START_DYNAMIC_EXPRESSION = 2; + int START_DEFERRED_EXPRESSION = 3; + int INTEGER_LITERAL = 9; + int FLOATING_POINT_LITERAL = 10; + int EXPONENT = 11; + int STRING_LITERAL = 12; + int BADLY_ESCAPED_STRING_LITERAL = 13; + int TRUE = 14; + int FALSE = 15; + int NULL = 16; + int END_EXPRESSION = 17; + int DOT = 18; + int LPAREN = 19; + int RPAREN = 20; + int LBRACK = 21; + int RBRACK = 22; + int COLON = 23; + int COMMA = 24; + int GT0 = 25; + int GT1 = 26; + int LT0 = 27; + int LT1 = 28; + int GE0 = 29; + int GE1 = 30; + int LE0 = 31; + int LE1 = 32; + int EQ0 = 33; + int EQ1 = 34; + int NE0 = 35; + int NE1 = 36; + int NOT0 = 37; + int NOT1 = 38; + int AND0 = 39; + int AND1 = 40; + int OR0 = 41; + int OR1 = 42; + int EMPTY = 43; + int INSTANCEOF = 44; + int MULT = 45; + int PLUS = 46; + int MINUS = 47; + int QUESTIONMARK = 48; + int DIV0 = 49; + int DIV1 = 50; + int MOD0 = 51; + int MOD1 = 52; + int IDENTIFIER = 53; + int NAMESPACE = 54; + int FUNCTIONSUFFIX = 55; + int IMPL_OBJ_START = 56; + int LETTER = 57; + int DIGIT = 58; + int ILLEGAL_CHARACTER = 59; + + int DEFAULT = 0; + int IN_EXPRESSION = 1; + + String[] tokenImage = { + "<EOF>", + "<LITERAL_EXPRESSION>", + "\"${\"", + "\"#{\"", + "\"\\\\\"", + "\" \"", + "\"\\t\"", + "\"\\n\"", + "\"\\r\"", + "<INTEGER_LITERAL>", + "<FLOATING_POINT_LITERAL>", + "<EXPONENT>", + "<STRING_LITERAL>", + "<BADLY_ESCAPED_STRING_LITERAL>", + "\"true\"", + "\"false\"", + "\"null\"", + "\"}\"", + "\".\"", + "\"(\"", + "\")\"", + "\"[\"", + "\"]\"", + "\":\"", + "\",\"", + "\">\"", + "\"gt\"", + "\"<\"", + "\"lt\"", + "\">=\"", + "\"ge\"", + "\"<=\"", + "\"le\"", + "\"==\"", + "\"eq\"", + "\"!=\"", + "\"ne\"", + "\"!\"", + "\"not\"", + "\"&&\"", + "\"and\"", + "\"||\"", + "\"or\"", + "\"empty\"", + "\"instanceof\"", + "\"*\"", + "\"+\"", + "\"-\"", + "\"?\"", + "\"/\"", + "\"div\"", + "\"%\"", + "\"mod\"", + "<IDENTIFIER>", + "<NAMESPACE>", + "<FUNCTIONSUFFIX>", + "\"#\"", + "<LETTER>", + "<DIGIT>", + "<ILLEGAL_CHARACTER>", + }; } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]