领域特定语言脚本拼装方法及系统与流程

文档序号:21970620发布日期:2020-08-25 19:00阅读:221来源:国知局
领域特定语言脚本拼装方法及系统与流程

本发明涉及计算机技术领域,尤其涉及一种领域特定语言脚本拼装方法及系统。



背景技术:

领域特定语言(dsl,domain-specificlanguage)指的是是专注于某个应用程序领域的计算机语言。目前市面上多数领域特定语言只是利用程序语言对业务逻辑、数据进行了包装,使用者只需要提供简单的逻辑而不必关心编程语言以及系统处理细节。但是目前市面上的领域特定语言设计方式都存在一个问题,即数据源获取问题。设计者往往无法预料到使用者会使用到哪些数据,因此在执行使用者编写领域特定语言脚本前,设计者会将所有使用者可能用到的数据获取到,并传递给使用者编写的领域特定语言脚本。这种设计模式,导致系统去查询了无用数据,以至于在编写领域特定语言脚本时,编写效率低,系统资源占用过高。



技术实现要素:

有鉴于此,本发明实施例提供了一种领域特定语言脚本拼装方法、系统、计算机设备及计算机可读存储介质,用于解决领域特定语言脚本编写效率低,系统资源占用过高的问题。

本发明实施例是通过下述技术方案来解决上述技术问题:

一种领域特定语言脚本拼装方法,包括:

获取数据语言格式的原始脚本或原始脚本分组;

识别所述数据语言格式的原始脚本或原始脚本分组的对象类型,所述对象类型包括逻辑对象、操作符和数据对象;

将所述对象类型中的逻辑对象替换为基于脚本语言的逻辑块,将所述数据对象替换为占位符,将所述逻辑块、所述占位符和所述操作符合并,生成基于脚本语言的初版领域特定语言脚本或脚本分组;

使用业务数据替换所述占位符,生成基于脚本语言的终版领域特定语言脚本或脚本分组。

进一步地,所述识别所述数据语言格式的原始脚本或原始脚本分组的对象类型,所述对象类型包括逻辑对象、操作符和数据对象包括:

将所述数据语言格式的原始脚本或原始脚本分组分割成多个单字符;

遍历所述多个单字符,逐个判断所述单字符的对象类型。

进一步地,所述所述将所述对象类型中的逻辑对象替换为基于脚本语言的逻辑块,将所述数据对象替换为占位符,将所述逻辑块、所述占位符和所述操作符合并,生成基于脚本语言的初版领域特定语言脚本或脚本分组包括:

预先建立并存储所述逻辑对象与所述逻辑块的映射关系;

根据所述逻辑对象和所述映射关系,获取所述逻辑块。

进一步地,所述使用业务数据替换所述占位符,生成基于数据语言格式的终版领域特定语言脚本或脚本分组包括:

获取所述业务数据;

使用所述业务数据替换所述占位符,生成基于脚本语言的终版领域特定语言脚本或脚本分组。

进一步地,所述获取所述业务数据包括:

获取写入在所述原始脚本或原始脚本分组的数据定义,所述数据定义用于定位所述业务数据对应的数据分类的位置;

获取所述业务数据对应的业务主键,所述业务主键用于从所述数据分类中获取业务数据。

进一步地,所述获取数据语言格式的脚本或脚本分组包括:

接收数据语言格式的原始脚本或原始脚本分组获取指令;

根据所述原始脚本或原始脚本分组获取指令,生成业务代码;

根据所述业务代码,获取数据语言格式的原始脚本或原始脚本分组。

进一步地,获取所述业务数据后,所述方法还包括:

缓存所述业务数据,以避免所述业务数据的重复获取。

为了实现上述目的,本发明还提供一种领域特定语言脚本拼装系统,包括:

脚本获取模块,用于获取数据语言格式的原始脚本或原始脚本分组;

对象类型识别模块,用于识别所述数据语言格式的原始脚本或原始脚本分组的对象类型,所述对象类型包括逻辑对象、操作符和数据对象;

初版领域特定语言脚本生成模块,用于将所述对象类型中的逻辑对象替换为基于脚本语言的逻辑块,将所述数据对象替换为占位符,将所述逻辑块、所述占位符和所述操作符合并,生成基于脚本语言的初版领域特定语言脚本或脚本分组;

