Java Parser for JavaScript:列出所有函数/变量

时间:2014-04-10 10:42:26

标签: java javascript parsing google-closure-compiler nashorn

我打算在java中实现JavaScript解析器。我知道有几种方法可以做到这一点。有视图框架/引擎/解析器可以帮助正确执行,如:

  • ANTLR 3/4: 似乎v3只有一个js语法
  • Mozilla Rhino:atm我可以在initital(top-)命名空间上解析变量名。但我无法解析嵌套的范围,例如对象成员..嗯..
  • Nashorn:也许我应该试一试..?

也许:

  • closure-compiler:恕我直言,这非常好。但不适用于“非谷歌”js-code :)你必须对你的javascript源应用几种编码约定才能使它正常工作..
  • 也许可以调整Packer来做到这一点?是否有Packer ???
  • 的Java实现

EcmaScript 5.1与此article有关。它看起来很舒服。但这不是我正在寻找的东西..而且还没有java :)。

我的问题是:

解析JavaScript的最佳方法是什么?

  • (object-)函数名称
  • (对象)成员名称,例如变量

甚至可以这样做吗?

你的方法是什么?对我来说,解析JavaScript的所有特殊标记并不是必需的。重要的因素是在一致的上下文中解析函数/变量,如下所示的典型标记:

// Avoid `console` errors in browsers that lack a console.
function Object() {
        var method;
        var noop = function() {
        };
        var methods = ['assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error', 'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', 'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd', 'timeStamp', 'trace', 'warn'];
        var length = methods.length;
        var console = (window.console = window.console || {});
        while (length--) {
            method = methods[length];

            // Only stub undefined methods.
            if (!console[method]) {
                console[method] = noop;
            }
        }

    };
var obj = new Object(); 
var test = "Hello World";

解析应该能够提供这些信息:

Node: Object
Node: Object.method
Node: Object.noop
Node: Object.length
Node: Object.console
Node: Object
Node: obj
Node: test   

如果节点是函数/变量,则无需任何确定。

0 个答案:

没有答案