一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于antlr4的代码生成器设计方法与流程

2022-02-20 00:44:29 来源:中国专利 TAG:


1.本发明属于代码生成领域,具体涉及一种基于antlr4的代码生成器设计方法。


背景技术:

2.为了提高国产化计算平台的计算能力,适应大数据分析中计算量大的需求,分布式系统以其独特的优势得到了广泛的应用。在分布式系统中,计算平台负责人工智能深度学习算法的计算,包括图像处理,语音分析,模式识别等,主机实现任务的调度,数据的接收和显示。数据分发服务(dds)就是一种发布订阅的数据传输方式,不仅定义了以数据为中心的发布订阅模型,为分布式系统提供了数据发布订阅机制,而且提供了服务质量(qos)服务,满足了分布式系统中异步、松耦合的要求,保证了数据分布的实时性。dds的底层代码是通过idl(interface definition language)实现的,用户需要使用idl对数据结构和属性的接口进行定义,并通过代码识别工具将定义好的idl接口映射到c/c 、java等多种常用的编程语言,实现了数据接口与编程语言的隔离,满足了分布式系统跨平台跨语言的要求。
3.antlr4是一款强大的语法分析器工具,可以识别、处理、翻译结构化的文本、二进制文件甚至xml文件。他提供了一个框架,可以包含java、c 动作的语法描述来构造语言识别器,编译器和解析器。在antlr4中通过解析用户自定义的上下文无关的文法文件,自动生成词法分析器(lexer)和语法分析器(parser),并通过树分析器(tree parser)自动将输入文本处理为语法分析树。antlr4引入的语法分析树的自动创建和遍历机制,极大地提高了语言识别程序的开发效率,能够将开发者从复杂的编译理论中解脱出来。
4.当下为了提高国产化计算平台的计算能力,适应大数据分析中计算量大的需求,分布式系统以其独特的优势得到了广泛的应用。在分布式系统中,计算平台负责人工智能深度学习算法的计算,包括图像处理,语音分析,模式识别等,主机实现任务的调度,数据的接收和显示。分布式系统中数据传输的方式有多种模式,例如:点到点、消息队列和发布订阅数据传输方式。其中点对点的数据传输方式时间耦合度高,使得数据传输的灵活性差,实时性不好;消息队列的数据传输方式通过消息队列的方式进行数据传输,解决了时间耦合的问题,但是也存在着不能实现异步通信,单点失效,可靠性差等缺点;发布订阅的数据传输方式中数据的发布者和订阅者之间通过主题通信,双方只需定义发布数据的数据结构和类型,不必知道对方的地址,也不用同时在线,具有时间和空间上的松耦合。
5.数据分发服务(dds)就是一种发布订阅的数据传输方式,不仅定义了以数据为中心的发布订阅模型,为分布式系统提供了数据发布订阅机制,而且提供了服务质量(qos)服务,满足了分布式系统中异步、松耦合的要求,保证了数据分布的实时性。dds的底层代码是通过idl(interface definition language)实现的,用户需要使用idl对数据结构和属性的接口进行定义,并通过代码识别工具将定义好的idl接口映射到c/c 、java等多种常用的编程语言,实现了数据接口与编程语言的隔离,满足了分布式系统跨平台跨语言的要求。采用发布/订阅的方式,dds在数据发送者和接收者之间建立了抽象的通信,数据发布者不用知道每一个接收者的地址,只需要将待发布数据按照一定的数据类型发布出去即可。同
样,订阅者订阅感兴趣的数据后,不用知道发布的数据是从哪里来,只需要知道自己想要接收数据的数据类型,即可得到想要的数据。
6.现有的代码生成器功能繁琐,编译后的工程文件太大,可以实现idl到c/c 、java等编程语言的映射,但是生成的工程文件只能在特定的编译环境下编译和运行。本文基于antl4设计的代码生成器可以将idl定义的数据接口类型转化为cmake文件,生成文件小,对编译环境的适应性好,可以实现在windows/linux等不同平台下的编译和运行,解决了分布式系统跨平台跨语言数据传输的难题。