终版领域特定语言脚本生成模块,用于将所述占位符用业务数据替换,生成基于脚本语言的终版领域特定语言脚本或脚本分组。

为了实现上述目的,本发明还提供一种计算机设备,所述计算机设备包括存储器、处理器以及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上所述领域特定语言脚本拼装方法的步骤。

为了实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序可被至少一个处理器所执行,以使所述至少一个处理器执行如上所述的领域特定语言脚本拼装方法的步骤。

本发明提供的领域特定语言脚本拼装方法、系统、计算机设备及计算机可读存储介质,通过主动获取生成领域特定语言脚本需要的数据,降低了系统资源的占用,提高了领域特定语言脚本的编写效率;同时,先用占位符代替业务数据,再经过统一的数据查询,将占位符替换成真实的业务数据,避免了所需业务数据的频繁查询,提高了领域特定语言脚本的拼装效率,优化了系统的性能。

以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。

附图说明

图1为本发明实施例一之领域特定语言脚本拼装方法的步骤流程图;

图2为步骤获取数据语言格式的原始脚本或原始脚本分组的具体流程示意图;

图3为步骤识别所述数据语言格式的原始脚本或原始脚本分组的对象类型,所述对象类型包括逻辑对象、操作符和数据对象的具体流程示意图;

图4为步骤将所述对象类型中的逻辑对象替换为基于脚本语言的逻辑块,将所述数据对象替换为占位符,将所述逻辑块、所述占位符和所述操作符合并,生成基于脚本语言的初版领域特定语言脚本或脚本分组的具体流程示意图;

图5为步骤将所述占位符用业务数据替换,生成基于脚本语言的终版领域特定语言脚本或脚本分组的具体流程示意图;

图6为步骤获取所述业务数据的具体流程示意图;

图7为本发明领域特定语言脚本拼装系统之实施例二的程序模块示意图;

图8为本发明计算机设备之实施例三的硬件结构示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。

实施例一

请参阅图1,示出了本发明实施例之领域特定语言脚本拼装方法的步骤流程图。可以理解,本方法实施例中的流程图不用于对执行步骤的顺序进行限定。下面以计算机设备为执行主体进行示例性描述,具体如下:

步骤s100:获取数据语言格式的原始脚本或原始脚本分组。

具体的,数据语言格式指的是计算机前端和后端数据交换时用于统一交换格式的语言,在本实施例中,数据语言格式为json格式,json(javascriptobjectnotation,js对象简谱)是一种轻量级的数据交换格式。它采用完全独立于编程语言的文本格式来存储和表示数据。

在示例性的实施例中,如图2所示,步骤s100进一步包括:

步骤s101:接收数据语言格式的原始脚本或原始脚本分组获取指令;

步骤s102:根据所述原始脚本或原始脚本分组获取指令,生成业务代码;

步骤s103:根据所述业务代码,获取数据语言格式的原始脚本或原始脚本分组。

具体的,开发人员计算机设备接收到原始脚本或原始脚本分组的获取请求后,从脚本库中,获取json格式的原始脚本或原始脚本分组。其中,脚本库是存储有脚本和脚本之间逻辑关系的仓库,其中,脚本库中包括多种语言格式的脚本或者脚本分组,多种语言格式的脚本或者脚本分组为开发人员或用户根据项目中可能涉及到的所有业务预先编写并存储于脚本库中,脚本库中的每个脚本或者脚本分组都有其对应的业务代码,与开发人员或者用户的脚本或脚本分组的获取请求预先对应设置,当开发人员根据需要求进行相应操作,发起相应获取脚本或脚本分组的请求后,触发所述业务代码,所述业务代码被触发后,从脚本库中取出对应的脚本或脚本分组。

其中,原始脚本或原始脚本分组通过脚本语言定义了脚本中的业务数据的属性,包括数据码值、数据名称、数据源处理类型、数据源获取类型和资源标识符等,根据不同的子脚本,业务数据的属性不同。

步骤s200:识别所述数据语言格式的原始脚本或原始脚本分组的对象类型,所述对象类型包括逻辑对象、操作符和数据对象;

在示例性的实施例中,如图3所示,步骤s200进一步包括:

