gpt4 book ai didi

javascript - 如何使用 Rhino(Java SE 6 ScriptEngine API)构建 PEG.js 0.7.0 解析器

转载 作者:行者123 更新时间:2023-12-04 17:52:38 25 4
gpt4 key购买 nike

我一直在使用 Maven 插件(即从 Java 代码调用 PEG.js)成功地使用 PEG.js 版本 0.6.1 构建解析器,但现在在尝试升级到新版本时失败并显示错误消息:


sun.org.mozilla.javascript.internal.EcmaError: SyntaxError: missing ;在第 1 行的 #3213(eval) 中的语句 (#3213(eval)#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

欢迎任何想法!我已经用完了...

最佳答案

我查到了这个问题的原因。 “PEG.compiler.emitter.Codie.pushRaw.unindent()”第 3681 行破坏了模板。我还没有完全确定这个函数对解析器有多重要,但它似乎是一个“不错的选择”。我在本地替换了函数体,Rhino 按预期工作。

function unindent(code, level, unindentFirst) {
return code
}

我知道 David 对支持 Rhino 不感兴趣,但我认为我应该在此线程上分享它,以便其他人可以根据需要解决问题。

关于javascript - 如何使用 Rhino(Java SE 6 ScriptEngine API)构建 PEG.js 0.7.0 解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11708721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com