Frage

Ich habe Parser mit einem Maven-Plugin erstellt (d. h.Aufruf von PEG.js aus Java-Code) erfolgreich mit PEG.js Version 0.6.1, aber jetzt schlägt der Versuch, auf die neue Version zu aktualisieren, mit der Fehlermeldung fehl:

sun.org.mozilla.javascript.internal.EcmaError: SyntaxError: missing ; before statement (#3213(eval)#1) in #3213(eval) at line number 1

Beim Debuggen ist mir aufgefallen, dass der Parser, der aus dem Funktionsaufruf PEG.buildParser() hervorgeht, syntaktisch falsch aussieht, während dies beim Aufruf über einen Browser natürlich nicht der Fall ist.

So nenne ich es:

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);

Wo, grammarSource, ist in meinem Testfall die grundlegende Grammatik, die als verwendet wird Beispiel auf der Website, Und PEGJS_LIB = peg-0.7.0.js.

Alle Ideen sind willkommen!Mir sind sie hier ausgegangen...

War es hilfreich?

Lösung

Ich habe die Ursache für dieses Problem herausgefunden.„PEG.compiler.emitter.Codie.pushRaw.unindent()“ Zeile 3681 zerstört die Vorlagen.Ich habe nicht vollständig festgestellt, wie wichtig diese Funktion für den Parser ist, aber sie scheint ein „nice to have“ zu sein.Ich habe den Funktionskörper lokal ersetzt und Rhino funktionierte wie erwartet.

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

Ich weiß, dass David kein Interesse daran hat, Rhino zu unterstützen, aber ich dachte, ich sollte dies in diesem Thread teilen, damit andere das Problem bei Bedarf lösen können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top