2

我有数百个遵循以下格式的小型 javascript 文件,其中 Ext.define 定义了一个 javascript 类。我需要能够在 Java 应用程序中解析这些文件并获取“SOMECLASSNAME”以及“extend”和“requires”等各种属性的值。我想忽略评论,我不关心功能。

我实际上已经使用正则表达式实现了这个并且它有效。然而,它相当脆弱。我已经处理了诸如使用 " 而不是 ' 的文件以及不方便地放置破坏正则表达式的注释之类的问题。我真的很想使用不那么脆弱的解决方案来做到这一点,这意味着使用 javascript 解析器。

我已经使用诸如“java javascript ast parser”之类的各种搜索进行了搜索,但似乎没有什么适合我正在尝试做的事情。我发现最接近的是Using ScriptEngine in java, How can I extract function list? 但这似乎要求脚本是可运行的,并且这些文件中的每一个都不能单独运行。

Ext.define('SOMECLASSNAME', {
    extend: 'JSCommon.remoting.RESTService',
    alternateClassName: 'AccountSettingService',

    requires: [
        'JSCommon.security.Privilege',
        'JSCommon.security.PrivilegeConstants',
        'JSCommon.security.store.UIPrivilege',
        'JSCommon.util.StringUtil'
    ],

    statics: {
        /**
         * Creates and returns a new instance of the ReportsService
         */
        getNewInstance: function() {
            return Ext.create('JSCommon.acctSetting.AccountSettingService');
        }
    },

    config: {
        customer: 'abc',
        service: 'companySetting'
    },

    constructor: function(config) {
        this.initConfig(config);
        return this;
    },

    getCompanyID: function() {
        return PlatformCache.getCompanyContextByAttribute('id');
    },

    getAccountSetting: function(onResult, onFault) {
        var me = this;
        var svc = RESTService.getNewInstance();
        var ops = Ext.create('JSCommon.remoting.URLElements');
        var params = Ext.create('JSCommon.remoting.URLParams');

        params.add('action', 'find');
        var postbody = {
        };

        svc.sendGETRequest(svc.getURL(this.getCustomer(), me.getCompanyID(), me.getService(), ops, params), postbody, onResult, onFault);
    }
});
4

1 回答 1

0

由于您不尝试解析完整的 javascript 语言,因此您可能不需要完整的 javascript 引擎。你看过ANTLR吗?因为您可以将问题简化为充满属性的手(如果我理解正确的话),我认为您应该能够为您的问题编写或多或少简单的语法。

于 2013-11-13T10:03:59.980 回答