步骤s201:将所述数据语言格式的原始脚本或原始脚本分组分割成多个单字符;

步骤s202:遍历所述多个单字符,逐个判断所述单字符的对象类型。

具体的,在本实施例中,使用split方法将脚本或脚本分组分割成多个单字符,split方法是指通过指定分隔符对字符串进行切片,通过设置split方法中的num(number,数字)参数、sep参数和count参数,将脚本或者脚本分组分割成多个单字符,得到分割完成的字符串。

遍历分割完成的字符串,逐个判断所述单字符的对象类型,在本实施例中,通过在分类字典里面匹配进行字符匹配,得到单字符的对象类型,其中,对象类型包括逻辑对象、操作符和数据对象,逻辑对象指的是逻辑判断的字符,例如if、else和for等逻辑字符;操作符指的是用来描述一组可以才做数据值的符号,例如算数操作符、位操作符、关系操作符和相等操作符;数据对象指的是常量、或者变量,常量例如“1”、“2”、“3”等,变量例如“a”、“b”等。

步骤s300:将所述对象类型中的逻辑对象替换为基于脚本语言的逻辑块,将所述数据对象替换为占位符,将所述逻辑块、所述占位符和所述操作符合并,生成基于脚本语言的初版领域特定语言脚本或脚本分组。

在示例性的实施例中,如图4所示,步骤s300进一步包括:

步骤s301:预先建立并存储所述逻辑对象与所述逻辑块的映射关系;

步骤s302:根据所述逻辑对象和所述映射关系,获取所述逻辑块。

在示例性的实施例中,脚本语言为groovy语言,groovy语言是用于java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。

每种语言都有其对应的逻辑表达方式,在本实施例中,预先建立并存储与json格式的逻辑对象和groovy语言的逻辑块的一一对应转换的映射关系并存储,根据json格式的逻辑对象和映射关系,得到groovy语言的逻辑块,并用对应的逻辑块替换所有逻辑对象。

同时,将所有数据对象用占位符统一替换,占位符指的是预先在脚本或者脚本分组中占住固定的位置,不同的数据对象使用不同的占位符进行替换,常见的占位符有%i(整数占位符),%f(浮点占位符),%s(字符串占位符)和%g(小数或科学计数占位符)等。在本实施例中,由于存在多个数据类型相同的数据对象,因此,在占位符中添加不同的标识来代表统一数据类型的不同数据,例如“%s占位符001”、“%s占位符002”和“%s占位符003”等。

步骤s400:使用业务数据替换所述占位符,生成基于脚本语言的终版领域特定语言脚本或脚本分组。

在示例性的实施例中,如图5所示,步骤s400进一步包括:

步骤s401:获取所述业务数据;

步骤s402:使用所述业务数据替换所述占位符,生成基于脚本语言的终版领域特定语言脚本或脚本分组。

具体的,获取到脚本或者脚本分组所有的业务数据后,使用所有的业务数据替换占位符,生成基于groovy语言的终版领域特定语言脚本或脚本分组。通过先用占位符批量替换所有数据对象,再统一获取业务数据后,批量替换所有占位符,可以一次性的查询脚本或脚本分组中所有涉及到的业务数据,不需要获取一个业务数据,查询一次,避免了所需业务数据的频繁查询,优化了系统的性能,提高了领域特定语言脚本或脚本分组的生成速度。

在示例性的实施例中,如图6所示,步骤s401进一步包括:

s401a:获取写入在所述数据语言格式的原始脚本或原始脚本分组的数据定义,所述数据定义用于定位所述业务数据对应的数据分类的位置。

具体的,数据定义预先写入在json格式的脚本或者脚本分组中,json格式的脚本或者脚本分组经过转换生成基于groovy语言的初版领域特定语言脚本或脚本分组后,数据定义也随之进入基于groovy语言的初版领域特定语言脚本或脚本分组中。

数据定义中定义了业务数据的属性,包括数据码值或数据名称等。首先通过业务数据的属性,获取所述业务数据对应的数据源类型,其中,数据源类型包括本系统数据、外部系统数据和用户自定义数据,当数据源类型为本系统数据时,从数据源类型中获取所述业务数据对应的数据资源位置,其中,业务数据的数据资源位置包括数据表一、数据表二和数据表三等,再从数据资源位置获取数据分类的位置,当数据定义为数据码值时,则对应的数据分类位置为数据码值分类,当数据定义为数据名称时,则对应的数据分类位置为数据名称分类;当数据源类型为本系统数据时,则解析为对应的数据码值或数据名称,用于程序将外部数据输入并存储于对应的数据分类中;当数据源类型为用户自定义数据时,则作为固定数据录入到系统中。

具体示例如下,例如,脚本为if(audit-amount>%s占位符001),其中,数据码值为“audit-amount(审批金额)”,则定位到数据码值为audit-amount的数据分类中。

s401b:获取所述业务数据对应的业务主键,所述业务主键用于从所述数据分类中获取业务数据。

具体的,业务主键是业务数据生成时生成的唯一索引,在一个系统中有且只会出现一次。例如,公安人口户籍信息系统中的业务主键为身份证号,人事管理系统中的业务主键为员工编号,购物系统中的业务主键为订单号,支付系统中的业务主键为付款流水号,签章系统中的业务主键为合同编号,银行贷款系统中的业务主键为借据号。所述业务主键由用户方提供,用户为代码的使用发,通过业务主键,进一步从所述数据分类中获取业务数据。

在示例性的实施例中,所述方法还包括:

缓存所述业务数据,以避免所述业务数据的重复获取。

进一步地,所述初版领域特定语言脚本或脚本分组获得所述业务数据后,将所述业务数据进行缓存,后续读取所述业务数据通过缓存获取。

具体的,为每个线程开辟内存空间用户缓存获取到的业务数据,当前脚本或者脚本分组转换完成后,删除当前线程的缓存空间,只要某条业务数据被获取之后,后续读取操作只会通过缓存获取,不需要多次查询同一个业务数据,提高了业务数据的获取效率。

在示例性的实施例中,脚本或脚本分组转换完成得到终版领域特定语言脚本或脚本分组后,终版的领域特定语言脚本或脚本分组可以分组执行,每个脚本或者脚本分组可以下挂多个脚本和多个脚本分组,脚本和脚本分组也可以混合下挂在同一个分组下。其中,分组类型包括校验分组和逻辑处理分组,所述校验分组用于校验数据的正确性,所述逻辑处理分组用于返回计算值。

本发明实施例通过先用占位符代替业务数据,再经过统一的数据查询,将占位符替换成真实的业务数据,避免了所需业务数据的频繁查询,在一定程度上优化了系统的性能;另外,由领域特定语言脚本生成端主动获取领域特定语言脚本拼装需要的数据,提高了数据获取效率,提高了领域特定语言脚本的拼装速度,降低了系统资源的占用。

实施例二

请继续参阅图7,示出了本发明领域特定语言脚本拼装系统的程序模块示意图。在本实施例中,领域特定语言脚本拼装系统20可以包括或被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本发明,并可实现上述领域特定语言脚本拼装方法。本发明实施例所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,比程序本身更适合于描述领域特定语言脚本拼装系统20在存储介质中的执行过程。以下描述将具体介绍本实施例各程序模块的功能:

脚本获取模块200,用于获取数据语言格式的原始脚本或原始脚本分组。

进一步地,脚本获取模块200还用于:

接收数据语言格式的原始脚本或原始脚本分组获取指令;

根据所述原始脚本或原始脚本分组获取指令,生成业务代码;

根据所述业务代码,获取数据语言格式的原始脚本或原始脚本分组。

对象类型识别模块202,用于识别所述数据语言格式的原始脚本或原始脚本分组的对象类型,所述对象类型包括逻辑对象、操作符和数据对象。

进一步地,对象类型识别模块202还用于:

将所述数据语言格式的原始脚本或原始脚本分组分割成多个单字符;

遍历所述多个单字符,逐个判断所述单字符的对象类型。

初版领域特定语言脚本生成模块204,用于将所述对象类型中的逻辑对象替换为基于数据语言格式的逻辑块,将所述数据对象替换为占位符,与所述操作符合并,生成基于数据语言格式的初版领域特定语言脚本或脚本分组;

进一步地,初版领域特定语言脚本生成模块204还用于:

