Pregunta

He estado construyendo analizadores utilizando un plugin Maven (es decir, llame a PEG.JS desde el código JAVA) con éxito usando PEG.JS versión 0.6.1, pero ahora mientras intenta actualizar a la nueva versión, no está fallando con el mensaje de error:

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

Mientras que la depuración me he dado cuenta de que el analizador que sale de la llamada de la función PEG.BUILDPARSER () se ve sintácticamente incorrecta, mientras que, por supuesto, no sucede al llamarlo de un navegador.

Aquí es cómo lo estoy llamando:

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

Donde, grammarSource, en mi estuche de prueba, es la gramática básica utilizada como una Ejemplo en el sitio web , y PEGJS_LIB = peg-0.7.0.js.

¡Cualquier idea es bienvenida!Me he quedado sin ellos aquí ...

¿Fue útil?

Solución

He rastreado la causa de este problema.'PEG.COMPILER.EMITTER.CODIE.PUSHRAW.UNINDENT ()' LINE 3681 Destruye las plantillas.No he determinado completamente lo importante que es esta función para el analizador, pero parece que un "agradable tener".Reemplacé el cuerpo de la función localmente y Rhino trabajó como se esperaba.

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

Sé que David no está interesado en apoyar a Rhino, pero pensé que debería compartir esto en este hilo para que otros puedan resolver el problema según sea necesario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top