Pergunta

Estou construindo analisadores usando um plug-in Maven (ou seja,chamando PEG.js do código Java) usando PEG.js versão 0.6.1 com sucesso, mas agora, ao tentar atualizar para a nova versão, está falhando com a mensagem de erro:

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

Durante a depuração, notei que o analisador que sai da chamada de função PEG.buildParser() parece sintaticamente errado, embora é claro que isso não acontece ao chamá-lo de um navegador.

Aqui está como estou chamando:

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

Onde, grammarSource, no meu caso de teste, é a gramática básica usada como exemplo no site, e PEGJS_LIB = peg-0.7.0.js.

Qualquer ideia é bem-vinda!Já estou sem eles aqui...

Foi útil?

Solução

Eu localizei a causa desse problema.A linha 'PEG.compiler.emitter.Codie.pushRaw.unindent()' 3681 destrói os modelos.Não determinei totalmente o quão importante é essa função para o analisador, mas parece um 'bom ter'.Substituí o corpo da função localmente e o Rhino funcionou conforme o esperado.

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

Eu sei que David não está interessado em apoiar o Rhino, mas pensei em compartilhar isso neste tópico para que outros possam resolver o problema conforme necessário.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top