CN115048104A - 基于语法树的代码生成方法及其装置、电子设备 - Google Patents
基于语法树的代码生成方法及其装置、电子设备 Download PDFInfo
- Publication number
- CN115048104A CN115048104A CN202210675213.9A CN202210675213A CN115048104A CN 115048104 A CN115048104 A CN 115048104A CN 202210675213 A CN202210675213 A CN 202210675213A CN 115048104 A CN115048104 A CN 115048104A
- Authority
- CN
- China
- Prior art keywords
- logic
- syntax tree
- node
- logical
- preset
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/34—Graphical or visual programming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
Abstract
本发明公开了一种基于语法树的代码生成方法及其装置、电子设备,涉及金融科技领域或其他相关领域,其中,该生成方法包括:接收初始流程图和逻辑编排请求,基于预设语法树策略,将初始流程图转换为初始语法树结构,对操作行为进行逻辑校验,得到校验结果,并在校验结果指示操作行为通过逻辑校验的情况下,更新初始语法树结构,得到目标语法树结构,基于目标语法树结构,采用预设生成策略,生成目标代码。本发明解决了相关技术中需要手动输入交互事件的逻辑代码,导致开发效率不高的技术问题。
Description
技术领域
本发明涉及金融科技领域,具体而言,涉及一种基于语法树的代码生成方法及其装置、电子设备。
背景技术
随着信息化的发展,越来越多的业务场景需要前端开发的支持,因此,为了提升开发效率和降低开发门槛,低代码平台技术随之应运而生。低代码平台技术通过可视化的模型和图形设计技术来构建软件,减少了前端开发的时间和成本。
相关技术中,在进行前端页面开发时,大多低代码平台采用的是可视化的视图UI界面(即用户界面),通过UI界面生成业务代码之后,需要手动输入交互事件的逻辑代码,导致开发效率不高,可维护性不高。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种基于语法树的代码生成方法及其装置、电子设备,以至少解决相关技术中需要手动输入交互事件的逻辑代码,导致开发效率不高的技术问题。
根据本发明实施例的一个方面,提供了一种基于语法树的代码生成方法,包括:接收初始流程图和逻辑编排请求,其中,所述逻辑编排请求中至少携带有:外部终端执行的操作行为;基于预设语法树策略,将所述初始流程图转换为初始语法树结构;对所述操作行为进行逻辑校验,得到校验结果,并在所述校验结果指示所述操作行为通过逻辑校验的情况下,更新所述初始语法树结构,得到目标语法树结构;基于所述目标语法树结构,采用预设生成策略,生成目标代码,其中,所述预设生成策略包括:语法树结构中的关键字与代码表现形式之间的映射关系。
可选地,在接收初始流程图和逻辑编排请求之前,还包括:创建逻辑编排界面,其中,所述逻辑编排界面至少包括:逻辑方法定义区、逻辑编排画布、逻辑元件库、属性配置区域,所述逻辑方法定义区用于创建和删除逻辑方法,所述逻辑编排画布用于绘制所述逻辑方法的流程图,所述逻辑元件库用于定义和展示逻辑元件,所述属性配置区域用于展示和修改所述逻辑元件的元件属性;基于所述逻辑方法定义区,监听逻辑创建请求。
可选地,在监听逻辑创建请求之后,还包括:在监听到所述逻辑创建请求的情况下,接收所述逻辑创建请求,其中,所述逻辑创建请求至少包括:逻辑数据,所述逻辑数据至少包括:逻辑名称、输入参数、输出参数、预设变量;基于所述逻辑数据,确定开始节点和结束节点;基于所述开始节点和所述结束节点,控制所述逻辑编排画布绘制所述初始流程图。
可选地,在基于预设语法树策略,将所述初始流程图转换为初始语法树结构之前,还包括:确定所述逻辑方法的第一语法树属性,其中,所述第一语法树属性至少包括:第一语法树标识、逻辑方法名称、逻辑方法入参、逻辑方法出参、逻辑方法预设变量、逻辑方法主体、逻辑方法标识;确定所述逻辑元件的第二语法树属性,其中,所述第二语法树属性包括:元件属性和元件扩展属性,所述元件属性至少包括:第二语法树标识、逻辑元件标识、父节点标识、逻辑元件子类型,所述元件扩展属性包括下述至少之一:预设条件、逻辑块、被调用的逻辑方法标识、被调用的逻辑方法入参、操作符号、操作符号左侧表达式、操作符号右侧表达式、参数类型标识、参数数值;基于所述第一语法树属性和所述第二语法树属性,确定所述预设语法树策略。
可选地,基于预设语法树策略,将所述初始流程图转换为初始语法树结构的步骤,包括:基于所述第一语法树属性,确定所述逻辑数据中各参数对应的第一语法树表示;将所述开始节点和所述结束节点插入到所述逻辑方法主体的逻辑元件数组中;基于所述第二语法树属性,确定所述开始节点的第二语法树表示以及所述结束节点的第三语法树表示;将所述第三语法树表示中的所述父节点标识指向所述第二语法树表示中的所述逻辑元件标识;基于所述初始流程图,组合所述第一语法树表示、所述第二语法树表示以及所述第三语法树表示,得到所述初始语法树结构。
可选地,在接收初始流程图和逻辑编排请求之前,还包括:为所述逻辑编排画布中的逻辑节点绑定预设鼠标事件,其中,所述预设鼠标事件包括下述至少之一:鼠标点击事件、鼠标按下事件、鼠标移动事件、鼠标弹起事件;基于所述预设鼠标事件,捕捉操作行为,其中,所述操作行为包括下述至少之一:逻辑节点移入、逻辑节点修改、逻辑节点删除;组合所有所述操作行为,得到所述逻辑编排请求。
可选地,在所述校验结果指示所述操作行为通过逻辑校验的情况下,更新所述初始语法树结构,得到目标语法树结构的步骤,包括:执行所述逻辑编排请求,绘制目标流程图;基于所述预设鼠标事件,监听所述操作行为得到的坐标位置;在所述坐标位置与所述目标流程图中的连线位置重合的情况下,对所述操作行为进行语义检查,其中,所述语义检查包括下述至少之一:检查拖拽到赋值逻辑节点、比较运算逻辑节点、逻辑运算逻辑节点的左右操作符的逻辑节点类型是否一致,检查拖拽到条件判断逻辑节点的判断条件逻辑元件是否是真结果或假结果的逻辑节点,检查拖拽到预设流程的逻辑节点是否是表达式类型的逻辑节点;在所述操作行为的语义检查通过的情况下,基于所述目标流程图,更新所述初始语法树结构,得到目标语法树结构。
可选地,基于所述目标语法树结构,采用预设生成策略,生成目标代码的步骤,包括:扫描所述目标语法树结构,得到扫描结果;采用预设生成策略,将所述扫描结果中的每个所述关键字对应的键值对转换为与所述关键字对应的代码表现形式的代码子片断;基于所有所述代码子片断,生成所述目标代码。
根据本发明实施例的另一方面,还提供了一种基于语法树的代码生成装置,包括:接收单元,用于接收初始流程图和逻辑编排请求,其中,所述逻辑编排请求中至少携带有:外部终端执行的操作行为;转换单元,用于基于预设语法树策略,将所述初始流程图转换为初始语法树结构;更新单元,用于对所述操作行为进行逻辑校验,得到校验结果,并在所述校验结果指示所述操作行为通过逻辑校验的情况下,更新所述初始语法树结构,得到目标语法树结构;生成单元,用于基于所述目标语法树结构,采用预设生成策略,生成目标代码,其中,所述预设生成策略包括:语法树结构中的关键字与代码表现形式之间的映射关系。
可选地,所述生成装置还包括:第一创建模块,用于在接收初始流程图和逻辑编排请求之前,创建逻辑编排界面,其中,所述逻辑编排界面至少包括:逻辑方法定义区、逻辑编排画布、逻辑元件库、属性配置区域,所述逻辑方法定义区用于创建和删除逻辑方法,所述逻辑编排画布用于绘制所述逻辑方法的流程图,所述逻辑元件库用于定义和展示逻辑元件,所述属性配置区域用于展示和修改所述逻辑元件的元件属性;第一监听模块,用于基于所述逻辑方法定义区,监听逻辑创建请求。
可选地,所述生成装置还包括:第一接收模块,用于在监听逻辑创建请求之后,在监听到所述逻辑创建请求的情况下,接收所述逻辑创建请求,其中,所述逻辑创建请求至少包括:逻辑数据,所述逻辑数据至少包括:逻辑名称、输入参数、输出参数、预设变量;第一确定模块,用于基于所述逻辑数据,确定开始节点和结束节点;第一绘制模块,用于基于所述开始节点和所述结束节点,控制所述逻辑编排画布绘制所述初始流程图。
可选地,所述生成装置还包括:第二确定模块,用于在基于预设语法树策略,将所述初始流程图转换为初始语法树结构之前,确定所述逻辑方法的第一语法树属性,其中,所述第一语法树属性至少包括:第一语法树标识、逻辑方法名称、逻辑方法入参、逻辑方法出参、逻辑方法预设变量、逻辑方法主体、逻辑方法标识;第三确定模块,用于确定所述逻辑元件的第二语法树属性,其中,所述第二语法树属性包括:元件属性和元件扩展属性,所述元件属性至少包括:第二语法树标识、逻辑元件标识、父节点标识、逻辑元件子类型,所述元件扩展属性包括下述至少之一:预设条件、逻辑块、被调用的逻辑方法标识、被调用的逻辑方法入参、操作符号、操作符号左侧表达式、操作符号右侧表达式、参数类型标识、参数数值;第四确定模块,用于基于所述第一语法树属性和所述第二语法树属性,确定所述预设语法树策略。
可选地,所述转换单元包括:第五确定模块,用于基于所述第一语法树属性,确定所述逻辑数据中各参数对应的第一语法树表示;第一插入模块,用于将所述开始节点和所述结束节点插入到所述逻辑方法主体的逻辑元件数组中;第六确定模块,用于基于所述第二语法树属性,确定所述开始节点的第二语法树表示以及所述结束节点的第三语法树表示;第一指向模块,用于将所述第三语法树表示中的所述父节点标识指向所述第二语法树表示中的所述逻辑元件标识;第一组合模块,用于基于所述初始流程图,组合所述第一语法树表示、所述第二语法树表示以及所述第三语法树表示,得到所述初始语法树结构。
可选地,所述生成装置还包括:第一绑定模块,用于在接收初始流程图和逻辑编排请求之前,为所述逻辑编排画布中的逻辑节点绑定预设鼠标事件,其中,所述预设鼠标事件包括下述至少之一:鼠标点击事件、鼠标按下事件、鼠标移动事件、鼠标弹起事件;第一捕捉模块,用于基于所述预设鼠标事件,捕捉操作行为,其中,所述操作行为包括下述至少之一:逻辑节点移入、逻辑节点修改、逻辑节点删除;第二组合模块,用于组合所有所述操作行为,得到所述逻辑编排请求。
可选地,所述更新单元包括:第一执行模块,用于执行所述逻辑编排请求,绘制目标流程图;第二监听模块,用于基于所述预设鼠标事件,监听所述操作行为得到的坐标位置;第一检查模块,用于在所述坐标位置与所述目标流程图中的连线位置重合的情况下,对所述操作行为进行语义检查,其中,所述语义检查包括下述至少之一:检查拖拽到赋值逻辑节点、比较运算逻辑节点、逻辑运算逻辑节点的左右操作符的逻辑节点类型是否一致,检查拖拽到条件判断逻辑节点的判断条件逻辑元件是否是真结果或假结果的逻辑节点,检查拖拽到预设流程的逻辑节点是否是表达式类型的逻辑节点;第一更新模块,用于在所述操作行为的语义检查通过的情况下,基于所述目标流程图,更新所述初始语法树结构,得到目标语法树结构。
可选地,所述生成单元包括:第一扫描模块,用于扫描所述目标语法树结构,得到扫描结果;第一转换模块,用于采用预设生成策略,将所述扫描结果中的每个所述关键字对应的键值对转换为与所述关键字对应的代码表现形式的代码子片断;第一生成模块,用于基于所有所述代码子片断,生成所述目标代码。
根据本发明实施例的另一方面,还提供了一种电子设备,包括一个或多个处理器和存储器,所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现上述所述的基于语法树的代码生成方法。
在本公开中,接收初始流程图和逻辑编排请求,基于预设语法树策略,将初始流程图转换为初始语法树结构,对操作行为进行逻辑校验,得到校验结果,并在校验结果指示操作行为通过逻辑校验的情况下,更新初始语法树结构,得到目标语法树结构,基于目标语法树结构,采用预设生成策略,生成目标代码。在本申请中,可先对逻辑编排请求中的操作行为进行逻辑校验,在校验通过的情况下,更新初始语法树结构,通过更新后的目标语法树结构,采用预设生成策略,生成目标代码,从而实现了自动生成业务交互逻辑代码的功能,提高了开发效率,增强了代码的可维护性,进而解决了相关技术中需要手动输入交互事件的逻辑代码,导致开发效率不高的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种可选的基于语法树的代码生成方法的流程图;
图2是根据本发明实施例的一种可选的逻辑方法初始化为初始语法树结构的示意图;
图3是根据本发明实施例的一种可选的插入到逻辑流程图的主体流程的示意图;
图4是根据本发明实施例的一种可选的插入到逻辑流程图的分支流程的示意图;
图5是根据本发明实施例的一种可选的在低代码平台中的可视化逻辑编排方法的示意图;
图6是根据本发明实施例的一种可选的基于语法树的代码生成装置的示意图;
图7是根据本发明实施例的一种用于基于语法树的代码生成方法的电子设备(或移动设备)的硬件结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为便于本领域技术人员理解本发明,下面对本发明各实施例中涉及的部分术语或名词做出解释:
抽象语法树(Abstract Syntax Tree,简称AST):是源代码语法结构的一种抽象表示,以树状的形式表示编程语言的语法结构,树上的每一个节点都表示源代码中的一种结构。
低代码平台:仅需少量编码甚至无需编码即可快速通过可视化拖拽的方式完成应用程序开发的平台。
逻辑元件:逻辑的组成单元,本申请是指编程语言逻辑表达式的抽象单元。
可视化逻辑编排:通过UI(User Interface)界面(即用户界面)的逻辑元件的排列组合,生成逻辑代码的过程。
需要说明的是,本公开中的基于语法树的代码生成方法及其装置可用于金融科技领域在基于语法树生成代码的情况下,也可用于除金融科技领域之外的任意领域在基于语法树生成代码的情况下,本公开中对基于语法树的代码生成方法及其装置的应用领域不做限定。
需要说明的是,本公开所涉及的相关信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于展示的数据、分析的数据等),均为经用户授权或者经过各方充分授权的信息和数据。例如,本系统和相关用户或机构间设置有接口,在获取相关信息之前,需要通过接口向前述的用户或机构发送获取请求,并在接收到前述的用户或机构反馈的同意信息后,获取相关信息。
本发明下述各实施例可应用于各种基于语法树生成代码的系统/应用/设备中。本发明为了解决低代码平台通过UI界面仅能生成前端界面代码,不能生成业务交互逻辑代码或者难以全面支持生成业务交互逻辑代码,导致低代码平台开发效率不高的问题,提出了一种低代码场景下可视化逻辑编排的实现方法,本发明中的可视化逻辑编排能够将原本晦涩难懂的代码通过流程图的形式表达出来,使得逻辑变的非常直观,可读性和可维护性变高,不用担心接手他人项目时,注释不规范,文档不全的问题,逻辑编排生成的逻辑图谱是天然的产品文档,能够减少应用开发人员的学习成本、提高工作效率。
下面结合各个实施例来详细说明本发明。
实施例一
根据本发明实施例,提供了一种基于语法树的代码生成方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1是根据本发明实施例的一种可选的基于语法树的代码生成方法的流程图,如图1所示,该方法包括如下步骤:
步骤S101,接收初始流程图和逻辑编排请求,其中,逻辑编排请求中至少携带有:外部终端执行的操作行为。
步骤S102,基于预设语法树策略,将初始流程图转换为初始语法树结构。
步骤S103,对操作行为进行逻辑校验,得到校验结果,并在校验结果指示操作行为通过逻辑校验的情况下,更新初始语法树结构,得到目标语法树结构。
步骤S104,基于目标语法树结构,采用预设生成策略,生成目标代码,其中,预设生成策略包括:语法树结构中的关键字与代码表现形式之间的映射关系。
通过上述步骤,可以接收初始流程图和逻辑编排请求,基于预设语法树策略,将初始流程图转换为初始语法树结构,对操作行为进行逻辑校验,得到校验结果,并在校验结果指示操作行为通过逻辑校验的情况下,更新初始语法树结构,得到目标语法树结构,基于目标语法树结构,采用预设生成策略,生成目标代码。在本发明实施例中,可先对逻辑编排请求中的操作行为进行逻辑校验,在校验通过的情况下,更新初始语法树结构,通过更新后的目标语法树结构,采用预设生成策略,生成目标代码,从而实现了自动生成业务交互逻辑代码的功能,提高了开发效率,增强了代码的可维护性,进而解决了相关技术中需要手动输入交互事件的逻辑代码,导致开发效率不高的技术问题。
下面结合上述各步骤对本发明实施例进行详细说明。
在本发明实施例中,一种可选的,在接收初始流程图和逻辑编排请求之前,还包括:创建逻辑编排界面,其中,逻辑编排界面至少包括:逻辑方法定义区、逻辑编排画布、逻辑元件库、属性配置区域,逻辑方法定义区用于创建和删除逻辑方法,逻辑编排画布用于绘制逻辑方法的流程图,逻辑元件库用于定义和展示逻辑元件,属性配置区域用于展示和修改逻辑元件的元件属性;基于逻辑方法定义区,监听逻辑创建请求。
在本发明实施例中,可以先创建逻辑编排界面(即在低代码平台显示可视化逻辑编排界面),该逻辑编排界面包括:逻辑方法定义区、逻辑编排画布、逻辑元件库、属性配置区域等,其中,
逻辑方法定义区是用于定义前端业务逻辑方法的区域(逻辑方法对应于一个函数过程),该逻辑方法定义区支持逻辑方法的创建和删除,以及展示已定义的逻辑方法。本实施例中,在创建逻辑方法时,对一个逻辑方法的定义过程包括:定义逻辑方法名称、定义输入参数、定义输出参数、定义局部变量等。此外,逻辑方法定义区还提供逻辑方法的引用查找功能,即查找逻辑方法被哪些逻辑方法或界面UI组件所引用。
逻辑编排画布是用于绘制前端业务逻辑方法的内部流程图的区域,在该逻辑编排画布绘制逻辑元件和逻辑元件之间的连线,形成逻辑方法的流程图,展示逻辑编排效果并自动生成逻辑方法的描述结构(即对应的AST语法树结构)。
逻辑元件库是用于定义和展示逻辑元件的区域,该逻辑元件库可以以可视化形式展示逻辑元件,从该逻辑元件库拖动逻辑元件到逻辑编排画布,实现逻辑方法流程图的绘制。
属性配置区域是用于展示和修改逻辑元件属性的区域。
本实施例可以在低代码平台逻辑方法定义区监听创建逻辑方法的行为(即基于逻辑方法定义区,监听逻辑创建请求)。
可选的,在监听逻辑创建请求之后,还包括:在监听到逻辑创建请求的情况下,接收逻辑创建请求,其中,逻辑创建请求至少包括:逻辑数据,逻辑数据至少包括:逻辑名称、输入参数、输出参数、预设变量;基于逻辑数据,确定开始节点和结束节点;基于开始节点和结束节点,控制逻辑编排画布绘制初始流程图。
在本发明实施例中,在低代码平台逻辑方法定义区监听到有创建逻辑方法的行为时(即在监听到逻辑创建请求的情况下),通过可视化交互窗口来接收逻辑方法初始化数据(即接收逻辑创建请求,该逻辑创建请求至少包括:逻辑数据,该逻辑数据至少包括:逻辑名称、输入参数、输出参数、预设变量等),低代码平台获得逻辑数据后,可以进行初始化操作,生成并初始化逻辑方法的流程图,具体可以先基于逻辑数据,确定开始节点和结束节点,之后,可以基于开始节点和结束节点,控制逻辑编排画布绘制初始流程图,该初始流程图包含两个逻辑节点:开始节点和结束节点,并且,开始节点和结束节点用连线连接。
可选的,在接收初始流程图和逻辑编排请求之前,还包括:为逻辑编排画布中的逻辑节点绑定预设鼠标事件,其中,预设鼠标事件包括下述至少之一:鼠标点击事件、鼠标按下事件、鼠标移动事件、鼠标弹起事件;基于预设鼠标事件,捕捉操作行为,其中,操作行为包括下述至少之一:逻辑节点移入、逻辑节点修改、逻辑节点删除;组合所有操作行为,得到逻辑编排请求。
在本发明实施例中,可以先给逻辑编排画布中的逻辑节点(本实施例中,当逻辑元件被拖拽到逻辑编排画布中时,可以将逻辑元件表征为逻辑节点)绑定预设鼠标事件(该预设鼠标事件包括:鼠标点击事件,鼠标按下事件、鼠标移动事件、鼠标弹起事件等),通过这些预设鼠标事件,捕捉用户的操作行为(用户的操作行为包括:逻辑节点移入、逻辑节点修改、逻辑节点删除等),然后,组合所有操作行为,得到逻辑编排请求。
步骤S101,接收初始流程图和逻辑编排请求,其中,逻辑编排请求中至少携带有:外部终端执行的操作行为。
在本发明实施例中,可以先接收初始流程图和逻辑编排请求,该逻辑编排请求中至少携带有:外部终端(如,计算机、移动终端等)执行的操作行为。
可选的,在基于预设语法树策略,将初始流程图转换为初始语法树结构之前,还包括:确定逻辑方法的第一语法树属性,其中,第一语法树属性至少包括:第一语法树标识、逻辑方法名称、逻辑方法入参、逻辑方法出参、逻辑方法预设变量、逻辑方法主体、逻辑方法标识;确定逻辑元件的第二语法树属性,其中,第二语法树属性包括:元件属性和元件扩展属性,元件属性至少包括:第二语法树标识、逻辑元件标识、父节点标识、逻辑元件子类型,元件扩展属性包括下述至少之一:预设条件、逻辑块、被调用的逻辑方法标识、被调用的逻辑方法入参、操作符号、操作符号左侧表达式、操作符号右侧表达式、参数类型标识、参数数值;基于第一语法树属性和第二语法树属性,确定预设语法树策略。
在本发明实施例中,AST语法树是一种预设形式(如,JSON形式)的数据结构,逻辑方法或逻辑元件都可以通过预设对象(如,JSON对象)表示,本实施例中,预设对象是用一对花括号括起来,包含多个键值对的数据结构。预设对象的键值对用来表示逻辑方法或逻辑元件的属性值。AST语法树中,预设对象的键值对的键(key)用字符串来表示,值(val)用预设对象、数组、数字、字符串或其他字面值(如,布尔值、空值等)来表示,并且,键可以用来表示逻辑方法或逻辑元件的属性名称,值可以用来表示具体的属性值(该属性值可以是一个内部的预设对象)。
在本发明实施例中,可以先确定逻辑方法的第一语法树属性(即逻辑方法的AST语法树属性),该第一语法树属性至少包括:(1)AST语法树标识(即第一语法树标识),可以用字符串“logic”表示,用以表明本AST语法树是表示一个逻辑方法的语法树;(2)逻辑方法名称可以用逻辑方法的名称字符串表示;(3)逻辑方法入参:一个逻辑方法的输入参数可以有零个或多个,用数组来表示,可以用预设对象表示自定义的入参类型;(3)逻辑方法出参:一个逻辑方法的输出参数可以有零个或多个,用数组形式表示,可以用预设对象表示自定义的出参类型;(5)逻辑方法预设变量(即逻辑方法局部变量):一个逻辑方法的局部变量可以有零个或多个,用数组形式表示,可以用预设对象表示自定义的局部变量类型;(6)逻辑方法主体:逻辑方法由多个逻辑元件组成,用数组形式表示,数组元素对应逻辑元件的AST语法树;(7)逻辑方法标识ID:逻辑方法的唯一标识;(8)其他属性:逻辑方法还可以包括其他属性,如,触发类型(点击、双击等)、创建时间、是否可编辑等。
在本发明实施例中,逻辑元件的AST语法树是对代码表达式语句的抽象,表达式包括:逻辑表达式(如,条件判断、循环、路由跳转、逻辑调用、接口调用、赋值、消息提示、日志输出,代码块(如JS代码块)等)、原子项(如,布尔值、数字、字符串、变量、内置函数(如平台实现的工具函数)等)、算术运算(加、减、乘、除、取余等)、比较运算(等于、不等于、大于、小于、大于等于、小于等于等)、逻辑运算(与、或、非等)。
本发明实施例可以确定逻辑元件的第二语法树属性(即逻辑元件的AST语法树的属性),该第二语法树属性包括:元件属性(即元件的基本属性)和元件扩展属性,逻辑元件的AST语法树的基本属性包括:(1)AST语法树标识(即第二语法树标识),可以用字符串“logicUnit”表示,用以表明本AST语法树是表示一个逻辑元件的语法树;(2)逻辑元件标识ID:逻辑元件的唯一标识;(3)父节点标识ID:在逻辑方法的流程图中,一般逻辑元件(除位于开始位置的逻辑元件外)的前序位置上,都会有另一逻辑元件,且与它相连,称为逻辑元件的父节点,则此处记录父节点标识ID;(4)逻辑元件子类型:用于区分不同类型的逻辑元件,逻辑元件的类型包括条件判断、循环、比较运算等;(6)其他属性:包括逻辑元件名称、是否可编辑、位置坐标(在逻辑编排画布中的坐标)等。
本实施例中,元件扩展属性包括:预设条件(如,判断条件、循环条件等)、逻辑块、被调用的逻辑方法标识、被调用的逻辑方法入参、操作符号、操作符号左侧表达式、操作符号右侧表达式、参数类型标识、参数数值等。下面以条件判断、循环、调用逻辑、赋值、算术运算、比较运算、逻辑运算等类型,对逻辑元件的AST语法树扩展属性进行说明:
条件判断逻辑元件的AST语法树的扩展属性包括:(1)判断条件:原子类型的“真或假”,或值为“真或假”的表达式;(2)条件为“真”时执行的逻辑块(逻辑元件组成的数组,这些逻辑元件之间通过父节点标识关联);(3)条件为“假”时执行的逻辑块;
循环表达式逻辑元件的AST语法树的扩展属性包括:(1)循环条件,用于控制循环;(2)循环内执行的逻辑块;
调用表达式逻辑元件的AST语法树的扩展属性包括:(1)被调用的逻辑方法的逻辑方法标识;(2)被调用的逻辑方法的入参;
赋值表达式、算术运算、比较运算、逻辑运算逻辑元件的AST语法树的扩展属性包括:(1)操作符号:赋值(=)、算数运算(加(+)、减(-)、乘(*)、除(/)、取余(%))、比较运算(等于(==)、不等于(!==)、大于(>),大于等于(>=)、小于(<)、小于等于(<=))、逻辑运算(与(&&)、或(||)、非(!))等;(2)操作符号左侧表达式;(3)操作符号右侧表达式;
数字类型逻辑元件的AST语法树的扩展属性包括:(1)类型标识:整型、浮点型等;(2)具体参数数值。
然后,可以基于第一语法树属性和第二语法树属性,确定预设语法树策略(例如,将逻辑数据,按照相应的语法树属性,转换成语法树表示)。
步骤S102,基于预设语法树策略,将初始流程图转换为初始语法树结构。
可选的,基于预设语法树策略,将初始流程图转换为初始语法树结构的步骤,包括:基于第一语法树属性,确定逻辑数据中各参数对应的第一语法树表示;将开始节点和结束节点插入到逻辑方法主体的逻辑元件数组中;基于第二语法树属性,确定开始节点的第二语法树表示以及结束节点的第三语法树表示;将第三语法树表示中的父节点标识指向第二语法树表示中的逻辑元件标识;基于初始流程图,组合第一语法树表示、第二语法树表示以及第三语法树表示,得到初始语法树结构。
在本发明实施例中,可以基于第一语法树属性,确定逻辑数据中各参数对应的第一语法树表示,并在逻辑方法主体的逻辑元件数组中插入开始节点和结束节点,之后,可以基于第二语法树属性,确定开始节点的第二语法树表示以及结束节点的第三语法树表示,且使结束节点的父节点标识指向开始节点的逻辑元件标识(即将第三语法树表示中的父节点标识指向第二语法树表示中的逻辑元件标识),然后,可以组合第一语法树表示、第二语法树表示以及第三语法树表示,得到初始语法树结构。
图2是根据本发明实施例的一种可选的逻辑方法初始化为初始语法树结构的示意图,如图2所示,包括:逻辑方法流程图和初始化的逻辑方法AST语法树,其中,逻辑方法流程图包括:开始和结束两个节点,可以将逻辑方法流程图转换为初始化的逻辑方法AST语法树,具体为,先构建逻辑方法初始化AST语法树,该逻辑方法初始化AST语法树在一对花括号中包括:AST语法树标识:‘logic’,ID标识:XXX,逻辑方法名称:XXX,逻辑方法入参:[XXX],逻辑方法出参:[XXX],逻辑方法局部变量:[XXX],逻辑方法主体:[开始逻辑节点AST语法树,结束逻辑节点AST语法树]等,其中,开始逻辑节点AST语法树在一对花括号中包括:AST语法树标识:‘logicUnit’,ID标识:XXX,父节点ID标识:‘’,逻辑元件子类型:‘start’等,结束逻辑节点AST语法树在一对花括号中包括:AST语法树标识:‘logicUnit’,ID标识:XXX,父节点ID标识:XXX,逻辑元件子类型:‘end’等。
在本发明实施例中,在逻辑方法的AST语法树中用键值kv表示多个属性,如,逻辑方法名称,逻辑方法入参、逻辑方法出参等,还可以包括一个关键的属性:逻辑方法主体,逻辑方法主体内包含两个节点:开始节点和结束节点,可以用内部的预设对象表示,开始节点和结束节点内用kv表示了各自的属性内容。
步骤S103,对操作行为进行逻辑校验,得到校验结果,并在校验结果指示操作行为通过逻辑校验的情况下,更新初始语法树结构,得到目标语法树结构。
可选的,在校验结果指示操作行为通过逻辑校验的情况下,更新初始语法树结构,得到目标语法树结构的步骤,包括:执行逻辑编排请求,绘制目标流程图;基于预设鼠标事件,监听操作行为得到的坐标位置;在坐标位置与目标流程图中的连线位置重合的情况下,对操作行为进行语义检查,其中,语义检查包括下述至少之一:检查拖拽到赋值逻辑节点、比较运算逻辑节点、逻辑运算逻辑节点的左右操作符的逻辑节点类型是否一致,检查拖拽到条件判断逻辑节点的判断条件逻辑元件是否是真结果或假结果的逻辑节点,检查拖拽到预设流程的逻辑节点是否是表达式类型的逻辑节点;在操作行为的语义检查通过的情况下,基于目标流程图,更新初始语法树结构,得到目标语法树结构。
在本发明实施例中,可以执行逻辑编排请求,绘制目标流程图,并基于预设鼠标事件,监听操作行为得到的坐标位置。例如,对于逻辑编排请求中的逻辑节点移入,可以在逻辑元件库所在区域内,在鼠标点击某个逻辑元件图标,当该逻辑元件监听到鼠标按下事件时,创建该逻辑节点并初始化它的AST语法树,然后,随着用户拖动该逻辑节点到逻辑编排画布所在的区域,通过鼠标移动事件监听鼠标实时坐标位置,在逻辑编排画布的实时坐标位置处,绘制该逻辑节点的虚拟画像,从而可以按照逻辑编排请求中的操作行为,绘制相应的目标流程图,并通过预设鼠标事件,监听操作行为得到的坐标位置,之后,当鼠标弹起时,通过鼠标弹起事件监听到弹起行为,进行逻辑校验,逻辑校验的内容包括:(1)检测当前鼠标坐标位置是否与逻辑流程图(即目标流程图)中连线位置重合;(2)在坐标位置与目标流程图中的连线位置重合的情况下,对操作行为进行语义检查(即检查操作行为的嵌套逻辑语义是否合法),其中,嵌套语义合法性检查的流程如下:
(1)检查拖拽到赋值逻辑节点、比较运算逻辑节点、逻辑运算逻辑节点的左右操作符的逻辑节点类型是否一致,例如,赋值逻辑节点:a=1,“=”操作符右侧是数字类型,若逻辑节点a是数字类型,则合法,逻辑节点a是字符串类型,则不合法;比较运算逻辑节点:3>2,“>”操作符左右侧都是数字类型,则合法;‘a’>1,“>”操作符左侧是字符串类型,“>”操作符右侧是字符串类型,则不合法;
(2)拖拽到条件判断逻辑节点的判断条件逻辑元件必须是结果为“真”或“假”的逻辑节点(即检查拖拽到条件判断逻辑节点的判断条件逻辑元件是否是真结果或假结果的逻辑节点),例如,将布尔值逻辑节点、比较运算逻辑节点或逻辑运算逻辑节点,拖拽到条件判断逻辑节点的判断条件位置,则合法;将循环逻辑节点或条件判断逻辑节点等,拖拽到条件判断逻辑节点的判断条件位置,则不合法;
(3)拖拽到逻辑方法主体流程的逻辑节点必须是表达式类型的逻辑节点(即检查拖拽到预设流程的逻辑节点是否是表达式类型的逻辑节点,该预设流程即为主体流程),例如,将条件判断逻辑节点、循环逻辑节点或调用表达式逻辑节点,拖拽到逻辑方法主流程位置,则合法;将布尔值逻辑节点、数字逻辑节点或字符串逻辑节点,拖拽到逻辑方法主流程位置,则不合法;
在操作行为的语义检查通过的情况下,可以在鼠标位置处绘制逻辑节点对应的可视化图形,并基于目标流程图,更新初始语法树结构,得到目标语法树结构。
另一种可选的,逻辑节点移入包括下述至少之一:将逻辑节点插入到主体流程、将逻辑节点插入到分支流程,其中,将逻辑节点插入到主体流程为将逻辑节点的语法树表示插入到语法树结构的逻辑方法主体的数组中,将逻辑节点插入到分支流程为将逻辑节点的语法树表示插入到当前逻辑节点对应的分支语法树结构的分支属性中。
在本实施例中,逻辑节点移入过程中有两种插入场景:(1)将逻辑节点插入到逻辑方法流程图的主体流程中;(2)插入到逻辑流程图的分支流程中,其中,
插入到逻辑流程图的主体流程为:如果逻辑节点的被拖拽到逻辑方法流程图的主体流程中,则将逻辑节点的AST语法树插入到逻辑方法AST语法树的逻辑方法主体数组中。
图3是根据本发明实施例的一种可选的插入到逻辑流程图的主体流程的示意图,如图3所示,包括:逻辑流程图和逻辑方法AST语法树,其中,逻辑流程图包括:开始和结束两个节点,以及插入主体流程中的条件分支节点(包括是、否两个条件),可以将逻辑流程图转换为逻辑方法AST语法树,具体为,先构建逻辑方法AST语法树,该逻辑方法AST语法树在一对花括号中包括:AST语法树标识:‘logic’,ID标识:XXX,逻辑方法名称:XXX,逻辑方法入参:[XXX],逻辑方法出参:[XXX],逻辑方法局部变量:[XXX],逻辑方法主体:[开始逻辑节点AST语法树,...,条件判断逻辑节点AST语法树,…,结束逻辑节点AST语法树]等,其中,条件判断逻辑节点AST语法树在一对花括号中包括:判断条件:{XXX},条件为“真”执行的逻辑块:{XXX},条件为“假”执行的逻辑块:{XXX},类型标识:“ifStatement”等。
本实施例中,若条件判断逻辑节点被拖拽到逻辑方法流程图的主体流程中,则将条件分支逻辑节点的AST语法树插入到逻辑方法AST语法树的逻辑方法主体数组中,逻辑方法主体内包含三个节点:开始节点、条件判断节点、结束节点,其中,条件判断可以用内部的预设对象表示,用kv形式表示属性内容。
插入到逻辑流程图的分支流程为:如果逻辑节点被拖拽到逻辑方法流程图中具有分支的逻辑节点上,则将被拖拽的逻辑节点的AST语法树插入到当前分支逻辑节点AST语法树的对应的分支属性中。
图4是根据本发明实施例的一种可选的插入到逻辑流程图的分支流程的示意图,如图4所示,包括:逻辑流程图和逻辑方法AST语法树,其中,逻辑流程图包括:开始和结束两个节点,以及插入分支流程(即条件判断“1==3”为是时的赋值表达式,为否时的调用表达式)中,可以将逻辑流程图转换为逻辑方法AST语法树,具体为,先构建逻辑方法AST语法树,该逻辑方法AST语法树在一对花括号中包括:AST语法树标识:‘logic’,ID标识:XXX,逻辑方法名称:XXX,逻辑方法入参:[XXX],逻辑方法出参:[XXX],逻辑方法局部变量:[XXX],逻辑方法主体:[开始逻辑节点AST语法树,...,条件判断逻辑节点AST语法树,…,结束逻辑节点AST语法树]等,其中,条件判断逻辑节点AST语法树在一对花括号中包括:判断条件:{XXX},条件为“真”执行的逻辑块:赋值表达式逻辑节点AST,条件为“假”执行的逻辑块:调用表达式逻辑节点AST,类型标识:“ifStatement”等,赋值表达式逻辑节点AST语法树在一对花括号中包括:操作符号:“=”,操作符号左侧表达式:{XXX},操作符号右侧表达式:{XXX},类型标识:“BinaryExpression”等,调用表达式逻辑节点AST语法树在一对花括号中包括:被调用的逻辑方法ID标识:{XXX},被调用的逻辑方法入参:{XXX},等。
本实施例中,若赋值表达式逻辑节点被拖拽到逻辑方法流程图的条件判断逻辑节点的判断条件为“真”的分支中,则将赋值表达式逻辑节点的AST语法树插入到条件判断AST语法树的条件为“真”执行的逻辑块属性中,其中,赋值表达式可以用内部的预设对象表示,用kv形式表示属性内容。若调用表达式逻辑节点被拖拽到逻辑方法流程图的条件判断逻辑节点的判断条件为“假”的分支中,则将调用表达式逻辑节点的AST语法树插入到条件判断AST语法树的条件为“假”执行的逻辑块属性中,其中,调用表达式可以用内部的预设对象表示的,用kv形式表示属性内容。
在本实施例中,当操作行为为逻辑节点修改行为时,可以在逻辑编排画布区域,当逻辑节点监听到鼠标点击事件时,显示逻辑元件属性配置区界面,用户可在此界面修改逻辑节点的属性值,当有属性值被更改时,则平台内部修改逻辑方法AST语法树中的当前逻辑节点AST语法树对应的属性值。
在本实施例中,当操作行为为逻辑节点删除行为时,在逻辑编排画布区域,当逻辑节点监听到鼠标点击事件时,显示删除按钮,删除按钮绑定删除事件监听方法,当用户点击删除后,删除事件监听到删除行为,则平台内部将会将该逻辑节点AST语法树从逻辑方法AST语法树中删除。
本实施例,可根据用户的操作行为,生成逻辑方法AST语法树,并在AST语法树更新的同时,对其进行持久化存储。
步骤S104,基于目标语法树结构,采用预设生成策略,生成目标代码,其中,预设生成策略包括:语法树结构中的关键字与代码表现形式之间的映射关系。
可选的,基于目标语法树结构,采用预设生成策略,生成目标代码的步骤,包括:扫描目标语法树结构,得到扫描结果;采用预设生成策略,将扫描结果中的每个关键字对应的键值对转换为与关键字对应的代码表现形式的代码子片断;基于所有代码子片断,生成目标代码。
在本发明实施例中,在逻辑编排完成后,得到了完整的逻辑方法的AST语法树(即目标语法树结构),逻辑方法AST语法树的属性完整的描述了预设编程语言(如,JavaScript)方法的定义(如,方法名称、方法入参、方法出参、局部变量、方法主体)等,逻辑方法主体内包含了多个逻辑节点。下面通过如下例子进行说明:
如下是一段通过在低代码平台上可视化逻辑编排生成的AST语法树,它包含了一个逻辑方法(名为“compare”的方法)和一个逻辑节点(条件判断类型),逻辑方法内有一个“int”类型的入参“a”和一个“Boolean”类型的返回变量“b”,“test”代表条件判断逻辑节点的判断条件(用预设对象表示),“conse”和“alter”分别代表条件判断为“假”执行的表达式(用预设对象数组表示)和条件判断为“真”执行的表达式(用预设对象数组表示)。
在本发明实施例中,可以采用预设生成策略(该预设生成策略包括:语法树结构中的关键字与代码表现形式之间的映射关系,其中,关键字包括:“level”、“name”、“variables”、“returns”、“body”、“type”、“test”、“conse”等,每个关键字都对应有代码表现形式),将目标语法树结构转换为目标代码,具体为:可以自上而下扫描AST语法树(即扫描目标语法树结构,得到扫描结果),扫描过程中读取到“level”:“logic”时,表明该AST是一段逻辑方法,生成“function(){}”,继续读取到“name”:“compare”,表明该逻辑方法名称是“compare”,生成“function compare(){}”,继续读取属性“variables”:[{“value”:a,“valueType”:“int”}],根据"variables"确定属性值[{“value”:a,“valueType”:“int”}]是对逻辑方法入参的定义,生成代码“function compare(a){}”,继续读取属性“returns”:[{“value”:b,“valueType”:“Boolean”,“default”:null}],根据“returns”确定属性值[{“value”:b,“valueType”:“Boolean”,“default”:null}]是对逻辑方法出参的定义,生成代码“function compare(a){return b=null}”,继续读取属性“body”值,根据“body”确定属性值是对逻辑方法主体,其中包含组成逻辑方法的逻辑节点,遍历body属性值中的逻辑节点,继续读取到“level”:“logicUnit”时,表明该AST是一段逻辑节点,继续读取到“type”:“IfStatement”时,表明该逻辑节点是IF条件判断逻辑节点,生成“functioncompare(a){if(){}else{}return b=null}”,继续读取属性“test”:{“......”},表明该属性值是条件判断逻辑节点的条件判断语句,生成“function compare(a){if(a>12){}else{}return b=null}”,继续读取属性“conse”:[“......”],表明该属性值是条件判断逻辑节点的IF分支代码块,生成“function compare(a){b=null;if(a>12){b=false}else{}return b}”,继续读取属性“conse”:[“......”],表明该属性值是条件判断逻辑节点的IF分支代码块,生成“function compare(a){b=null;if(a>12){b=false}else{b=true}return b}”,逻辑方法的“body”数组扫描完成,则预设编程语言(如,javaScript)函数生成完成(即将扫描结果中的每个关键字对应的键值对转换为与关键字对应的代码表现形式的代码子片断,并基于所有代码子片断,生成目标代码)。
下面结合另一种可选的具体实施方式进行详细说明。
图5是根据本发明实施例的一种可选的在低代码平台中的可视化逻辑编排方法的示意图,如图5所示,包括如下步骤:
步骤1:低代码平台可视化逻辑编排界面显示,该逻辑编排界面包括:逻辑方法定义区、逻辑编排画布、逻辑元件库、属性配置区域等。
步骤2:逻辑方法及逻辑元件的AST语法树表示。
步骤3:逻辑编排初始化,可以先创建逻辑,在逻辑编排画布区域绘制初始化逻辑流程图,生成逻辑初始化AST语法树。
步骤4:逻辑编排交互执行,可以先响应用户UI交互操作,执行逻辑编排,绘制逻辑方法的流程图,并更新逻辑方法AST语法树。
步骤5:AST语法树转换JavaScript代码,可以将得到的完整的逻辑方法的AST语法树转换成JavaScript代码。
步骤6:逻辑预览。
本实施例中,低代码平台可以提供可视化UI界面编排能力,能够拖拽生成应用UI界面,并且生成的逻辑方法代码,可与界面UI组件事件进行绑定,实现逻辑编排的预览效果。
本发明实施例中,能够完整支持业务逻辑代码生成,提高了低代码平台进行开发的效率,并且,能够对用户的操作行为进行合法性检查,降低了开发人员使用的门槛,进一步提高了开发人员使用效率,避免误操作。
实施例二
本实施例中提供的一种基于语法树的代码生成装置包含了多个实施单元,每个实施单元对应于上述实施例一中的各个实施步骤。
图6是根据本发明实施例的一种可选的基于语法树的代码生成装置的示意图,如图6所示,该生成装置可以包括:接收单元60,转换单元61,更新单元62,生成单元63,其中,
接收单元60,用于接收初始流程图和逻辑编排请求,其中,逻辑编排请求中至少携带有:外部终端执行的操作行为;
转换单元61,用于基于预设语法树策略,将初始流程图转换为初始语法树结构;
更新单元62,用于对操作行为进行逻辑校验,得到校验结果,并在校验结果指示操作行为通过逻辑校验的情况下,更新初始语法树结构,得到目标语法树结构;
生成单元63,用于基于目标语法树结构,采用预设生成策略,生成目标代码,其中,预设生成策略包括:语法树结构中的关键字与代码表现形式之间的映射关系。
上述生成装置,可以通过接收单元60接收初始流程图和逻辑编排请求,通过转换单元61基于预设语法树策略,将初始流程图转换为初始语法树结构,通过更新单元62对操作行为进行逻辑校验,得到校验结果,并在校验结果指示操作行为通过逻辑校验的情况下,更新初始语法树结构,得到目标语法树结构,通过生成单元63基于目标语法树结构,采用预设生成策略,生成目标代码。在本发明实施例中,可先对逻辑编排请求中的操作行为进行逻辑校验,在校验通过的情况下,更新初始语法树结构,通过更新后的目标语法树结构,采用预设生成策略,生成目标代码,从而实现了自动生成业务交互逻辑代码的功能,提高了开发效率,增强了代码的可维护性,进而解决了相关技术中需要手动输入交互事件的逻辑代码,导致开发效率不高的技术问题。
可选的,生成装置还包括:第一创建模块,用于在接收初始流程图和逻辑编排请求之前,创建逻辑编排界面,其中,逻辑编排界面至少包括:逻辑方法定义区、逻辑编排画布、逻辑元件库、属性配置区域,逻辑方法定义区用于创建和删除逻辑方法,逻辑编排画布用于绘制逻辑方法的流程图,逻辑元件库用于定义和展示逻辑元件,属性配置区域用于展示和修改逻辑元件的元件属性;第一监听模块,用于基于逻辑方法定义区,监听逻辑创建请求。
可选的,生成装置还包括:第一接收模块,用于在监听逻辑创建请求之后,在监听到逻辑创建请求的情况下,接收逻辑创建请求,其中,逻辑创建请求至少包括:逻辑数据,逻辑数据至少包括:逻辑名称、输入参数、输出参数、预设变量;第一确定模块,用于基于逻辑数据,确定开始节点和结束节点;第一绘制模块,用于基于开始节点和结束节点,控制逻辑编排画布绘制初始流程图。
可选的,生成装置还包括:第二确定模块,用于在基于预设语法树策略,将初始流程图转换为初始语法树结构之前,确定逻辑方法的第一语法树属性,其中,第一语法树属性至少包括:第一语法树标识、逻辑方法名称、逻辑方法入参、逻辑方法出参、逻辑方法预设变量、逻辑方法主体、逻辑方法标识;第三确定模块,用于确定逻辑元件的第二语法树属性,其中,第二语法树属性包括:元件属性和元件扩展属性,元件属性至少包括:第二语法树标识、逻辑元件标识、父节点标识、逻辑元件子类型,元件扩展属性包括下述至少之一:预设条件、逻辑块、被调用的逻辑方法标识、被调用的逻辑方法入参、操作符号、操作符号左侧表达式、操作符号右侧表达式、参数类型标识、参数数值;第四确定模块,用于基于第一语法树属性和第二语法树属性,确定预设语法树策略。
可选的,转换单元包括:第五确定模块,用于基于第一语法树属性,确定逻辑数据中各参数对应的第一语法树表示;第一插入模块,用于将开始节点和结束节点插入到逻辑方法主体的逻辑元件数组中;第六确定模块,用于基于第二语法树属性,确定开始节点的第二语法树表示以及结束节点的第三语法树表示;第一指向模块,用于将第三语法树表示中的父节点标识指向第二语法树表示中的逻辑元件标识;第一组合模块,用于基于初始流程图,组合第一语法树表示、第二语法树表示以及第三语法树表示,得到初始语法树结构。
可选的,生成装置还包括:第一绑定模块,用于在接收初始流程图和逻辑编排请求之前,为逻辑编排画布中的逻辑节点绑定预设鼠标事件,其中,预设鼠标事件包括下述至少之一:鼠标点击事件、鼠标按下事件、鼠标移动事件、鼠标弹起事件;第一捕捉模块,用于基于预设鼠标事件,捕捉操作行为,其中,操作行为包括下述至少之一:逻辑节点移入、逻辑节点修改、逻辑节点删除;第二组合模块,用于组合所有操作行为,得到逻辑编排请求。
可选的,更新单元包括:第一执行模块,用于执行逻辑编排请求,绘制目标流程图;第二监听模块,用于基于预设鼠标事件,监听操作行为得到的坐标位置;第一检查模块,用于在坐标位置与目标流程图中的连线位置重合的情况下,对操作行为进行语义检查,其中,语义检查包括下述至少之一:检查拖拽到赋值逻辑节点、比较运算逻辑节点、逻辑运算逻辑节点的左右操作符的逻辑节点类型是否一致,检查拖拽到条件判断逻辑节点的判断条件逻辑元件是否是真结果或假结果的逻辑节点,检查拖拽到预设流程的逻辑节点是否是表达式类型的逻辑节点;第一更新模块,用于在操作行为的语义检查通过的情况下,基于目标流程图,更新初始语法树结构,得到目标语法树结构。
可选的,生成单元包括:第一扫描模块,用于扫描目标语法树结构,得到扫描结果;第一转换模块,用于采用预设生成策略,将扫描结果中的每个关键字对应的键值对转换为与关键字对应的代码表现形式的代码子片断;第一生成模块,用于基于所有代码子片断,生成目标代码。
上述的生成装置还可以包括处理器和存储器,上述接收单元60,转换单元61,更新单元62,生成单元63等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
上述处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来基于目标语法树结构,采用预设生成策略,生成目标代码。
上述存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:接收初始流程图和逻辑编排请求,基于预设语法树策略,将初始流程图转换为初始语法树结构,对操作行为进行逻辑校验,得到校验结果,并在校验结果指示操作行为通过逻辑校验的情况下,更新初始语法树结构,得到目标语法树结构,基于目标语法树结构,采用预设生成策略,生成目标代码。
根据本发明实施例的另一方面,还提供了一种电子设备,包括一个或多个处理器和存储器,存储器用于存储一个或多个程序,其中,当一个或多个程序被一个或多个处理器执行时,使得一个或多个处理器实现上述的基于语法树的代码生成方法。
图7是根据本发明实施例的一种用于基于语法树的代码生成方法的电子设备(或移动设备)的硬件结构框图。如图7所示,电子设备可以包括一个或多个(图中采用702a、702b,……,702n来示出)处理器702(处理器702可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器704。除此以外,还可以包括:显示器、输入/输出接口(I/O接口)、通用串行总线(USB)端口(可以作为I/O接口的端口中的一个端口被包括)、网络接口、键盘、电源和/或相机。本领域普通技术人员可以理解,图7所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,电子设备还可包括比图7中所示更多或者更少的组件,或者具有与图7所示不同的配置。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种基于语法树的代码生成方法,其特征在于,包括:
接收初始流程图和逻辑编排请求,其中,所述逻辑编排请求中至少携带有:外部终端执行的操作行为;
基于预设语法树策略,将所述初始流程图转换为初始语法树结构;
对所述操作行为进行逻辑校验,得到校验结果,并在所述校验结果指示所述操作行为通过逻辑校验的情况下,更新所述初始语法树结构,得到目标语法树结构;
基于所述目标语法树结构,采用预设生成策略,生成目标代码,其中,所述预设生成策略包括:语法树结构中的关键字与代码表现形式之间的映射关系。
2.根据权利要求1所述的生成方法,其特征在于,在接收初始流程图和逻辑编排请求之前,还包括:
创建逻辑编排界面,其中,所述逻辑编排界面至少包括:逻辑方法定义区、逻辑编排画布、逻辑元件库、属性配置区域,所述逻辑方法定义区用于创建和删除逻辑方法,所述逻辑编排画布用于绘制所述逻辑方法的流程图,所述逻辑元件库用于定义和展示逻辑元件,所述属性配置区域用于展示和修改所述逻辑元件的元件属性;
基于所述逻辑方法定义区,监听逻辑创建请求。
3.根据权利要求2所述的生成方法,其特征在于,在监听逻辑创建请求之后,还包括:
在监听到所述逻辑创建请求的情况下,接收所述逻辑创建请求,其中,所述逻辑创建请求至少包括:逻辑数据,所述逻辑数据至少包括:逻辑名称、输入参数、输出参数、预设变量;
基于所述逻辑数据,确定开始节点和结束节点;
基于所述开始节点和所述结束节点,控制所述逻辑编排画布绘制所述初始流程图。
4.根据权利要求3所述的生成方法,其特征在于,在基于预设语法树策略,将所述初始流程图转换为初始语法树结构之前,还包括:
确定所述逻辑方法的第一语法树属性,其中,所述第一语法树属性至少包括:第一语法树标识、逻辑方法名称、逻辑方法入参、逻辑方法出参、逻辑方法预设变量、逻辑方法主体、逻辑方法标识;
确定所述逻辑元件的第二语法树属性,其中,所述第二语法树属性包括:元件属性和元件扩展属性,所述元件属性至少包括:第二语法树标识、逻辑元件标识、父节点标识、逻辑元件子类型,所述元件扩展属性包括下述至少之一:预设条件、逻辑块、被调用的逻辑方法标识、被调用的逻辑方法入参、操作符号、操作符号左侧表达式、操作符号右侧表达式、参数类型标识、参数数值;
基于所述第一语法树属性和所述第二语法树属性,确定所述预设语法树策略。
5.根据权利要求4所述的生成方法,其特征在于,基于预设语法树策略,将所述初始流程图转换为初始语法树结构的步骤,包括:
基于所述第一语法树属性,确定所述逻辑数据中各参数对应的第一语法树表示;
将所述开始节点和所述结束节点插入到所述逻辑方法主体的逻辑元件数组中;
基于所述第二语法树属性,确定所述开始节点的第二语法树表示以及所述结束节点的第三语法树表示;
将所述第三语法树表示中的所述父节点标识指向所述第二语法树表示中的所述逻辑元件标识;
基于所述初始流程图,组合所述第一语法树表示、所述第二语法树表示以及所述第三语法树表示,得到所述初始语法树结构。
6.根据权利要求2所述的生成方法,其特征在于,在接收初始流程图和逻辑编排请求之前,还包括:
为所述逻辑编排画布中的逻辑节点绑定预设鼠标事件,其中,所述预设鼠标事件包括下述至少之一:鼠标点击事件、鼠标按下事件、鼠标移动事件、鼠标弹起事件;
基于所述预设鼠标事件,捕捉操作行为,其中,所述操作行为包括下述至少之一:逻辑节点移入、逻辑节点修改、逻辑节点删除;
组合所有所述操作行为,得到所述逻辑编排请求。
7.根据权利要求6所述的生成方法,其特征在于,在所述校验结果指示所述操作行为通过逻辑校验的情况下,更新所述初始语法树结构,得到目标语法树结构的步骤,包括:
执行所述逻辑编排请求,绘制目标流程图;
基于所述预设鼠标事件,监听所述操作行为得到的坐标位置;
在所述坐标位置与所述目标流程图中的连线位置重合的情况下,对所述操作行为进行语义检查,其中,所述语义检查包括下述至少之一:检查拖拽到赋值逻辑节点、比较运算逻辑节点、逻辑运算逻辑节点的左右操作符的逻辑节点类型是否一致,检查拖拽到条件判断逻辑节点的判断条件逻辑元件是否是真结果或假结果的逻辑节点,检查拖拽到预设流程的逻辑节点是否是表达式类型的逻辑节点;
在所述操作行为的语义检查通过的情况下,基于所述目标流程图,更新所述初始语法树结构,得到目标语法树结构。
8.根据权利要求1所述的生成方法,其特征在于,基于所述目标语法树结构,采用预设生成策略,生成目标代码的步骤,包括:
扫描所述目标语法树结构,得到扫描结果;
采用预设生成策略,将所述扫描结果中的每个所述关键字对应的键值对转换为与所述关键字对应的代码表现形式的代码子片断;
基于所有所述代码子片断,生成所述目标代码。
9.一种基于语法树的代码生成装置,其特征在于,包括:
接收单元,用于接收初始流程图和逻辑编排请求,其中,所述逻辑编排请求中至少携带有:外部终端执行的操作行为;
转换单元,用于基于预设语法树策略,将所述初始流程图转换为初始语法树结构;
更新单元,用于对所述操作行为进行逻辑校验,得到校验结果,并在所述校验结果指示所述操作行为通过逻辑校验的情况下,更新所述初始语法树结构,得到目标语法树结构;
生成单元,用于基于所述目标语法树结构,采用预设生成策略,生成目标代码,其中,所述预设生成策略包括:语法树结构中的关键字与代码表现形式之间的映射关系。
10.一种电子设备,其特征在于,包括一个或多个处理器和存储器,所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现权利要求1至8中任意一项所述的基于语法树的代码生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210675213.9A CN115048104A (zh) | 2022-06-15 | 2022-06-15 | 基于语法树的代码生成方法及其装置、电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210675213.9A CN115048104A (zh) | 2022-06-15 | 2022-06-15 | 基于语法树的代码生成方法及其装置、电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115048104A true CN115048104A (zh) | 2022-09-13 |
Family
ID=83161025
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210675213.9A Pending CN115048104A (zh) | 2022-06-15 | 2022-06-15 | 基于语法树的代码生成方法及其装置、电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115048104A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115543290A (zh) * | 2022-10-12 | 2022-12-30 | 睿珀智能科技有限公司 | 可视化编程方法及系统 |
-
2022
- 2022-06-15 CN CN202210675213.9A patent/CN115048104A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115543290A (zh) * | 2022-10-12 | 2022-12-30 | 睿珀智能科技有限公司 | 可视化编程方法及系统 |
CN115543290B (zh) * | 2022-10-12 | 2024-04-19 | 睿珀智能科技有限公司 | 可视化编程方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10324828B2 (en) | Generating annotated screenshots based on automated tests | |
CN108614707A (zh) | 静态代码检查方法、装置、存储介质和计算机设备 | |
CN110244942B (zh) | 一种页面生成方法、装置及系统 | |
CN111427561A (zh) | 业务代码的生成方法、装置、计算机设备和存储介质 | |
US9471286B2 (en) | System and method for providing code completion features for code modules | |
CN108427731A (zh) | 页面代码的处理方法、装置、终端设备及介质 | |
Maras et al. | Identifying code of individual features in client-side web applications | |
US20200226232A1 (en) | Method of selecting software files | |
Bajammal et al. | Generating reusable web components from mockups | |
CN112947914A (zh) | 一种基于模型的代码生成方法、装置、计算机设备及介质 | |
CN109634570A (zh) | 前后端集成开发方法、装置、设备及计算机可读存储介质 | |
CN107783766A (zh) | 对应用程序的文件进行清理的方法和装置 | |
US9311111B2 (en) | Programming environment with support for handle and non-handle user-created classes | |
CN106484389B (zh) | 动作流分段管理 | |
CN113986741A (zh) | 一种组件调试方法、装置及计算机设备 | |
CN113934429B (zh) | 一种设计稿的转换方法、装置、计算机设备和存储介质 | |
JP2008299723A (ja) | プログラム検証方法、プログラム検証装置 | |
CN115048104A (zh) | 基于语法树的代码生成方法及其装置、电子设备 | |
Kusumoto et al. | Function point measurement from Java programs | |
Tuglular et al. | Input contract testing of graphical user interfaces | |
CN112861059A (zh) | 可视化组件生成方法、装置、计算机设备及可读存储介质 | |
CN111460235A (zh) | 图谱数据的处理方法、装置、设备及存储介质 | |
Khan et al. | A retargetable model-driven framework for the development of mobile user interfaces | |
Oliveira | pytest Quick Start Guide: Write better Python code with simple and maintainable tests | |
CN115437608A (zh) | 智能研发辅助方法及装置 |
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 |