簡體   English   中英

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

[英]How to build PEG.js 0.7.0 parser using Rhino (Java SE 6 ScriptEngine API)

我一直在使用Maven插件(即從Java代碼調用PEG.js)並成功使用PEG.js 0.6.1版構建解析器,但是現在嘗試升級到新版本時,它失敗並顯示錯誤消息:

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網站中用作示例的基本語法, PEGJS_LIB = peg-0.7.0.js

歡迎任何想法! 我在這里用光了...

我跟蹤了此問題的原因。 'PEG.compiler.emitter.Codie.pushRaw.unindent()'行3681破壞了模板。 我還沒有完全確定此功能對解析器的重要性,但是看起來“很不錯”。 我在本地替換了函數的主體,Rhino正常工作。

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

我知道David對支持Rhino不感興趣,但是我認為我應該在此主題上分享這一點,以便其他人可以根據需要解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM