一种基于描述语言生成多种编程语言的应用的方法及装置的制作方法

文档序号:6372051阅读:211来源:国知局
专利名称:一种基于描述语言生成多种编程语言的应用的方法及装置的制作方法
技术领域
本发明涉及计算机软件技术领域,特别是涉及一种基于描述语言生成多种编程语言的应用的方法及装置。
背景技术
应用在计算机软件技术领域,一般指的是软件平台上的应用软件,也是需要借助于平台提供给用户使用的软件,比如,安卓应用、网站应用等。一般情况下,需要给同一功能提供不同编程语言的应用,比如一个API (Application Programming Interface,应用程序编程接口)往往会提供多种编程语言的SDK (Software Development Kit,软件开发工具包),而这些SDK只是编程语言不一样而已,功能都一样。又比如手机客户端,如果想让手机客户端在IOS (苹果操作系统,iPhone Operating System)上运行,则需要使用object C编程语言开发;如果又想让手机客户端在ANDROID (安卓)系统上运行,则又需要使用JAVA编程语言开发一次。而这两种不同编程语言的手机客户端,功能是一样的。发明人在研究过程中发现,现有技术中,针对同一功能,需要针对不同编程语言分别进行多次开发,才能得到每种编程语言对应的应用。这不仅使得多种编程语言的应用开发成本大,开发时间长,以及浪费人力资源,更重要的是,因为其开发成本大和开发时间长,也会导致多种编程语言的应用的生成效率低下,进一步的也会使得后续用户在下载应用时的下载效率低下。

发明内容
本发明所要解决的技术问题是,提供一种基于描述语言生成多种编程语言的应用的方法及装置,以解决现有技术中由于多种编程语言的应用开发成本大,开发时间长,以及浪费人力资源,导致的多种编程语言的应用的生成效率低下,以及后续用户在下载应用时的下载效率低下的技术问题。为解决上述技术问题,本发明实施例提供了一种基于描述语言生成多种编程语言的应用的方法,该方法包括获取预先定义的与所述应用对应的描述语言及描述语言解析规则;采用所述描述语言解析规则和多种编程语言的词典将所述描述语言解析为所述多种编程语言的应用。优选的,所述采用所述描述语言解析规则和多种编程语言的词典将所述描述语言解析为所述多种编程语言的应用,具体包括按照所述描述语言解析规则及所述多种编程语言的词典,将所述描述语言解析成具有对应关系的数据结构,所述具有对应关系的数据结构对应于所述应用的可变部分;获取所述多种编程语言对应的多个模板压缩包,并依据所述模板压缩包中的配置文件和所述具有对应关系的数据结构生成多种编程语言的应用。优选的,所述具有对应关系的数据结构为数组,则所述将所述描述语言解析成具有对应关系的数据结构,具体包括依据所述应用的预先定义的描述语言生成单词列表;通过正则表达式识别所述单词列表中的单词;使用所述多种编程语言的词典翻译所述单词得到翻译结果;将翻译结果按照规定格式生成数组。优选的,所述依据所述模板压缩包中的配置文件和所述具有对应关系的数据结构生成多种编程语言的应用,具体包括获取当前模板压缩包中的配置文件和模板文件,所述配置文件表示模板文件在所述当前模板压缩包中的第一存放位置,和模板文件解析后生成的程序文件在所述当前模板压缩包中的第二存放位置; 依据所述具有对应关系的数据结构将所述模板文件解析为可执行代码;运行所述可执行代码以获得运行结果文件;将所述运行结果文件存放至所述当前模板压缩包中; 删除所述当前模板压缩包中的配置文件和模板文件。优选的,在获取当前模板压缩包中的配置文件和模板文件之前,还包括将原始模板压缩包复制至临时目录;将所述临时目录下的副本作为所述当前模板压缩包。优选的,所述编程语言为超文本预处理PHP编程语言,所述模板文件采用PHP编程语言编译,则所述依据所述具有对应关系的数据结构将所述模板文件解析为可执行代码,具体包括将所述模板文件中的PHP标签替换为指定的其他标记;将所述模板文件中的模板标签替换为所述PHP标签;将所述指定的其他标记替换为所述PHP标签。优选的,在采用所述多种编程语言的词典将所述描述语言解析为所述多种编程语言的应用之后,还包括接收客户端请求下载所述多种编程语言的应用的下载请求;依据所述客户端使用的编程语言将对应的编程语言的应用发送给所述客户端。优选的,所述编程语目包括但不限于PHP编程语目、JAVA语目、C/C++语目、NET语目、Ruby语目和Python语目。本发明实施例还提供了一种基于描述语言生成多种编程语言的应用的装置,包括获取模块,用于获取预先定义的与所述应用对应的描述语言及描述语言解析规则;解析模块,用于采用所述描述语言解析规则和多种编程语言的词典将所述描述语言解析为所述多种编程语言的应用。优选的,所述解析模块具体包括第一解析子模块,用于按照所述描述语言解析规则及所述多种编程语言的词典,将所述描述语言解析成具有对应关系的数据结构,所述具有对应关系的数据结构对应于所述应用的可变部分;
获取子模块,用于获取所述多种编程语言对应的多个模板压缩包;生成应用子模块,用于依据所述模板压缩包中的配置文件和所述具有对应关系的数据结构生成多种编程语言的应用。优选的,所述第一解析子模块具体包括生成单词列表子模块,用于依据所述应用的预先定义的描述语言生成单词列表;识别子模块,用于通过正则表达式识别所述单词列表中的单词;翻译子模块,用于使用所述多种编程语言的词典翻译所述单词得到翻译结果;生成数组子模块,用于将翻译结果按照规定格式生成数组。 优选的,所述生成应用子模块具体包括获取文件子模块,用于获取当前模板压缩包中的配置文件和模板文件,所述配置文件表示模板文件在所述当前模板压缩包中的第一存放位置,和模板文件解析后生成的程序文件在所述当前模板压缩包中的第二存放位置;第二解析子模块,用于依据所述具有对应关系的数据结构将所述模板文件解析为可执行代码;运行代码子模块,用于运行所述可执行代码以获得运行结果文件;存放子模块,用于将所述运行结果文件存放至所述当前模板压缩包中;删除子模块,用于删除所述当前模板压缩包中的配置文件和模板文件。优选的,所述生成应用子模块还包括复制子模块,用于将原始模板压缩包复制至临时目录;确定子模块,用于将所述临时目录下的副本作为所述当前模板压缩包。优选的,所述第二解析子模块具体包括第一替换子模块,用于将所述模板文件中的PHP标签替换为指定的其他标记;第二替换子模块,用于将所述模板文件中的模板标签替换为所述PHP标签;第三替换子模块,用于将所述指定的其他标记替换为所述PHP标签。优选的,还包括接收下载请求模块,用于接收客户端请求下载所述多种编程语言的应用的下载请求;发送模块,用于依据所述客户端使用的编程语言将对应的编程语言的应用发送给所述客户端。从上述的技术方案可以看出,本发明实施例中在本实施例中,只需要通过预先定义描述语言及描述语言解析规则,就可以利用多种编程语言的词典来生成多种编程语言的应用,这就节省了多次编写多种编程语言的应用的时间和资源,从而也能够提高生成多种编程语言的应用的效率。


