java - 为什么 Rhino 对这个 javascript 不满意?

标签 java javascript antlr rhino

我已成功将我的代码与 ANTLR javascript target 中的 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 中。

这是第 56 行 org.antlr.namespace 的声明:

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 target page提到 Rhino 是一个经过测试的平台,所以我想我可能只是在滥用 Rhino。有人有什么建议吗?

最佳答案

TypeError: Cannot call property namespace in object [JavaPackage org.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 是未定义的,所以你不能给它们赋值。

关于java - 为什么 Rhino 对这个 javascript 不满意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3009523/

相关文章:

javascript - d3 转换中圆的碰撞/重叠检测

javascript - JavaScript 中的循环

与 CMake 链接的 C++ 动态和静态库

antlr - 如何使用 Java System.out.println 在解析器中直接生成 XML

java - 在 Java 弹出窗口中重用 JTextField

java - 如何从 Android 访问内置 Google Apps 脚本 'Web App'?

java - 如何阻止持久性更改数据库、JPA

java - 指定用户过滤器时出现 NoClassDefFoundError

javascript - 在 Javascript 中模仿 Java 风格的继承

用于注释的 antlr 语法以及标签之间的纯文本