技术实现要素:

7.(一)要解决的技术问题
8.本发明要解决的技术问题是如何提供一种基于antlr4的代码生成器设计方法,以解决分布式系统跨平台跨语言数据传输的难题。
9.(二)技术方案
10.为了解决上述技术问题,本发明提出一种基于antlr4的代码生成器设计方法,该方法包括如下步骤:
11.s1:生成idl语法规则文件对应的词法分析器和语法分析器;
12.s2:对idl文件进行预处理,通过词法分析器和语法分析器将预处理后的idl文件生成语法分析树,并进一步将语法分析树生成结构化数据;
13.s3:定义生成c/c 、java文件的公共接口文件;
14.s4:c/c 、java公共接口文件读取工程模板文件,并用步骤s2中的结构化数据替换模板文件中的结构化数据,生成c/c 、java工程文件。
15.进一步地,所述步骤s1具体包括:
16.s11、定义idl语法规则文件;
17.s12、通过antlr4工具,将idl语法规则文件生成可分析idl文件的词法分析器和代码语法分析器;
18.s13、获取词法分析器和语法分析器运行时会调用的altar4-runtime库。
19.进一步地,所述idl语法规则文件为.g4文件。
20.进一步地,所述antlr-runtime由antlr4中间件提供,存放于antlr4目录下,其中包含了antlr4-runtime源代码。
21.进一步地,所述步骤s2具体包括如下步骤:
22.s21、输入用户自定义的idl文件;
23.s22、代码预处理模块处理idl文件中预处理指令;包含文件处理模块负责加载和处理idl文件中的包含代码;
24.s23、通过词法分析器和语法分析器将处理后的idl文件生成对应的语法分析树;
25.s24、结构化数据生成模块将生成的语法分析树进一步处理,形成友好的结构化数据。
26.进一步地,所述预处理指令包括#ifdef、#define、#undef、#else和#endif;所述包含代码包括#include“xxxx.idl”。
27.进一步地,所述步骤s3具体包括:
28.s31、源文件公共接口生成模块由antlr4提供,是c/c 、java文件公共接口的基类,定义了代码文件生成所需的公共接口和属性;
29.s32、以源文件公共接口生成模块为基础,定义生成c/c 、java文件的公共接口文件,c/c 、java文件公共接口生成模块根据c/c 、java语言特征抽象了并定义了生成c/c 、java文件的公共接口文件。
30.进一步地,所述c/c 、java文件的公共接口文件包括type、type_plugin、type_support、type_publisher、type_subscriber和cmakelist。
31.进一步地,所述步骤s4具体包括:
32.s41、基于dds的接口规则,定义用于生成c/c 、java的工程模板文件;
33.s42、c/c 、java公共接口文件读取工程模板文件,并用步骤s2中的结构化数据替换模板文件中的结构化数据,生成对应的c/c 、java工程文件,其中包括publisher源文件,subscriber源文件和cmakelist文件。
34.进一步地,所述步骤s4之后还包括:将c/c 、java工程文件拷贝到windows/linux环境下,直接使用cmake命令构建工程,并编译生成可执行文件。
35.(三)有益效果
36.本发明提出一种基于antlr4的代码生成器设计方法,将实现订阅/发布数据分发服务(dds)的用户自定义的数据结构类型另存为idl文件作为代码生成器的输入,通过代码生成器得到cmake文件,在windows/linux环境下使用cmake命令产生工程文件,通过windows/linux环境下的编译器生成可执行文件,从而实现跨平台跨语言的数据分发服务的应用。
附图说明
37.图1为本发明antlr4代码解析的流动过程;
38.图2为本发明代码生成器软件结构框图;
39.图3为本发明代码生成器的工作流程图;
40.图4为本发明代码生成器的gui界面。
具体实施方式
41.为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
42.本发明提出了一种基于antlr4的代码生成器,可以将idl定义的数据接口类型生成cmake脚本文件,从而实现在windows/linux等不同平台下的编译和运行,解决了分布式系统跨平台跨语言数据传输的难题。
43.本发明提出一种基于antlr4的代码生成器,将实现订阅/发布数据分发服务(dds)的用户自定义的数据结构类型另存为idl文件作为代码生成器的输入,通过代码生成器得到cmake文件,在windows/linux环境下使用cmake命令产生工程文件,通过windows/linux环境下的编译器生成可执行文件,从而实现跨平台跨语言的数据分发服务的应用。
44.如图1所示,本发明提出的一种基于antlr4的代码生成器,antlr4提供一种框架,能够根据用户自定义的文法文件自动生成词法分析器(lexer)、语法分析器(parser)和语
法分析树(treeparser),其中词法分析器将输入文本生成词法符号类tokens,并作为语法分析器的输入,语法分析器输出一棵语法分析树。
45.本发明设计的一种基于antlr4的代码生成器,将实现订阅/发布数据分发服务(dds)的用户自定义的数据结构类型另存为idl文件,作为代码生成器的输入,通过代码生成器得到工程文件,在windows/linux环境下使用cmake命令构建工程,并编译生成可执行文件,从而实现跨平台跨语言数据分发服务。
46.代码生成器从设计结构上划分,主要包括四个步骤:生成词法和语法分析器、生成语法分析树并转化为结构化数据、定义生成c/c 及java文件的公共接口文件、生成c/c 及java工程文件,具体步骤如下:
47.s1:生成idl语法规则文件对应的词法分析器和语法分析器
48.s11、定义idl语法规则文件(.g4文件);
49.s12、通过antlr4工具,将.g4文件生成可分析idl文件的词法分析器和代码语法分析器;
50.s13、词法分析器和语法分析器运行时会调用altar4-runtime库,antlr-runtime由antlr4中间件提供,存放于antlr4目录下,其中包含了antlr4-runtime源代码。
51.s2:对idl文件进行预处理,通过词法分析器和语法分析器将预处理后的idl文件生成语法分析树,并进一步将语法分析树生成结构化数据
52.s21、输入用户自定义的idl文件;
53.s22、代码预处理模块处理idl文件中的预处理指令,包括#ifdef/#define/#undef/#else/#endif等指令;包含文件处理模块负责加载和处理idl文件中的包含代码,如:#include“xxxx.idl”;
54.s23、通过词法分析器和语法分析器将处理后的idl文件生成对应的语法分析树;
55.s24、结构化数据生成模块将生成的语法分析树进一步处理,形成友好的结构化数据。
56.s3:定义生成c/c 、java文件的公共接口文件
57.s31、源文件公共接口生成模块由antlr4提供,是c/c 、java文件公共接口的基类,定义了代码文件生成所需的公共接口和属性;
58.s32、以源文件公共接口生成模块为基础,定义生成c/c 、java文件的公共接口文件,c/c 、java文件公共接口生成模块根据c/c 、java语言特征抽象了并定义了生成c/c 、java文件的公共接口文件,主要包括type、type_plugin、type_support、type_publisher、type_subscriber、cmakelist等。
59.s4:c/c 、java公共接口文件读取工程模板文件,并用步骤s2中的结构化数据替换模板文件中的结构化数据,生成c/c 、java工程文件
60.s41、基于dds的接口规则,定义用于生成c/c 、java的工程模板文件;
61.s42、c/c 、java公共接口文件读取工程模板文件,并用步骤s2中的结构化数据替换模板文件中的结构化数据,生成对应的c/c 、java工程文件;其中包括publisher源文件,subscriber源文件、cmakelist文件等其他文件。
62.将c/c 、java工程文件拷贝到windows/linux等不同环境下,可以直接使用cmake命令构建工程,并编译生成可执行文件,从而实现跨平台跨语言的数据分发服务的应用。
63.其中,gui(用户界面)通过qt5作为界面开发工具,给用户提供友好、易用、可跨平台使用的交互界面;辅助模块提供了字符串操作和程序命令行解析等功能的函数接口。
64.异常处理模块将idl代码解析过程中存在的错误信息输出到控制台。
65.以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献