需要解析器用于Javascript(在Java应用程序中使用)以获取有关Ext.define对象的基本属性值信息

时间:2013-06-17 22:44:06

标签: java javascript parsing

我有数百个小的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);
    }
});

1 个答案:

答案 0 :(得分:0)

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