Domanda

Ho costruito parsers utilizzando un plugin di Maven (cioè chiamando PEG.JS dal codice Java) utilizzando correttamente la versione di PEG.JS 0.6.1, ma ora durante il tentativo di eseguire l'aggiornamento alla nuova versione, è fallito con il messaggio di errore:

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

Durante il debugging che ho notato che il parser che esce dalla funzione di funzione PEG.BuildParser () sembra sintatticamente sbagliato, mentre ovviamente non accade mentre lo chiamano da un browser.

Ecco come sto chiamando:

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

Dove, grammarSource, nel mio test-case, è la grammatica di base utilizzata come Esempio nel sito Web e PEGJS_LIB = peg-0.7.0.js.

Qualsiasi idea è benvenuta!Li ho esauriti qui ...

È stato utile?

Soluzione

Ho rintracciato la causa per questo problema.'Peg.compiler.emitter.codie.pushraw.unindent ()' Line 3681 distrugge i modelli.Non ho completamente determinato quanto sia importante questa funzione per il parser, ma sembra un 'bello da avere'.Ho sostituito il corpo della funzione localmente e il Rhino ha lavorato come previsto.

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

Conosco David non è interessato a sostenere il rinoceronte, ma pensavo di poter condividere questo su questo filo in modo che altri potrebbero essere in grado di risolvere il problema secondo necessità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top