2

Ext.define が javascript クラスを定義する次の形式に従う小さな JavaScript ファイルが何百もあります。Java アプリでこれらのファイルを解析し、「SOMECLASSNAME」と、「extend」や「requires」などのさまざまなプロパティの値を取得できる必要があります。コメントを無視したいのですが、機能は気にしません。

私は実際に正規表現を使用してこれをすでに実装しており、機能します。ただし、かなり脆いです。' の代わりに " を使用するファイルや、正規表現を壊す不都合に配置されたコメントなどの問題には既に対処しました。

「java javascript ast parser」などのさまざまな検索を使用して検索しましたが、私がやろうとしていることは何もないようです。私が見つけた最も近いのは、JavaでScriptEngineを使用することです。関数リストを抽出するにはどうすればよいですか? ただし、それにはスクリプトが実行可能である必要があり、これらの各ファイルは単独では実行できないようです。

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 に答える