我已经使用PEG.js 0.6.1版本成功地构建了使用Maven的解析器(即从Java代码中调用PEG.js ),但现在尝试升级到新版本时,它失败了,错误消息如下:
`sun.org.mozilla.javascript.internal.EcmaError: SyntaxError: missing ; before statement (#3213(eval)#1) in #3213(eval) at line number 1`
在调试过程中,我注意到从PEG.buildParser()函数调用中得到的解析器在语法上看起来是错误的,而从浏览器调用它时当然不会发生这种错误。
我是这样称呼它的:
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine jsEngine = manager.getEngineByName("JavaScript");
jsEngine.eval(new InputStreamReader(this.getClass().getResourceAsStream(PEGJS_LIB)));
Invocable invok = (Invocable) jsEngine;
Object peg = jsEngine.get("PEG");
invok.invokeMethod(peg, "buildParser", grammarSource);
其中,在我的测试用例中,grammarSource
是用作example in the website的基本语法,PEGJS_LIB = peg-0.7.0.js
。
欢迎任何想法!我这里已经用完了..。
发布于 2012-10-05 12:21:09
我找到了这个问题的原因。'PEG.compiler.emitter.Codie.pushRaw.unindent()‘第3681行销毁模板。我还没有完全确定这个函数对解析器有多重要,但它似乎是一个“很好的拥有”。我在本地替换了函数体,Rhino按预期工作。
function unindent(code, level, unindentFirst) {
return code
}
我知道David对支持Rhino不感兴趣,但我想我应该在这个帖子上分享这篇文章,这样其他人就可以根据需要解决这个问题。
https://stackoverflow.com/questions/11708721
复制