首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Rhino构建PEG.js 0.7.0解析器(JavaSE6JavaAPI)

如何使用Rhino构建PEG.js 0.7.0解析器(JavaSE6JavaAPI)
EN

Stack Overflow用户
提问于 2012-07-29 11:05:32
回答 1查看 412关注 0票数 2

我已经使用PEG.js 0.6.1版本成功地构建了使用Maven的解析器(即从Java代码中调用PEG.js ),但现在尝试升级到新版本时,它失败了,错误消息如下:

代码语言:javascript
运行
AI代码解释
复制
`sun.org.mozilla.javascript.internal.EcmaError: SyntaxError: missing ; before statement (#3213(eval)#1) in #3213(eval) at line number 1` 

在调试过程中,我注意到从PEG.buildParser()函数调用中得到的解析器在语法上看起来是错误的,而从浏览器调用它时当然不会发生这种错误。

我是这样称呼它的:

代码语言:javascript
运行
AI代码解释
复制
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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-05 12:21:09

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

代码语言:javascript
运行
AI代码解释
复制
function unindent(code, level, unindentFirst) {
  return code
}

我知道David对支持Rhino不感兴趣,但我想我应该在这个帖子上分享这篇文章,这样其他人就可以根据需要解决这个问题。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11708721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档