我一直在使用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
}
.

我知道大卫对支持犀牛不感兴趣,但我以为我应该在这个线程上分享这个,所以其他人可能会根据需要解决问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top