5

いくつかのブラウザーで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.namespace56行目の宣言は次のとおりです。

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 を悪用している可能性があると考えています。誰にもヒントはありますか?

4

1 に答える 1

5

TypeError:オブジェクト[JavaPackageorg.antlr]のプロパティ名前空間を呼び出すことができません。

org.antlrをJavaパッケージとして受け取り、オブジェクトの名前空間を呼び出そうとします。したがって、このように関数を定義することはできません。

関数の名前空間の各部分をそれ自体で定義することは、私にとってはうまくいきました。

org = new function() {//Define the structure one piece at a time
    this.antlr = new function(){
         this.namespace = ''; 
         return this;
    };
    return this;
};
org.antlr.namespace = function() {print('Help'); return 0;}

申し訳ありませんが、これ以上詳細な回答はできません。javascriptについての情報がわかりません^^。orgとorg.antlrは未定義なので、割り当てることはできないと思います。

于 2010-06-09T20:59:18.577 に答える