Question

J'ai construit des analyseurs en utilisant un plugin Maven (c'est-à-direappelant PEG.js à partir du code Java) en utilisant avec succès PEG.js version 0.6.1, mais maintenant, en essayant de mettre à niveau vers la nouvelle version, cela échoue avec le message d'erreur :

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

Lors du débogage, j'ai remarqué que l'analyseur qui sort de l'appel de fonction PEG.buildParser() semble syntaxiquement incorrect, alors que bien sûr, cela ne se produit pas lors de son appel depuis un navigateur.

Voici comment je l'appelle :

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

Où, grammarSource, dans mon cas de test, est la grammaire de base utilisée comme exemple sur le site, et PEGJS_LIB = peg-0.7.0.js.

Toutes les idées sont les bienvenues !Je n'en ai plus ici...

Était-ce utile?

La solution

J'ai trouvé la cause de ce problème.La ligne 3681 'PEG.compiler.emitter.Codie.pushRaw.unindent()' détruit les modèles.Je n'ai pas entièrement déterminé l'importance de cette fonction pour l'analyseur, mais elle semble être « agréable à avoir ».J'ai remplacé le corps de la fonction localement et Rhino a fonctionné comme prévu.

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

Je sais que David n'est pas intéressé à prendre en charge Rhino, mais j'ai pensé que je devrais partager cela sur ce fil afin que d'autres puissent résoudre le problème si nécessaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top