Я создавал синтаксические анализаторы с помощью плагина Maven (т. е. вызывая PEG.js из кода Java), успешно используя 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
.
Любые идеи приветствуются! У меня они закончились здесь...