如何使用rhino构建peg.js 0.7.0解析器(Java SE 6 Scriptengine API)
-
13-12-2019 - |
题
我一直在使用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
在调试时,我注意到了挂钩中出来的解析器.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
。
欢迎任何想法!我在这里用完了...
解决方案
我跟踪了这个问题的原因。'peg.compiler.emitter.codie.pushraw.unindent()'行3681销毁模板。我还没有完全确定这个函数是针对解析器的重要性,但似乎是一个“很高兴”。我替换了当地的函数的身体,犀牛按预期工作。
function unindent(code, level, unindentFirst) {
return code
}
.
我知道大卫对支持犀牛不感兴趣,但我以为我应该在这个线程上分享这个,所以其他人可能会根据需要解决问题。
不隶属于 StackOverflow