本发明涉及计算机语言领域,更具体地说,涉及代码添加方法、系统、装置及计算机可读存储介质。
背景技术:
目前,在分布式存储系统中越来越多的控制操作、业务实现都需要由代码实现。但是目前现有系统中的很多流程控制逻辑与具体业务实现混杂在一起,需要开发人员理解与编写的代码量很大,从而对理解和修改这样的复杂流程造成了困难,同时也不容易实现对功能的灵活配置。
因此,如何方便地调整流程,是本领域技术人员需要解决的问题。
技术实现要素:
本发明的目的在于提供一种代码添加方法、系统、装置及计算机可读存储介质,以方便地调整流程。
为实现上述目的,本发明实施例提供了如下技术方案:
一种代码添加方法,包括:
确定流程逻辑;
利用预设编译器编译所述流程逻辑得到通用代码;
将所述通用代码嵌入至预设源码。
其中,所述流程逻辑包括:
利用以下任意一项或多项作为关键字的流程代码:
var、for、while、if、else、break、continue、goto、node。
其中,所述通用代码包括:
c++语言代码或dot语言代码。
其中,当所述通用代码为dot语言代码时,所述利用预设编译器编译所述流程逻辑得到通用代码之后,还包括:
将所述通用代码转换为流程图形。
其中,所述预设编译器,包括:
利用bison和flex编写的编译器。
为解决上述技术问题,本发明实施例还提供了一种代码添加系统,包括:
确定模块,用于确定流程逻辑;
编译模块,用于利用预设编译器编译所述流程逻辑得到通用代码;
嵌入模块,用于将所述通用代码嵌入至预设源码。
其中,所述流程逻辑包括:
利用以下任意一项或多项作为关键字的流程代码:
var、for、while、if、else、break、continue、goto、node。
其中,预设编译器,包括:
利用bison和flex编写的编译器。
本发明实施例还提供了一种代码添加装置,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现所述代码添加方法的步骤。
本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如所述代码添加法的步骤。
通过以上方案可知,本发明提供的一种代码添加方法,包括:确定流程逻辑;利用预设编译器编译所述流程逻辑得到通用代码;将所述通用代码嵌入至预设源码。
由此可见,本发明提供的一种代码添加方法,可以只输入简单的流程逻辑,系统在确定该流程逻辑后,利用预设的编译器将流程逻辑转换为既有流程控制逻辑又有业务实现的通用代码,得到通用代码后再将其嵌入到源码。由于只需要输入简单的流程逻辑,提高了流程的可控制性,便于流程调整和优化。本发明还提供了一种代码添加系统、装置及计算机可读存储介质,同样可以实现上述技术效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例公开的一种代码添加方法流程图;
图2为本发明实施例公开的一种具体的代码添加方法流程图;
图3为本发明实施例公开的一种具体的dot转换结果图;
图4为本发明实施例公开的一种具体的代码添加方法流程图;
图5为本发明实施例公开的一种具体的dot转换结果图;
图6为本发明实施例公开的一种代码添加系统结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例公开了一种代码添加方法、系统、装置及计算机可读存储介质,以方便地调整流程。
参见图1,本发明实施例提供的一种代码添加方法,其特征在于,包括:
s101,确定流程逻辑。
在本方案中,开发人员只需要输入简单的流程逻辑,而不要编写流程控制逻辑与业务实现混杂在一起的代码。
s102,利用预设编译器编译所述流程逻辑得到通用代码。
具体地,利用预设的编译器编译上述流程逻辑,进而得到通用代码,也就是包括具体控制逻辑、具体业务实现的代码。需要说明的是,流程逻辑可以是只表示流程的简单代码,而编译器可以利用如语法分析器的工具,根据具体地流程逻辑代码与欲转换到的目标代码类型而编写的编译器,通过编译器可以将该代码解析为通用的目标代码,如c++代码、dot代码等。其中编译器可以是利用利用bison和flex编写的编译器,bison是属于gnu项目的一个语法分析器生成器。bison把一个关于“向前查看、从左到右、最右”(lalr)上下文无关文法的描述转化成可以分析该文法的c或c++程序。它也可以为二义文法生成“通用的从左到右”(glr)语法分析器;flex是一个生成扫描器(scanner)的工具,生成的扫描器能够识别文本中的词法模式(lexicalpattern)。
需要说明的是,流程逻辑可以是利用以下任意一项或多项作为关键字的流程代码:
var、for、while、if、else、break、continue、goto、node。
例如,可以首先确定输入的流程逻辑为:
flow_1{
funca
funcb
}
即,顺序执行funca、funcb两个函数,上述代码中,只是简单的列出流程逻辑,即funca、funcb的执行流程,而没有具体的实现内容,则可以通过预设的编译器,将其编译成具有流程控制逻辑和业务实现的代码,例如c++代码:
#include<list>
#include“param.h”
usgingnamespacestd;
staticintfunca(list<cparambase*>p1,list<cparamext*>p2)
{
}
staticintfuncb(list<cparambase*>p1,list<cparamext*>p2)
{
}
intflow_entry(list<cparambase*>p1,list<cparamext*>p2)
{
funca(p1,p2);
funcb(p1,p2);
}
s103,将所述通用代码嵌入至预设源码。
将流程逻辑转换为通用代码后,将该通用代码之间嵌入到存储系统的实现源码中。
由此可见,本发明实施例提供的一种代码添加方法,可以只输入简单的流程逻辑,系统在确定该流程逻辑后,利用预设的编译器将流程逻辑转换为既有流程控制逻辑又有业务实现的通用代码,得到通用代码后再将其嵌入到源码。由于只需要输入简单的流程逻辑,提高了流程的可控制性,便于流程调整和优化。
本发明实施例提供一种具体的代码添加方法,本发明实施例提供的一种具体的代码添加方法与上述实施例提供的一种代码添加方法可以相互参照。
参见图2,本发明实施例提供的一种具体的代码添加方法,具体包括:
s201,确定流程逻辑。
s202,利用预设编译器编译所述流程逻辑得到dot代码。
在本方案中,可以将流程逻辑转换为dot代码,进而可以将dot代码转换为流程图。
具体地,确定流程逻辑后,利用预设编辑器将流程逻辑转换为dot代码。
例如,流程逻辑可以是分支流程:
flow_2{
funca
if(funcb)funcc
elseif(funcd)funce
elsefuncf
funcg
}
将上述流程逻辑编译为dot语言为:
digraphflow_1{
start[peripheries=2]
start->funca
funca->funcb
funcb->funcc[label="true"]
funcb->funcd[label="false"]
funcd->funce[label="true"]
funcd->funcf[label="false"]
funcc->funcg
funce->funcg
funcf->funcg
funcg->end
}
s203,将dot代码转换为流程图形。
具体地,将编译得到dot代码转换为流程图,上述dot代码转换为流程图如图3所示。从而实现对流程逻辑的可视化,更容易理解流程。
下面对本发明实施例提供的一种具体的代码添加方法进行介绍,下文描述的一种具体的代码添加方法与上文描述的一种中代码添加方法可以相互参照。
参见图4,本发明实施例提供的一种具体的代码添加方法,具体包括:
s301,确定循环流程逻辑fl脚本。
具体的,在本方案中,输入的流程逻辑为一个循环的流程,例如以下fl脚本所示:
flow_3{
funca
while(funcb){
funcc
funcd
}
funce
}
s302,利用预设编译器flc编译上述fl脚本得到c++语言结果。
将上述fl脚本利用编译器flc进行编译得到c++代码,得到c++代码后即可将该代码嵌入到系统的源码中。需要说明的是,flc是利用bison和flex编写得到的编译器。
s303,利用预设编译器flc编译上述fl脚本得到dot语言代码。
具体地,将上述fl语言转换为dot代码。dot代码如下所示:
digraphflow_3{
funca->funcb
subgraphcluster_funcb{
funcc->funcd
}
funcb->funcc[label="true"]
funcb->funce[label="false"]
funcd->funcb
funce->end
}
s304,将上述dot语言代码转换为流程图。
具体地,参考图5,将上述dot代码转换为流程图。
由此可见,本发明实施例提供的一种代码添加方法,可以通过只输入流程逻辑,再通过编译器进行编译的方式实现控制逻辑与业务实现分离,从而提高了流程的可控制性,并且通过将dot代码转换为流程图实现了流程的可视化,便于流程调整和优化。
下面对本发明实施例提供的一种代码添加系统进行介绍,下文描述的一种代码添加系统与上文描述的一种代码添加方法可以相互参照。
参见图6,本发明实施例提供的一种代码添加系统,具体包括:
确定模块401,用于确定流程逻辑。
在本方案中,开发人员只需要输入简单的流程逻辑,而不要编写流程控制逻辑与业务实现混杂在一起的代码。
编译模块402,用于利用预设编译器编译所述流程逻辑得到通用代码。
具体地,编译模块402利用预设的编译器编译上述流程逻辑,进而得到通用代码,也就是包括具体控制逻辑、具体业务实现的代码。
需要说明的是,流程逻辑可以是只表示流程的简单代码,而编译器可以利用如语法分析器的工具,根据具体地流程逻辑代码与欲转换到的目标代码类型而编写的编译器,通过编译器可以将该代码解析为通用的目标代码,如c++代码、dot代码等。其中编译器可以是利用利用bison和flex编写的编译器,bison是属于gnu项目的一个语法分析器生成器。bison把一个关于“向前查看、从左到右、最右”(lalr)上下文无关文法的描述转化成可以分析该文法的c或c++程序。它也可以为二义文法生成“通用的从左到右”(glr)语法分析器;flex是一个生成扫描器(scanner)的工具,生成的扫描器能够识别文本中的词法模式(lexicalpattern)。
需要说明的是,流程逻辑可以是利用以下任意一项或多项作为关键字的流程代码:
var、for、while、if、else、break、continue、goto、node。
例如,确定模块401可以首先确定输入的流程逻辑为:
flow_1{
funca
funcb
}
即,顺序执行funca、funcb两个函数,上述代码中,只是简单的列出流程逻辑,即funca、funcb的执行流程,而没有具体的实现内容,编译模块402可以通过预设的编译器,将其编译成具有流程控制逻辑和业务实现的代码,例如c++代码:
#include<list>
#include“param.h”
usgingnamespacestd;
staticintfunca(list<cparambase*>p1,list<cparamext*>p2)
{
}
staticintfuncb(list<cparambase*>p1,list<cparamext*>p2)
{
}
intflow_entry(list<cparambase*>p1,list<cparamext*>p2)
{
funca(p1,p2);
funcb(p1,p2);
}
嵌入模块403,用于将所述通用代码嵌入至预设源码。
将流程逻辑转换为通用代码后,嵌入模块403将该通用代码之间嵌入到存储系统的实现源码中。
由此可见,本发明实施例提供的一种代码添加系统,可以只输入简单的流程逻辑,确定模块401在确定该流程逻辑后,编译模块402利用预设的编译器将流程逻辑转换为既有流程控制逻辑又有业务实现的通用代码,得到通用代码后嵌入模块再将其嵌入到源码。由于只需要输入简单的流程逻辑,提高了流程的可控制性,便于流程调整和优化。
下面对本发明实施例提供的一种代码添加装置进行介绍,下文描述的一种代码添加装置与上文描述的一种代码添加方法可以相互参照。
本发明实施例提供的一种代码添加装置,具体包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上述任一实施例所述代码添加方法的步骤。
下面对本发明实施例提供的一种计算机可读存储介质进行介绍,下文描述的一种计算机可读存储介质与上文描述的一种代码添加方法可以相互参照。
本发明实施例提供的一种计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一实施例所述代码添加法的步骤。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。