一种基于表达式AST解析和可配置模板的代码生成方法与流程

文档序号:37159678发布日期:2024-02-26 17:27阅读:19来源:国知局
一种基于表达式AST解析和可配置模板的代码生成方法与流程

本发明属于航空显示软件开发领域,特别涉及一种基于表达式ast解析和可配置模板的代码生成方法。


背景技术:

1、自动代码生成采用面向对象的设计方法,支持c++代码自动生成,可避免手工代码所引起的人为错误,所生成的代码具有更高的重用性、可维护性和健壮性。自动代码生成工具通过解析界面集成开发环境生成各类工程文件,完成规则解析,生成平台无关的c++代码。

2、现有技术方案包括:

3、1.基于语言框架搭建和规范代码模板生成。传统的基于模板代码生成方法对于功能模块支持有限,因为需要严格的模板结构,当需要支持新功能时需要对模板修改,前期的模板代码开发工作量大,且容易生成冗余代码。

4、2.基于ai的代码生成方法。现有的ai代码基于公开源代码数据集训练,仅支持代码补全或基于注释的部分通用库代码生成,需要规范性的注释描述,且无法自适应到其他自定义库和任意模型设计,并且代码错误率高,需要人为调试修改,后期工作量大。

5、3.基于代码语料生成代码。通常基于ide插件开发,需要足够的语料,难以扩展,使用者上手难度大。

6、上述方法大部分难以适应于复杂的可视化界面代码生成,本发明提出一种基于表达式ast解析和可配置模板约束的可视化界面建模自动代码生成方案,仅通过界面建模即可生成代码和可执行文件。


技术实现思路

1、发明目的:提供一种基于表达式ast解析和可配置模板的代码生成方法,解决可复用性强,便于调试修改。

2、技术方案:

3、一种基于表达式ast解析和可配置模板的代码生成方法,包括:

4、步骤1:定义语法范式和c++代码模板;

5、步骤2:根据语法范式生成并解析工程文件,根据工程文件构建业务对象模型和关系语法树;

6、步骤3:根据定义语法范式和c++代码模板以及业务对象模型和关系语法树,生成c++代码源文件和makefile文件。

7、进一步地,步骤1中,定义语法范式,具体包括:

8、用户根据ebnf语法范式定义数据流,状态机动作和监护条件;其中,数据流的语法范式包括源表达式和目标表达式,源表达式归结为实体,并可通过操作符、计算函数等迭代构建,包括字符串、整型、枚举、对象、对象属性、变量,目标表达式归结为对象或对象属性,目标表达式的语法属于源表达式的子集;状态机动作的语法由for、foreach循环、ifelse条件及基本的动作语句构成。

9、进一步地,步骤1中,定义代码模板,具体包括:

10、根据最终要生成的图形界面软件结构和功能,定义画布对象代码文件、图形对象代码文件、容器对象代码文件、计算器对象代码文件、数据连接对象代码文件和数据类型对象代码文件;

11、根据画布对象代码文件、图形对象代码文件、容器对象代码文件、计算器对象代码文件、数据连接对象代码文件和数据类型对象代码文件,定义一系列代有规则的c++代码模板文件;

12、c++代码模板文件定义生成c++类所需的全部信息,包括名称、继承关系、数据类型、成员、成员的初始值、方法、注释、包含的头文件信息,按照模板变量、模板语句等规则对以上信息进行描述:将生成c++类所需的全部信息中的可配置项装载成一个变量或者控制语句,形成各类对象的c++代码模板文件。

13、进一步地,画布对象代码文件用于描述画面包含的图形元素、外部输入输出接口、操作相应逻辑;图形对象代码文件用于描述图形元素的基本属性及其对应的输入输出接口;容器对象代码文件用于描述多个图形元素的层级以及图形元素之间的相互关系;计算器对象代码文件用于描述某些运算逻辑及其相应的输入输出接口;数据连接对象代码文件用于描述画布对象与外部系统进行交互的格式;数据类型对象代码文件用于描述画布对象与外部系统进行交互的格式的数据类型。

14、进一步地,步骤2中,业务对象模型包含工程文件中的对象描述信息以及工程文件中每个描述文件与其他描述文件相应引用关系,构建业务对象模型,具体包括:

15、根据最终要生成的图形界面软件功能,按照步骤1中定义的语法范式生成工程文件,其中,工程文件包含生成代码所需的关键信息,工程文件包括画布对象描述文件、图形对象描述文件、容器对象描述文件、计算器对象描述文件、数据连接对象描述文件、数据类型描述文件,资源信息描述文件;资源信息描述文件用于描述工程使用到的字体、图片等资源的信息;

16、解析工程中包含的各类描述文件,获取描述的对象类型、对象名称、对象属性、对象方法、使用的资源信息、包含的子对象;对象属性信息包含属性名称、数据类型、初始值;对象方法信息包含方法名称、方法参数,返回值数据类型;资源信息包含资源名称、配置参数;数据类型包含名称、子数据类型,支持进行嵌套;子对象为引用的其他对象的集合,包含对象的全部信息,支持嵌套;

17、构建各类描述文件的相关依赖关系,根据各类名称信息进行索引,确定每个描述文件与其他描述文件相应引用关系。

18、进一步地,步骤2中,构建关系语法树,具体包括:

19、通过词法分析器扫描工程文件中的画布对象描述文件、图形对象描述文件、容器对象描述文件、计算器对象描述文件,确定对象关系,并从对象关系中提取单词,并根据工程文件中每个描述文件与其他描述文件相应引用关系分析词性,其中,对象关系表达式主要来自存储在工程文件里的表达式语句;

20、对提取的单词,根据单词词性基于业务对象模型的上下文,按照定义的语法范式进行解析获取标识符、子表达式和节点,最终构成抽象语法树ast,语法树根节点为表达式,根据表达式函数或符号分子树,叶子节点为无法分割的标识符,包括对象、对象属性等。

21、进一步地,步骤2,还包括:关联业务对象模型中的对象与关系语法树,具体为:

22、遍历关系语法树进行语义校验:在业务对象模型om的对象上下文中,获取对象、对象属性、对象方法信息,内置函数,从输入对象赋值给输出对象,其中,在赋值的过程中,进行一系列的检查,删除错误语法。

23、进一步地,步骤3中,生成c++代码源文件,具体包括:

24、根据选择的画布对象描述文件,根据各类描述文件与其他描述文件相应引用关系,确定其依赖的其他描述文件;

25、对最终所选择的画布对象描述文件和其依赖的描述文件,分别选择对应的c++代码模板文件,通过模板引擎,使用解析的业务对象模型和关系语法树,将c++代码模板文件中的模板变量、模板语句渲染为真实代码,并进行输出,生成对应的c++代码源文件。

26、进一步地,步骤3中,生成makefile文件,具体包括:

27、根据构建的每个描述文件与其他描述文件相应引用关系和生成的全部c++代码源文件,生成makefile文件,具体为:通过每个描述文件与其他描述文件相应引用关系确定编译每个生成源文件的编译指令和打包指令,按照makefile规则生成makefile文件。

28、有益效果:

29、1.通过可视化显示建模来生成代码,仅需通过ui设计即可建模以及代码生成,避免了冗余的代码编写和调试工作;

30、2.通过抽象语法树构建以解析界面建模中的数据流,支持表达式代码生成及动态执行;

31、3.通过严格c++代码模板规范约束,保证了所生成代码的正确性;

32、4.通过语法可配置的模板引擎,适配多种c++格式,保证了代码的可读性和可适应性。

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