该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-08-25
Thanks Readonly for the code.
c.getParser() 这一步是combination,也耗费一点时间。 我修改了一下test code,因为我没有引入antlr。就测了一下不需要combination的情况。 long start = System.currentTimeMillis();; for(int i = 0; i<20000; i++); { Calculator c = new Calculator();; Object result = Parsers.runParser(src, c.getParser();, "Test");; } System.out.println(System.currentTimeMillis(); - start);; Calculator c = new Calculator();; Parser p = c.getParser();; start = System.currentTimeMillis();; for(int i = 0; i<20000; i++); { Object result = Parsers.runParser(src, p, "Test");; } System.out.println(System.currentTimeMillis(); - start);; 20109 11250 2:1 左右。 这么说来, JParsec : Antlr 应该是 3 : 1, 2.5 : 1 左右。 |
|
返回顶楼 | |
发表时间:2006-08-25
松了一口气.看来性能差距还可以接受.本来就没有想过组合子的效率会比代码生成好.这个差距还算让我欣慰.当然,要是能再优化以下代码,把差距控制在50%以内就完美了。
还有,可能不同jvm的速度也会有差异。jparsec内部在back-track的时候会生成很多错误对象,这些错误对象只有到真正报错的时候才有用,所以当最终parse成功的时候,错误对象的创建都是浪费.我期望在gc优化比较好的jvm上这些错误对象的影响被大幅减小. |
|
返回顶楼 | |
发表时间:2006-08-28
一直很欣赏ajoo
从搽干劲 yan开始 希望有空可以加入 |
|
返回顶楼 | |