预先建立并存储所述逻辑对象与所述逻辑块的映射关系;

根据所述逻辑对象和所述映射关系,获取所述逻辑块。

终版领域特定语言脚本生成模块206,用于将所述占位符用业务数据替换,生成基于数据语言格式的终版领域特定语言脚本或脚本分组。

进一步地,终版领域特定语言脚本生成模块206还用于:

获取所述业务数据;

使用所述业务数据替换所述占位符,生成基于脚本语言的终版领域特定语言脚本或脚本分组。

进一步地,终版领域特定语言脚本生成模块206还用于:

获取写入在所述数据语言格式的原始脚本或原始脚本分组的数据定义,所述数据定义用于定位所述业务数据对应的数据分类的位置;

获取所述业务数据对应的业务主键,所述业务主键用于从所述数据分类中获取业务数据。

进一步地,终版领域特定语言脚本生成模块206还用于:

缓存所述业务数据,以避免所述业务数据的重复获取。

实施例三

参阅图8,是本发明实施例三之计算机设备的硬件架构示意图。本实施例中,所述计算机设备2是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备。该计算机设备2可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。如图8所示,所述计算机设备2至少包括,但不限于,可通过系统总线相互通信连接存储器21、处理器22、网络接口23、以及领域特定语言脚本拼装系统20。其中:

本实施例中,存储器21至少包括一种类型的计算机可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器21可以是计算机设备2的内部存储单元,例如该计算机设备2的硬盘或内存。在另一些实施例中,存储器21也可以是计算机设备2的外部存储设备,例如该计算机设备2上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。当然,存储器21还可以既包括计算机设备2的内部存储单元也包括其外部存储设备。本实施例中,存储器21通常用于存储安装于计算机设备2的操作系统和各类应用软件,例如上述实施例所述的领域特定语言脚本拼装系统20的程序代码等。此外,存储器21还可以用于暂时地存储已经输出或者将要输出的各类数据。

处理器22在一些实施例中可以是中央处理器(centralprocessingunit,cpu)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器22通常用于控制计算机设备2的总体操作。本实施例中,处理器22用于运行存储器21中存储的程序代码或者处理数据,例如运行领域特定语言脚本拼装系统20,以实现上述实施例的领域特定语言脚本拼装方法。

所述网络接口23可包括无线网络接口或有线网络接口,该网络接口23通常用于在所述计算机设备2与其他电子装置之间建立通信连接。例如,所述网络接口23用于通过网络将所述计算机设备2与外部终端相连,在所述计算机设备2与外部终端之间的建立数据传输通道和通信连接等。所述网络可以是企业内部网(intranet)、互联网(internet)、全球移动通讯系统(globalsystemofmobilecommunication,gsm)、宽带码分多址(widebandcodedivisionmultipleaccess,wcdma)、4g网络、5g网络、蓝牙(bluetooth)、wi-fi等无线或有线网络。

需要指出的是,图8仅示出了具有部件20-23的计算机设备2,但是应理解的是,并不要求实施所有示出的部件,可以替代的实施更多或者更少的部件。

在本实施例中,存储于存储器21中的所述领域特定语言脚本拼装系统20还可以被分割为一个或者多个程序模块,所述一个或者多个程序模块被存储于存储器21中,并由一个或多个处理器(本实施例为处理器22)所执行,以完成本发明。

例如,图7示出了所述实现领域特定语言脚本拼装系统20实施例二的程序模块示意图,该实施例中,所述基于领域特定语言脚本拼装系统20可以被划分为脚本获取模块200、对象类型识别模块202、初版领域特定语言脚本生成模块204和终版领域特定语言脚本生成模块206。其中,本发明所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,比程序更适合于描述所述领域特定语言脚本拼装系统20在所述计算机设备2中的执行过程。所述程序模块脚本获取模块200-终版领域特定语言脚本生成模块206的具体功能在上述实施例中已有详细描述,在此不再赘述。

实施例四

本实施例还提供一种计算机可读存储介质,如闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘、服务器、app应用商城等等,其上存储有计算机程序,程序被处理器执行时实现相应功能。本实施例的计算机可读存储介质用于存储领域特定语言脚本拼装系统20,被处理器执行时实现上述实施例所述的领域特定语言脚本拼装方法。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1