为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图I为本发明的方法实施例I的流程图;图2为本发明的方法实施例2的流程图;图3为本发明的方法实施例2中步骤201的流程图;图4为本发明的方法实施例2中步骤203的流程图;图5为本发明的方法实施例2中步骤402的一个流程图;图6为本发明的方法实施例2中步骤402的另一流程图;图7为本发明的方法实施例3的流程图;图8为本发明的装置实施例I的结构示意图; 图9为本发明的装置实施例I中解析模块802的结构示意图;图10为本发明的装置实施例I中第一解析子模块901的结构示意图;图11为本发明的装置实施例I中生成应用子模块903的一个结构示意图;图12为本发明的装置实施例I中第二解析子模块1102的结构示意图;图13为本发明的装置实施例I中生成应用子模块903的另一结构示意图;图14为本发明的装置实施例2的结构示意图。
具体实施例方式本发明实施例的主要思想包括需要先自定义一种描述语言,并定义描述语言解析规则,再采用所述多种编程语言的词典将所述描述语言解析为所述多种编程语言的应用。为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。为了方便本领域技术人员对本发明实施例中的描述语言有更清楚详细的了解,下面首先对描述语言及描述语言解析规则的定义进行详细介绍。本发明实施例中的描述语言可以是XML(Extensible Markup Language,可扩展标记语言)文件,也可以是一种拥有自定义语法的代码片段,其对应于应用的可变部分。对于实际应用中不同类型的应用,定义的描述语言及描述语言解析规则可以有所不同,本领域技术人员适应性的调整即可。以SDK (Software Development Kit,软件开发工具包)类应用为例,一个SDK应用的可变部分往往会有请求方法、请求参数、请求URL (Uniform ResourceLocator、统一资源定位符)和请求类型等,贝U在本发明实施例中可以将请求方法、请求参数、请求URL和请求类型用XML文件表示。例如如下所示的XML文件<methods> <niethod name= “methodname” > <url>http://www.xxxx.coni/xxx</url><!—定义请求 URL—> <type>POST</type> <!—定义请求类型—> <parameters><!—定义请求参数--> <paramet e r>p aramete rN a m e I </p arame ter>
<parameter>parameterName2</parameter>
〈/parameters〉
</method>〈/methods〉当然,在本发明实施例中也可以用一种具有自定义语法的代码片段来表示,例如下面所示的代码片段function methodName (paramterI, paramter2) POST http://xxxx{...}在上述代码片段中定义了方法名称、参数名、请求类型和请求URL。参见图1,图I示出了本发明的一种基于描述语言生成多种编程语言的应用的方法实施例I的流程图,本实施例可以包括以下步骤步骤101 :获取预先定义的与所述应用对应的描述语言及描述语言解析规则。在本发明实施例中,自定义的描述语言及描述语言解析规则不同,则对描述语言的解析方法就可能不同。例如,当描述语言是XML文件时,可以采用现有的DOM(DocumentObject Model,文档对象模型)方法进行解析,将XML文件解析为具有关系的数据结构,例如数组。当描述语言为自定义的代码片段时,可以利用本发明实施例提供的词典进行解析。需要说明的是,一个应用往往会对应许多文件,有些文件是变化的,有些文件是固定不变的,描述语言可以对应于所述应用的可变部分。步骤102 :采用所述描述语言解析规则和多种编程语言的词典将所述描述语言解析为所述多种编程语言的应用。在步骤102中,则采用需要解析的多种编程语言的词典,并按照所述描述语言解析规则将描述语言直接解析为所述多种编程语言的应用。在实际应用中,本步骤具体可以包括子步骤Al :按照所述描述语言解析规则及所述多种编程语言的词典,将所述描述语言解析成具有对应关系的数据结构,所述具有对应关系的数据结构对应于所述应用的可变部分;子步骤A2 :获取所述多种编程语言对应的多个模板压缩包,并依据所述模板压缩包中的配置文件和所述具有对应关系的数据结构生成多种编程语言的应用。本发明实施例中的编程语言包括但不限于PHP(超级文本预处理语言,HypertextPreprocessor)编程语目、JAVA语目、C/C++语目、 NET语目、Ruby语目和Python语目。可见在本实施例中,只需要通过预先定义描述语言及描述语言解析规则,就可以利用词典来生成多种编程语言的应用,这就节省了多次编写多种编程语言的应用的时间和资源,从而也能够提高生成多种编程语言的应用的效率。参见图2,图2示出了本发明的一种基于描述语言生成多种编程语言的应用的方法实施例2的流程图,本实施例可以包括以下步骤步骤201 :获取预先定义的与所述应用对应的描述语言及描述语言解析规则。步骤202 :按照描述语言解析规则及多种编程语言的词典,将所述描述语言解析成具有对应关系的数据结构,所述具有对应关系的数据结构对应于所述应用的可变部分。
在实际应用中,所述具有对应关系的数据结构为数组,则参考图3所示,步骤202具体可以包括步骤301 :依据所述应用的预先定义的描述语言生成单词列表;在本例子中,以描述语言为代码片段进行举例说明。首先,可以将代码片段解析成单词列表,这可以通过对代码片段进行“读进”操作实现。例如,每读取一个单词,就在原代码片段中删除这个单词,并在单词列表中增加一个单词,每个单词携带一些属性(如类型,操作数等),每次读取一个单词后,将新读取的单词加入单词列表,最终生成原代码片段对应的完整的单词列表。步骤302 :通过正则表达式识别所述单词列表中的单词;在实际应用中可以通过正则表达式识别单词。例如,读取一个字符串如下所示
i f(preg—mateh('/A”(■ * )7'., Scode,Smatehes)) {
$code=substr($code, strlen($matches
));// 代码片段中删除已被识别的单词
return array('STRING',Smatchesf I ]);//返回这个单词
}而读取一个数字则如下所示
if(preg match('/A(\d+\. | 0J }\d*)/', $code,Smatches)) {
Scode=substr(Scode, strIen(Smatches
));//代码片段中■除已被识别
的单词。
return array('NUVlBER',SmatcIies[I]);//返回这个单词
}需要说明的是,当代码片段的当前字符以引号开始,那么下一个单词将读取一个字符,而如果代码片段当前字符是数字,那么下一个单词将读取一个数字。可以理解的是,代码片段具有一定的语法,而正则表达式就是按照指定语法依次进行匹配的。在实际应用中如果遇到无法识别的单词,可以报语法错误。当代码片段全解析完毕后,得到了一个单词列表的数组。例如
array(
//每个单词的形式可以是这样array( 4单词类型’ /其他操作数,)
array('DATAV 下标'),
array(’PROPV 属性’),
array(’MATHV+,=,*,%,(,)'),//数学符号。
array('STRINGV字符串值
array('AND'),//and 符号&
array ('END'),// 换行
arrayC'NUMBERV 数字'),
arrayCFUNCTION';函数名称’)
);步骤303 :使用所述多种编程语言的词典翻译所述单词得到翻译结果;在本步骤中,使用各种编程语言的词典进行翻译。本发明实施例中的词典是预先设定好的对单词的解析方法。本发明实施例中的每种编程语言都对应有一个词典。在实际应用中,对于每一种编程语言,本步骤可以循环单词列表,根据单词类型调用词典的不同的解析方法,最终解析成该种编程语言的可执行代码。下面以连接符举例详细说明翻译过程。对于不同的编程语言,Java编程语言的连接符用“ + ”表示,PHP编程语言的连接符用”表示,还有些编程语言的连接符可能是用“&”表示的。在本发明实施例中,可以规定代码片段中“&”表示是连接符,那么在进行单词解析时,如果匹配到了 “&”符号,则会产生一个单词array ( ‘AND’)。在使用词典翻译时,如果遇到单词array ( ‘AND’),不同编程语言的词典翻译出的结果将不一样,PHP编程语言的词典翻译结果为”,Java编程语言翻译的结果为“ + ”。步骤304 :将翻译结果按照规定格式生成数组。在本例子中以数组为例,翻译之后再将单词列表的翻译结果按照规定格式生成数组,即是解析完描述语言后将生成规定格式的数组。仍以SDK应用为例,解析完描述语言
后,将得到如下所示的类似这样的数组array( 'methodN ame I '=>array( ’url'=>'访问地址,ml标签的值', ’http,=>'访问方式 POST|GET|PUT|DELETF,
'params->array(参数列表) ),
'methodName2'=>array( ’url'=>'访问地址,url标签的值', ,http,=>'访问方式 POST|GET|PUT|DELETE', ’params’=>array(参数列表)
),
)步骤203 :获取所述多种编程语言对应的多个模板压缩包。在本发明实施例中,同一类应用往往会有相同的代码和变化的代码两部分。以SDK类应用为例,不管哪种编程语言,其请求接口的方式是一样的,但是请求参数、请求URL等,不同的SDK是有变化的,则对应可以采用模板机制,即是将变化的地方使用模板标签(即是在模板里使用复杂的操作可以用标签表示),以使最终解析模板后生成多种编程语言的应用。因为一个应用往往有许多文件,有些文件是变化的,有些文件是固定不变的,所以如果按照将一个变化的文件对应一个模版文件,那么一个应用会有很多个模板文件,这样就会使得待处理的数据量较大,同时也不方便管理模版。因此,本发明实施例提供一种以压缩包作为模板的方式,将所有模板文件和固定不变的文件都放在同一个压缩包中(即是模板压缩包),这样就使得本发明实施例中的每种编程语言就只对应一个模板压缩包,既能节省待处理的数据量,也方便管理模板。本发明实施例中的模板压缩包内除了有模板文件和固定不变文件以外,还应有一个配置文件。该配置文件可以说明模板文件在模板压缩包中的存放位置,和模板文件解析后生成的程序文件在模板压缩包中的存放位置。例如,以PHP编程语言的模板压缩包为例,假设它在模板压缩包中的配置文件为config. ini,该config. ini的内容为tpl/filenamel. tpl. php = class/filenamel. class, phptpl/filename2. tpl. php = class/filename2. class, php则上述内容可以表示在模板压缩包中“tpl/filenamel. tpl. php”是一个模板文件,这个模板文件被解析后生成的程序文件为模板压缩包中的“class/f ilenamel. class,php,,。步骤204 :依据所述模板压缩包中的配置文件和所述具有对应关系的数据结构生成多种编程语言的应用。在获取到模板压缩包之后,提取配置文件,再根据配置文件可以获取模板文件,在解析模板文件的过程中参考前述具有对应关系的数据结构可以生成多种编程语言的应用,其中,具有对应关系的数据结构中存放着模板变量的值,在解析模板的过程中,需要从具有对应关系的数据结构中获取模板变量的值。参考图4,所述步骤204在实际应用中,具体可以包括步骤401 :获取当前模板压缩包中的配置文件和模板文件,所述配置文件表示模板文件在所述当前模板压缩包中的存放位置,和模板文件解析后生成的程序文件在所述当前模板压缩包中的存放位置;因为在本发明实施例中的配置文件中定义了模板压缩包的模板文件,配置文件可以表示出模板压缩包中的哪些文件是模板文件,以及模板文件解析后的程序文件在模板压 缩包中的存放位置,所以先提取出配置文件再根据配置文件中的内容提取出模板文件,在提取模板文件时可以利用各种现有的压缩包提取文件的技术将模板文件从模板压缩包中提取出来。例如可以用PHP编程语言的ZipArchive类进行压缩包文件提取。步骤402 :依据所述具有对应关系的数据结构将所述模板文件解析为可执行代码;在提取到模板文件之后,需要将模板文件的内容进行替换以生成可执行的程序代码,在本发明实施例中,模板文件中的模板标签不需要太复杂,能支持原生编程语言语法即可。为了方便本领域技术人员更清楚详细的了解本步骤,下面以在实际应用中,假设 所述编程语言为PHP编程语言,所述模板文件也采用PHP编程语言进行编译为例进行说明,则参考图5所示,所述步骤402具体可以包括步骤501 :将所述模板文件中的PHP标签替换为指定的其他标记;在替换模板标签的过程中需要解决一个问题,例如,生成的可执行程序代码是PHP编程语言,而模板文件也是PHP编程语言时,则模板标签不能使用PHP标签“〈 php”和“ >”进行标记,并且也不能让模板文件中的PHP代码在解析的时候被执行。因此,首先需要对模板文件中原本的PHP标签进行替换,将其替换为指定的其他标记。例如,将“〈? php”替换为“#PHP_TAG_BEGIN#”,以及将“? >,,替换为“#PHP_TAG_END#”。可以理解的是,只需要将其他指定的标记即可,无需限定是什么样的其他标记,本领域技术人员可以适应性的自主调整。步骤502 :将所述模板文件中的模板标签替换为所述PHP标签;其次还需要将模板文件中的模板标签替换为PHP标签,例如指定模板标签以“”标签开始,以“}>”标签结束,在这两个标签之间可以写原生的PHP代码,这时候需要先将“〈{”替换为“〈 php”,再将“}>”替换为“? >”,这样模板标签中的PHP代码才会被执行。步骤503 :将所述指定的其他标记替换为所述PHP标签。最后再将前述指定的其他标记“#PHP_TAG_BEGIN#”替换为“〈? php echo “〈 ?php” >””,以及将 “#PHP_TAG_END#” 标记替换为“〈? php echo “ >,, >”。通过步骤501 步骤503的替换之后最终可以得到一段可执行的程序代码。步骤403 :运行所述可执行代码以获得运行结果文件;
接着运行前述得到的可执行代码即可获得运行结果文件,需要注意的是,如果直接执行可执行程序代码时会将结果直接打印出来,在实际应用中可以不让执行结果打印出来,这就需要先将执行结果缓冲到内存中,然后获得内存中的执行结果作为运行结果文件。而将执行结果缓冲到内存及获得内存中的执行结果的参考代码如下所示ob_start() ;//开始一个输出缓冲。eval(/ >/ . $code) ;//运行可执行程序代码$result = ob_get_clean() ;//获得内存中的缓冲数据。步骤404 :将所述运行结果文件存放至所述当前模板压缩包中;
生成运行结果文件之后还需要将运行结果文件放入模板压缩包中,放入到模板压缩包中的位置是配置文件中已经配置好的,在实施时可以用各种公知的技术向模板压缩包中添加文件,例如可以用PHP编程语言的ZipArchive类向模板压缩包添加文件。步骤405 :删除所述当前模板压缩包中的配置文件和模板文件。最后需要删除模板压缩包中多余的文件(模板文件和配置文件等),此时模板压缩包就成了一个可供用户下载的应用。需要说明的是,在具体实施时,因为模板压缩包是需要重复利用的,不能可以不对模版压缩包直接进行修改,所以需要先建立一个模版压缩包的副本压缩包,然后对副本压缩包进行操作。参考图6,在所述步骤501之前,还可以包括以下步骤步骤601 :将原始模板压缩包复制至临时目录;在本步骤中需要拷贝原始模版压缩包到一个指定的临时目录,为和原始模版压缩包区分,可以将拷贝到临时目录的模版压缩包称为“副本压缩包”。步骤602 :将所述临时目录下的副本压缩包作为所述当前模板压缩包。然后再将临时目录下的副本压缩包作为所述当前模板压缩包,则后续针对的模板压缩包就是副本压缩包,从而可以不需要对原模板压缩包直接修改。在本实施例中,只需要通过预先定义描述语言及描述语言解析规则,就可以利用词典来生成多种编程语言的应用,这就节省了多次编写多种编程语言的应用的时间和资源,从而也能够提高生成多种编程语言的应用的效率。参见图7,示出了本发明的一种基于描述语言生成多种编程语言的应用的方法实施例3的流程图,本实施例可以包括以下步骤步骤701 :获取预先定义的与所述应用对应的描述语言及描述语言解析规则。步骤702 :按照描述语言解析规则及多种编程语言的词典,将所述描述语言解析成具有对应关系的数据结构,所述具有对应关系的数据结构对应于所述应用的可变部分。步骤703 :获取所述多种编程语言对应的多个模板压缩包。步骤704 :依次将原始模板压缩包复制至临时目录,以得到所述临时目录下的副本压缩包。在本实施例中,先将模板压缩包复制至临时目录,并将临时目录下的副本压缩包作为操作对象。步骤705 :获取所述临时目录下的副本压缩包中的配置文件和模板文件,所述配置文件表示模板文件在所述副本压缩包中的存放位置,和模板文件解析后生成的程序文件在所述副本压缩包中的存放位置。
步骤706 :依据所述具有对应关系的数据结构将所述模板文件解析为可执行代码。步骤707 :运行所述可执行代码以获得运行结果文件。
步骤708 :将所述运行结果文件存放至所述副本压缩包中。步骤709 :删除所述副本压缩包中的配置文件和模板文件,以得到多种编程语言的应用。步骤710 :接收客户端请求下载所述多种编程语言的应用的下载请求。在本发明实施例中,生成多种编程语言的应用之后,接收到客户端请求下载所述多种编程语言的应用的下载请求,因为客户端不同也就意味着操作系统可能不同,所以需要依据客户端运行的操作系统所支持的编程语言来将对应的应用发送给客户端。步骤711 :依据所述客户端使用的编程语言将对应的编程语言的应用发送给所述客户端。本实施例可以在生成多种编程语言的应用之后,根据请求下载应用的客户端所适用的编程语言,将对应的编程语言的应用发给客户端,例如,如果客户端是在IOS上运行的,则将object C编程语言的应用发给客户端,而如果客户端在ANDROID系统上运行,则需要将JAVA编程语言的同一个应用发送给客户端。在本发明实施例中,只需要编写描述语言及其解析规则,就能利用词典获得多种编程语言的应用,不用多次开发。从而降低了开发成本和开发时间,也提高了多种编程语言的应用的生成效率。本发明实施例提供的描述语言,使得开发人员也不用学习多种编程语言,只要掌握了描述语言就能开发多种编程语言的应用,从而也降低了开发者的学习成本。同时,本发明实施例可以统一采用一种描述语言,这就不会产生理解的误差,从而不会出现不同编程语言的应用的功能有差别的现象。并且,本发明实施例还可以利用词典解析代码片段的方法,实现了描述语言为自定义的代码片段,从而能使描述语言更加简单方便和易懂。通过以上的方法实施例的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括只读存储器(ROM)、随机存取存储器(RAM)、磁碟或者光盘等各种可以存储程序代码的介质。相应于上面的方法实施例,本发明实施例还提供一种基于描述语言生成多种编程语言的应用的装置。参见图8,示出了一种基于描述语言生成多种编程语言的应用的装置实施例I的结构示意图,可以包括获取模块801,用于获取预先定义的与所述应用对应的描述语言及描述语言解析规则;解析模块802,用于采用所述描述语言解析规则和多种编程语言的词典将所述描述语言解析为所述多种编程语言的应用。在实际应用中,参考图9所示,所述解析模块802具体可以包括
第一解析子模块901,用于按照所述描述语言解析规则及所述多种编程语言的词典,将所述描述语言解析成具有对应关系的数据结构,所述具有对应关系的数据结构对应于所述应用的可变部分;获取子模块902,用于获取所述多种编程语言对应的多个模板压缩包;生成应用子模块903,用于依据所述模板压缩包中的配置文件和所述具有对应关系的数据结构生成多种编程语言的应用。在实际应用中,参考图10所示,所述第一解析子模块901具体可以包括生成单词列表子模块1001,用于依据所述应用的预先定义的描述语言生成单词列表;
识别子模块1002,用于通过正则表达式识别所述单词列表中的单词;翻译子模块1003,用于使用所述多种编程语言的词典翻译所述单词得到翻译结果;生成数组子模块1004,用于将翻译结果按照规定格式生成数组。获取子模块902,用于获取所述多种编程语言对应的多个模板压缩包;生成应用子模块903,用于依据所述模板压缩包中的配置文件和所述具有对应关系的数据结构生成多种编程语言的应用。在实际应用中,参考图11所示,所述生成应用子模块903具体可以包括获取文件子模块1101,用于获取当前模板压缩包中的配置文件和模板文件,所述配置文件表示模板文件在所述当前模板压缩包中的存放位置,和模板文件解析后生成的程序文件在所述当前模板压缩包中的存放位置;第二解析子模块1102,用于依据所述具有对应关系的数据结构将所述模板文件解析为可执行代码;在实际应用中,参考图12所示,所述第二解析子模块1102具体可以包括第一替换子模块1201,用于将所述模板文件中的PHP标签替换为指定的其他标记;第二替换子模块1202,用于将所述模板文件中的模板标签替换为所述PHP标签;第三替换子模块1203,用于将所述指定的其他标记替换为所述PHP标签。运行代码子模块1103,用于运行所述可执行代码以获得运行结果文件;存放子模块1104,用于将所述运行结果文件存放至所述当前模板压缩包中;删除子模块1105,用于删除所述当前模板压缩包中的配置文件和模板文件。在实际应用中,参考图13所示,所述生成应用子模块903具体还可以包括复制子模块1301,用于将原始模板压缩包复制至临时目录;确定子模块1302,用于将所述临时目录下的副本作为所述当前模板压缩包。在本实施例中,只需要通过预先定义描述语言及描述语言解析规则,就可以利用词典来生成多种编程语言的应用,这就节省了多次编写多种编程语言的应用的时间和资源,从而也能够提高生成多种编程语言的应用的效率。参见图14,示出了本发明实施例的一种基于描述语言生成多种编程语言的应用的装置实施例2的结构示意图,本实施例公开的装置可以包括获取模块801,用于获取预先定义的与所述应用对应的描述语言及描述语言解析规则;第一解析子模块901,用于按照预先定义的描述语言解析规则,将所述应用的预先定义的描述语言解析成具有对应关系的数据结构,所述描述语言对应于所述应用的可变部分;获取子模块902,用于获取所述多种编程语言对应的多个模板压缩包。复制子模块1301,用于将原始模板压缩包复制至临时目录;确定子模块1302,用于将所述临时目录下的副本作为所述当前模板压缩包。获取文件子模块1101,用于获取当前模板压缩包中的配置文件和模板文件,所述配置文件表示模板文件在所述当前模板压缩包中的第一存放位置,和模板文件解析后生成 的程序文件在所述当前模板压缩包中的第二存放位置;第二解析子模块1102,用于依据所述具有对应关系的数据结构将所述模板文件解析为可执行代码;运行代码子模块1103,用于运行所述可执行代码以获得运行结果文件;存放子模块1104,用于将所述运行结果文件存放至所述当前模板压缩包中;删除子模块1105,用于删除所述当前模板压缩包中的配置文件和模板文件。接收下载请求模块1401,用于接收客户端请求下载所述多种编程语言的应用的下载请求;发送模块1402,用于依据所述客户端使用的编程语言将对应的编程语言的应用发送给所述客户端。在本发明实施例中,只需要编写描述语言及其解析规则,就能利用词典获得多种编程语言的应用,不用多次开发。从而降低了开发成本和开发时间,也提高了多种编程语言的应用的生成效率。本发明实施例提供的描述语言,使得开发人员也不用学习多种编程语言,只要掌握了描述语言就能开发多种编程语言的应用,从而也降低了开发者的学习成本。同时,本发明实施例可以统一采用一种描述语言,这就不会产生理解的误差,从而不会出现不同编程语言的应用的功能有差别的现象。并且,本发明实施例还可以利用词典解析代码片段的方法,实现了描述语言为自定义的代码片段,从而能使描述语言更加简单方便和易懂。可以理解的是,本发明可用于众多通用或专用的计算系统环境或配置中。例如个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要
素的过程、方法、物品或者设备中还存在另外的相同要素。对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本发明的具体实施方式
,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种基于描述语言生成多种编程语言的应用的方法,其特征在于,包括 获取预先定义的与所述应用对应的描述语言及描述语言解析规则; 采用所述描述语言解析规则和多种编程语言的词典,将所述描述语言解析为所述多种编程语言的应用。
2.根据权利要求I所述的方法,其特征在于,所述采用所述描述语言解析规则和多种编程语言的词典,将所述描述语言解析为所述多种编程语言的应用,具体包括 按照所述描述语言解析规则及所述多种编程语言的词典,将所述描述语言解析成具有对应关系的数据结构,所述具有对应关系的数据结构对应于所述应用的可变部分; 获取所述多种编程语言对应的多个模板压缩包,并依据所述模板压缩包中的配置文件和所述具有对应关系的数据结构生成多种编程语言的应用。
3.根据权利要求2所述的方法,其特征在于,所述具有对应关系的数据结构为数组,则 所述将所述描述语言解析成具有对应关系的数据结构,具体包括 依据所述应用的预先定义的描述语言生成单词列表; 通过正则表达式识别所述单词列表中的单词; 使用所述多种编程语言的词典翻译所述单词得到翻译结果; 将翻译结果按照规定格式生成数组。
4.根据权利要求2所述的方法,其特征在于,所述依据所述模板压缩包中的配置文件和所述具有对应关系的数据结构生成多种编程语言的应用,具体包括 获取当前模板压缩包中的配置文件和模板文件,所述配置文件表示模板文件在所述当前模板压缩包中的第一存放位置,和模板文件解析后生成的程序文件在所述当前模板压缩包中的第二存放位置; 依据所述具有对应关系的数据结构将所述模板文件解析为可执行代码; 运行所述可执行代码以获得运行结果文件; 将所述运行结果文件存放至所述当前模板压缩包中; 删除所述当前模板压缩包中的配置文件和模板文件。
5.根据权利要求4所述的方法,其特征在于,在获取当前模板压缩包中的配置文件和模板文件之前,还包括 将原始模板压缩包复制至临时目录; 将所述临时目录下的副本作为所述当前模板压缩包。
6.根据权利要求4所述的方法,其特征在于,所述编程语言为超级文本预处理PHP编程语言,所述模板文件采用PHP编程语言编译,则所述依据所述具有对应关系的数据结构将所述模板文件解析为可执行代码,具体包括 将所述模板文件中的PHP标签替换为指定的其他标记; 将所述模板文件中的模板标签替换为所述PHP标签; 将所述指定的其他标记替换为所述PHP标签。
7.根据权利要求I所述的方法,其特征在于,在采用所述多种编程语言的词典将所述描述语言解析为所述多种编程语言的应用之后,还包括 接收客户端请求下载所述多种编程语言的应用的下载请求; 依据所述客户端使用的编程语言将对应的编程语言的应用发送给所述客户端。
8.一种基于描述语言生成多种编程语言的应用的装置,其特征在于,包括 获取模块,用于获取预先定义的与所述应用对应的描述语言及描述语言解析规则;解析模块,用于采用所述描述语言解析规则和多种编程语言的词典,将所述描述语言解析为所述多种编程语言的应用。
9.根据权利要求8所述的装置,其特征在于,所述解析模块具体包括 第一解析子模块,用于按照所述描述语言解析规则及所述多种编程语言的词典,将所述描述语言解析成具有对应关系的数据结构,所述具有对应关系的数据结构对应于所述应用的可变部分; 获取子模块,用于获取所述多种编程语言对应的多个模板压缩包; 生成应用子模块,用于依据所述模板压缩包中的配置文件和所述具有对应关系的数据结构生成多种编程语言的应用。
10.根据权利要求9所述的装置,其特征在于,所述第一解析子模块具体包括 生成单词列表子模块,用于依据所述应用的预先定义的描述语言生成单词列表; 识别子模块,用于通过正则表达式识别所述单词列表中的单词; 翻译子模块,用于使用所述多种编程语言的词典翻译所述单词得到翻译结果; 生成数组子模块,用于将翻译结果按照规定格式生成数组。
11.根据权利要求9所述的装置,其特征在于,所述生成应用子模块具体包括 获取文件子模块,用于获取当前模板压缩包中的配置文件和模板文件,所述配置文件表示模板文件在所述当前模板压缩包中的第一存放位置,和模板文件解析后生成的程序文件在所述当前模板压缩包中的第二存放位置; 第二解析子模块,用于依据所述具有对应关系的数据结构将所述模板文件解析为可执行代码; 运行代码子模块,用于运行所述可执行代码以获得运行结果文件; 存放子模块,用于将所述运行结果文件存放至所述当前模板压缩包中; 删除子模块,用于删除所述当前模板压缩包中的配置文件和模板文件。
12.根据权利要求11所述的装置,其特征在于,所述生成应用子模块还包括 复制子模块,用于将原始模板压缩包复制至临时目录; 确定子模块,用于将所述临时目录下的副本作为所述当前模板压缩包。
全文摘要
本发明实施例公开了一种基于描述语言生成多种编程语言的应用的方法及装置,所述方法包括获取预先定义的与所述应用对应的描述语言及描述语言解析规则;采用所述描述语言解析规则和多种编程语言的词典将所述描述语言解析为所述多种编程语言的应用。采用本发明实施例的方法或装置,只需要通过预先定义描述语言及描述语言解析规则,就可以利用多种编程语言的词典来生成多种编程语言的应用,这就节省了多次编写多种编程语言的应用的时间和资源,从而也能够提高生成多种编程语言的应用的效率。
文档编号G06F9/44GK102750152SQ201210212289
公开日2012年10月24日 申请日期2012年6月21日 优先权日2012年6月21日
发明者罗飞, 魏世江 申请人:新浪网技术(中国)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1