CN108563447A - 一种代码添加方法、系统、装置及计算机可读存储介质 - Google Patents

一种代码添加方法、系统、装置及计算机可读存储介质 Download PDF

Info

Publication number
CN108563447A
CN108563447A CN201810335627.0A CN201810335627A CN108563447A CN 108563447 A CN108563447 A CN 108563447A CN 201810335627 A CN201810335627 A CN 201810335627A CN 108563447 A CN108563447 A CN 108563447A
Authority
CN
China
Prior art keywords
code
flow
compiler
flow logic
versatility
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201810335627.0A
Other languages
English (en)
Inventor
李成杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhengzhou Yunhai Information Technology Co Ltd
Original Assignee
Zhengzhou Yunhai Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhengzhou Yunhai Information Technology Co Ltd filed Critical Zhengzhou Yunhai Information Technology Co Ltd
Priority to CN201810335627.0A priority Critical patent/CN108563447A/zh
Publication of CN108563447A publication Critical patent/CN108563447A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种代码添加方法、系统、装置及计算机可读存储介质,其中方法包括:确定流程逻辑;利用预设编译器编译所述流程逻辑得到通用代码;将所述通用代码嵌入至预设源码。由此可见,本发明提供的一种代码添加方法,可以只输入简单的流程逻辑,系统在确定该流程逻辑后,利用预设的编译器将流程逻辑转换为既有流程控制逻辑又有业务实现的通用代码,得到通用代码后再将其嵌入到源码。由于只需要输入简单的流程逻辑,提高了流程的可控制性,便于流程调整和优化。

Description

一种代码添加方法、系统、装置及计算机可读存储介质
技术领域
本发明涉及计算机语言领域,更具体地说,涉及代码添加方法、系统、装置及计算机可读存储介质。
背景技术
目前,在分布式存储系统中越来越多的控制操作、业务实现都需要由代码实现。但是目前现有系统中的很多流程控制逻辑与具体业务实现混杂在一起,需要开发人员理解与编写的代码量很大,从而对理解和修改这样的复杂流程造成了困难,同时也不容易实现对功能的灵活配置。
因此,如何方便地调整流程,是本领域技术人员需要解决的问题。
发明内容
本发明的目的在于提供一种代码添加方法、系统、装置及计算机可读存储介质,以方便地调整流程。
为实现上述目的,本发明实施例提供了如下技术方案:
一种代码添加方法,包括:
确定流程逻辑;
利用预设编译器编译所述流程逻辑得到通用代码;
将所述通用代码嵌入至预设源码。
其中,所述流程逻辑包括:
利用以下任意一项或多项作为关键字的流程代码:
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)的工具,生成的扫描器能够识别文本中的词法模式(lexical pattern)。
需要说明的是,流程逻辑可以是利用以下任意一项或多项作为关键字的流程代码:
Var、for、while、if、else、break、continue、goto、node。
例如,可以首先确定输入的流程逻辑为:
Flow_1{
FuncA
FuncB
}
即,顺序执行FuncA、FuncB两个函数,上述代码中,只是简单的列出流程逻辑,即FuncA、FuncB的执行流程,而没有具体的实现内容,则可以通过预设的编译器,将其编译成具有流程控制逻辑和业务实现的代码,例如C++代码:
#include<list>
#include“param.h”
usging namespace std;
static int FuncA(list<CParamBase*>p1,list<CParamExt*>p2)
{
}
Static int FuncB(list<CParamBase*>p1,list<CParamExt*>p2)
{
}
Int flow_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
Else IF(FuncD)FuncE
Else FuncF
FuncG
}
将上述流程逻辑编译为dot语言为:
digraph Flow_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代码如下所示:
Digraph Flow_3{
FuncA->FuncB
Subgraph cluster_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)的工具,生成的扫描器能够识别文本中的词法模式(lexical pattern)。
需要说明的是,流程逻辑可以是利用以下任意一项或多项作为关键字的流程代码:
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”
usging namespace std;
static int FuncA(list<CParamBase*>p1,list<CParamExt*>p2)
{
}
Static int FuncB(list<CParamBase*>p1,list<CParamExt*>p2)
{
}
Int flow_entry(list<CParamBase*>p1,list<CParamExt*>p2)
{
FuncA(p1,p2);
FuncB(p1,p2);
}
嵌入模块403,用于将所述通用代码嵌入至预设源码。
将流程逻辑转换为通用代码后,嵌入模块403将该通用代码之间嵌入到存储系统的实现源码中。
由此可见,本发明实施例提供的一种代码添加系统,可以只输入简单的流程逻辑,确定模块401在确定该流程逻辑后,编译模块402利用预设的编译器将流程逻辑转换为既有流程控制逻辑又有业务实现的通用代码,得到通用代码后嵌入模块再将其嵌入到源码。由于只需要输入简单的流程逻辑,提高了流程的可控制性,便于流程调整和优化。
下面对本发明实施例提供的一种代码添加装置进行介绍,下文描述的一种代码添加装置与上文描述的一种代码添加方法可以相互参照。
本发明实施例提供的一种代码添加装置,具体包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上述任一实施例所述代码添加方法的步骤。
下面对本发明实施例提供的一种计算机可读存储介质进行介绍,下文描述的一种计算机可读存储介质与上文描述的一种代码添加方法可以相互参照。
本发明实施例提供的一种计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一实施例所述代码添加法的步骤。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (10)

