[ https://issues.apache.org/jira/browse/JEXL-97?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12832418#action_12832418 ]
Henri Biestro commented on JEXL-97: ----------------------------------- I've been trying to reproduce this behavior on 2.x trunk with this code added as a method in IssuesTest.java: {code} public void test97() throws Exception { JexlContext ctxt = new MapContext(); for(char v = 'a'; v <= 'z'; ++v) { ctxt.set(Character.toString(v), 10); } String input = "(((((((((((((((((((((((((z+y)/x)*w)-v)*u)/t)-s)*r)/q)+p)-o)*n)-m)+l)*k)+j)/i)+h)*g)+f)/e)+d)-c)/b)+a)"; JexlEngine jexl = new JexlEngine(); Expression script; // Make sure everything is loaded... long start = System.nanoTime(); script = jexl.createExpression(input); Object value = script.evaluate(ctxt); assertEquals(Integer.valueOf(11), value); long end = System.nanoTime(); System.out.printf("Parse took %.3f seconds\n", (end-start)/1e+9); } {code} Runs in .003s on my box (os x, 2.8Ghz, jdk1.5 and jdk1.6). Can you check again and/or upload a modified test that exhibits the performance issue you describe? The code you originally posted can only run on JEXL1.x (ExpressionFactory does not exist in jexl2). Thanks > JEXL parses long expressions with lots of parenthesis slowly > ------------------------------------------------------------ > > Key: JEXL-97 > URL: https://issues.apache.org/jira/browse/JEXL-97 > Project: Commons JEXL > Issue Type: Bug > Affects Versions: 2.0, 1.1, 1.0 > Environment: Java > Reporter: Jeff Ichnowski > Priority: Minor > Attachments: proposed.patch > > > JEXL's parser uses an unbounded JavaCC LOOKAHEAD to distinguish assignment > expressions from other expressions. The result is certain expressions take > exponential time to parse. The example snippet below demonstrates the > problem. On my machine parsing the expression below takes ~120 seconds. > Changing the parser to remove the LOOKAHEAD can get this to parse in > milliseconds. The lookahead appears to be in all versions of the parser > source. > import org.apache.commons.jexl.Expression; > import org.apache.commons.jexl.ExpressionFactory; > public class SlowParse { > public static void main(String[] args) throws Exception { > String input = > > "(((((((((((((((((((((((((z+y)/x)*w)-v)*u)/t)-s)*r)/q)+p)-o)*n)-m)+l)*k)+j)/i)+h)*g)+f)/e)+d)-c)/b)+a)"; > // Make sure everything is loaded... > Expression expr = ExpressionFactory.createExpression(input); > long start = System.nanoTime(); > expr = ExpressionFactory.createExpression(input); > long end = System.nanoTime(); > System.out.printf("Parse took %.1f seconds\n", (end-start)/1e+9); > } > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.