我有数百个小的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);
}
});
答案 0 :(得分:0)
由于您没有尝试解析完整的JavaScript语言,您可能不需要一个完整的JavaScript引擎。你看过ANTLR了吗?正如您可以将问题简化为充满属性的手(如果我理解正确的话),我认为您应该能够为您的问题编写或多或少的简单语法。