1.一种代码添加方法,其特征在于,包括:
确定流程逻辑;
利用预设编译器编译所述流程逻辑得到通用代码;
将所述通用代码嵌入至预设源码。
2.根据权利要求1所述的方法,其特征在于,所述流程逻辑包括:
利用以下任意一项或多项作为关键字的流程代码:
Var、for、while、if、else、break、continue、goto、node。
3.根据权利要求1所述的方法,其特征在于,所述通用代码包括:
C++语言代码或dot语言代码。
4.根据权利要求3所述的方法,其特征在于,当所述通用代码为dot语言代码时,所述利用预设编译器编译所述流程逻辑得到通用代码之后,还包括:
将所述通用代码转换为流程图形。
5.根据权利要求1至4所述的方法,其特征在于,所述预设编译器,包括:
利用bison和flex编写的编译器。
6.一种代码添加系统,其特征在于,包括:
确定模块,用于确定流程逻辑;
编译模块,用于利用预设编译器编译所述流程逻辑得到通用代码;
嵌入模块,用于将所述通用代码嵌入至预设源码。
7.根据权利要求6所述的系统,其特征在于,所述流程逻辑包括:
利用以下任意一项或多项作为关键字的流程代码:
Var、for、while、if、else、break、continue、goto、node。
8.根据权利要求6或7所述的系统,其特征在于,预设编译器,包括:
利用bison和flex编写的编译器。
9.一种代码添加装置,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至5任一项所述代码添加方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至5任一项所述代码添加法的步骤。
CN201810335627.0A 2018-04-13 2018-04-13 一种代码添加方法、系统、装置及计算机可读存储介质 Pending CN108563447A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810335627.0A CN108563447A (zh) 2018-04-13 2018-04-13 一种代码添加方法、系统、装置及计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810335627.0A CN108563447A (zh) 2018-04-13 2018-04-13 一种代码添加方法、系统、装置及计算机可读存储介质

Publications (1)

Publication Number Publication Date
CN108563447A true CN108563447A (zh) 2018-09-21

Family

ID=63535133

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810335627.0A Pending CN108563447A (zh) 2018-04-13 2018-04-13 一种代码添加方法、系统、装置及计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN108563447A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113094044A (zh) * 2019-12-23 2021-07-09 福建天泉教育科技有限公司 一种编写ppt ui插件代码的方法及终端

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101004676A (zh) * 2006-01-18 2007-07-25 大同股份有限公司 高阶程序语言自动转换成活动图的方法
CN101436050A (zh) * 2007-11-12 2009-05-20 上海电气集团股份有限公司 用于开放式数控系统的图形化交互式编程单元及方法
CN103051485A (zh) * 2013-01-10 2013-04-17 太仓市同维电子有限公司 一种用于gpon的业务分析方法
US20130212568A1 (en) * 2012-02-10 2013-08-15 Oracle International Corporation Method and Apparatus for Synchronization Annotation
CN106919434A (zh) * 2017-03-22 2017-07-04 恒生电子股份有限公司 一种代码生成方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101004676A (zh) * 2006-01-18 2007-07-25 大同股份有限公司 高阶程序语言自动转换成活动图的方法
CN101436050A (zh) * 2007-11-12 2009-05-20 上海电气集团股份有限公司 用于开放式数控系统的图形化交互式编程单元及方法
US20130212568A1 (en) * 2012-02-10 2013-08-15 Oracle International Corporation Method and Apparatus for Synchronization Annotation
CN103051485A (zh) * 2013-01-10 2013-04-17 太仓市同维电子有限公司 一种用于gpon的业务分析方法
CN106919434A (zh) * 2017-03-22 2017-07-04 恒生电子股份有限公司 一种代码生成方法及装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113094044A (zh) * 2019-12-23 2021-07-09 福建天泉教育科技有限公司 一种编写ppt ui插件代码的方法及终端
CN113094044B (zh) * 2019-12-23 2023-09-15 福建天泉教育科技有限公司 一种编写ppt ui插件代码的方法及终端

Similar Documents

Publication Publication Date Title
US20070226720A1 (en) System and Method for Efficiently Passing Information Between Compiler and Post-Compile-Time Software
US8572554B2 (en) Method and system for integrating Java and JavaScript technologies
US9098299B2 (en) Run time incremental compilation of script code
Wu et al. Grammar‐driven generation of domain‐specific language debuggers
US9552195B2 (en) Enlarging control regions to optimize script code compilation
US20090328016A1 (en) Generalized expression trees
CN108595334B (zh) 一种计算Java程序动态切片的方法、装置及可读存储介质
Schardl et al. Tapir: Embedding recursive fork-join parallelism into llvm’s intermediate representation
JP6357814B2 (ja) 未完成ソフトウェアの分析
US8694978B1 (en) Function side-effect modeling by prototyping
US8762974B1 (en) Context-sensitive compiler directives
CN109359055B (zh) 一种数据测试的方法和设备
US8875089B2 (en) Workspace model for interrelated projects
CN108563447A (zh) 一种代码添加方法、系统、装置及计算机可读存储介质
US20170206068A1 (en) Program optimization based on directives for intermediate code
US9176845B2 (en) Use of compiler-introduced identifiers to improve debug information pertaining to user variables
Komatsu et al. Translation of large-scale simulation codes for an OpenACC platform using the Xevolver framework
Son et al. Design and implementation of an objective-C compiler for the virtual machine on smart phone
US10521206B2 (en) Supporting compiler variable instrumentation for uninitialized memory references
US8984492B2 (en) Incremental compilation of a script code in a distributed environment
EP3996009A1 (en) Method and apparatus of converting schema in deep learning freamwork, and computer storage medium
CN113448874A (zh) 一种单元测试脚本的生成方法及装置
CN112799724A (zh) 一种稳定控制装置策略表解析计算方法及装置
JP2009258796A (ja) プログラム開発装置及びプログラム開発方法
KR20200051218A (ko) Gas 절감이 가능한 스마트 컨트랙트 분석 장치 및 방법

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20180921