いくつかのブラウザーでANTLR javascript ターゲットの javascript ライブラリを使用してコードを正常に使用していますが、サーバーで Rhino を使用したいのですが、問題が発生しています。Rhino 1.7R2 リリースの js-14.jar ファイルを参照する単純な Java コードがいくつかあります。
Context context = Context.enter();
Scriptable scope = context.initStandardObjects();
context.evaluateReader(scope, new FileReader("C:\\antlr3-all.js"), "antlr", 1, null);
EcmaError
これは、次のメッセージで失敗します。
TypeError: Cannot call property namespace in object [JavaPackage org.antlr].
It is not a function, it is "object". (antlr#259)
それが参照しているJavaScript行は次のとおりです。
org.antlr.namespace("org.antlr.runtime.tree");
これorg.antlr.namespace
は、ファイルの前の方で関数として宣言されているため、これについてどう考えればよいかわかりません。また、「名前空間」がJavaScriptまたは特にRhinoの予約語であることもわかりません。
org.antlr.namespace
56行目の宣言は次のとおりです。
org.antlr.namespace = function() {
var a=arguments, o=null, i, j, d;
for (i=0; i<a.length; i=i+1) {
d=a[i].split(".");
o=org.antlr.global;
// ANTLR is implied, so it is ignored if it is included
for (j=0; j<d.length; j=j+1) {
o[d[j]]=o[d[j]] || {};
o=o[d[j]];
}
}
return o;
};
ANTLR javascriptのターゲット ページには、Rhino はテスト済みのプラットフォームであると記載されているため、Rhino を悪用している可能性があると考えています。誰にもヒントはありますか?