Вопрос

Я создавал парсеров, используя плагин 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, в моем тесте, является основной грамматикой, используемой в качестве AN Пример на сайте и генеракодицетагкод.

Любые идеи приветствуются!У меня есть из них здесь ...

Это было полезно?

Решение

Я отслеживал причину этой проблемы.'Peg.compiler.emitter.codie.pushraw.unindent ()' line 3681 Уничтожает шаблоны.Я не полностью решил, насколько важна эта функция для парсера, но кажется, что «приятно иметь».Я заменил тело функции локально, и Rhino работал, как ожидалось.

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

Я знаю, что Дэвид не заинтересован в поддержке носорога, но я думал, что должен поделиться этим в этой теме, чтобы другие могли решить проблему по мере необходимости.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top