首页 / 专利库 / 人工智能 / 语言代码 / 一种数据交换格式化源代码生成方法及装置

一种数据交换格式化源代码生成方法及装置

阅读:238发布:2020-05-11

专利汇可以提供一种数据交换格式化源代码生成方法及装置专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种数据交换格式化源代码生成方法及工具,属于代码生成技术领域。其由协议解析模 块 读取协议 原型 定义文件并生成协议规则,并由协议检测模块测试通过后,根据引擎规则模板和 操作系统 抽象层,生成基于C语言的数据交换格式化代码。本发明能够实现代码的格式化自动生成,便于代码 风 格的统一与交换。,下面是一种数据交换格式化源代码生成方法及装置专利的具体信息内容。

1.一种数据交换格式化源代码生成方法,其特征在于,根据预设的协议原型定义文件生成协议规则,对协议规则进行测试,测试通过后,根据预先确定的引擎规则模板和操作系统抽象层,生成基于C语言的数据交换格式化代码;具体包括以下步骤:
(1)读取协议原型定义文件,识别出字段类型、字段声明、字段标签和注释的信息;
(2)根据字段类型、字段声明、字段标签的信息展开嵌套消息流并生成协议规则;
(3)根据协议规则验证参数是否合法,判定协议规则优先级并依据优先级对协议规则进行排序;
(4)根据预设的设计模式,将协议规则按顺序与引擎规则模板中的结构相匹配;
(5)根据引擎规则模板,并结合操作系统抽象层匹配及优化结果生成C语言代码
2.一种数据交换格式化源代码生成装置,其特征在于,包含以下模
(1)协议解析模块,用于按照预设模式读取协议原型定义文件,生成并展开嵌套协议规则;
(2)协议检测模块,用于验证参数是否合法,判定协议序列优先级,以及生成用于检测代码生成模块生成代码质量的验证代码;
(3)模板引擎模块,用于存储预先确定的引擎规则模板;
(4)操作系统抽象层,用于增强模板引擎的功能,封装跨平台的代码接口并进行平台相关的代码优化;
(5)代码生成模块,用于调用模板引擎模块并结合操作系统抽象层生成C语言代码。

说明书全文

一种数据交换格式化源代码生成方法及装置

技术领域

[0001] 本发明涉及代码生成技术领域,特别是指一种数据交换格式化源代码生成方法及装置。

背景技术

[0002] 软件开发过程中,用户需求的多变以及软件开发规模的加大,使得软件开发周期变长,成本增加,软件质量降低。大型软件都是在一定的时间周期内完成的,因此很多人只注重代码的编写速度,忽略了鲁棒性与可维护性,加上大型软件开发通常由很多人共同参与,编码格及平迥异,容易造成严重的差异性。尤其是在数据交换,即协议的编写和参数边界检查过程中,容易出现问题。

发明内容

[0003] 有鉴于此,本发明提出一种数据交换格式化源代码生成方法及装置,其能够实现代码的格式化自动生成,便于代码风格的统一与交换。
[0004] 基于上述目的,本发明提供的技术方案是:
[0005] 一种数据交换格式化源代码生成方法,其根据预设的协议原型定义文件生成协议规则,对协议规则进行测试,测试通过后,根据预先确定的引擎规则模板和操作系统抽象层,生成基于C语言的数据交换格式化代码。
[0006] 可选的,上述方法包括以下步骤:
[0007] (1)读取协议原型定义文件,识别出字段类型、字段声明、字段标签和注释的信息;
[0008] (2)根据字段类型、字段声明、字段标签的信息展开嵌套消息流并生成协议规则;
[0009] (3)根据协议规则验证参数是否合法,判定协议规则优先级并依据优先级对协议规则进行排序;
[0010] (4)根据预设的设计模式,将协议规则按顺序与引擎规则模板中的结构相匹配;
[0011] (5)根据引擎规则模板,并结合操作系统抽象层匹配及优化结果生成C语言代码
[0012] 此外,本发明还提供一种数据交换格式化源代码生成装置,其包含以下模
[0013] (1)协议解析模块,用于按照预设模式读取协议原型定义文件,生成并展开嵌套协议规则;
[0014] (2)协议检测模块,用于验证参数是否合法,判定协议序列优先级,以及生成用于检测代码生成模块生成代码质量的验证代码;
[0015] (3)模板引擎模块,用于存储预先确定的引擎规则模板;
[0016] (4)操作系统抽象层,用于增强模板引擎的功能,封装跨平台的代码接口并进行平台相关的代码优化;
[0017] (5)代码生成模块,用于调用模板引擎模块并结合操作系统抽象层生成C语言代码。
[0018] 从上面的叙述可以看出,本发明技术方案的有益效果在于:
[0019] 1、本发明具有标准的代码风格,输出源码为标准C语言。
[0020] 2、本发明具有良好的跨平台特性,能够兼容linux/windows/Vxworks等多种平台。
[0021] 3、本发明具有严格的协议检测,能够支持参数范围查询/判断,日志打印以及生成代码质量检测和验证。
[0022] 4、本发明具有双向格式转换,支持“序列化数据->结构体”以及“结构体->序列化数据”的双向过程。
[0023] 6、本发明能够实现大小端转换,支持网络字节序/主机字节序转换。
[0024] 7、本发明使用轻便,高效,兼容性好。
[0025] 目前的软件项目普遍需要自定义协议,并且项目中不同的程序员编码风格不同,水平良莠不齐,容易出现各种各样的问题,导致项目进展缓慢,联试状况百出,人工编码在编码风格,手工编码错误,边界检查漏检等方面存在很大的风险。而代码自动生成方法能够在零点几秒的时间内完成几千甚至上万行代码的生成,完成包括代码生成结构化数据,大小端转换,边界检查,日志打印等函数的封装,极大的方便了程序员后继工作的开展。
[0026] 总之,本发明提供了一种用来序列化结构化数据的代码生成方法及装置,能够生成基于ANSI C语言的协议序列化/反序列化、日志输出以及边界检查等代码,生成的基于C语言的数据交换格式化源代码,具备跨平台、参数边界检查等特点,能够提高了软件开发的速度和效率,达到简化开发人员开发的代码工作量、快速响应开发需求的作用,并可以使用该技术来将格式化协议序列化/反序列化成需要传输的数据流。本发明后向兼容性好,依靠已经部署的“旧”数据格式的程序就可以对新的数据结构进行升级。这样程序就不会因为消息结构的改变而造成的大规模的代码重构或者迁移的问题。因为添加新的消息中的字段标签并不会引起已经发布的程序的任何改变。生成的代码在进行序列化时采用紧凑结构,把所有字段在内存中的映像平铺且无填充空间,达到节省空间的目的。相比较其他的协议代码生成技术而言,本发明具备跨平台特性(操作系统抽象层支持),节省空间(以二进制流存储)、检测严格、轻便高效以及良好的兼容性。附图说明
[0027] 为了更加清楚地描述本专利,下面提供一幅或多幅附图,这些附图旨在对本专利的背景技术、技术原理和/或某些具体实施方案做出辅助说明。需要注意的是,这些附图可以给出也可以不给出一些在本专利文字部分已有描述且属于本领域普通技术人员公知常识的具体细节;并且,因为本领域的普通技术人员完全可以结合本专利已公开的文字内容和/或附图内容,在不付出任何创造性劳动的情况下设计出更多的附图,因此下面这些附图可以涵盖也可以不涵盖本专利文字部分所叙述的所有技术方案。此外,这些附图的具体内涵需要结合本专利的文字内容予以确定,当本专利的文字内容与这些附图中的某个明显结构不相符时,需要结合本领域的公知常识以及本专利其他部分的叙述来综合判断到底是本专利的文字部分存在笔误,还是附图中存在绘制错误。特别地,以下附图均为示例性质的图片,并非旨在暗示本专利的保护范围,本领域的普通技术人员通过参考本专利所公开的文字内容和/或附图内容,可以在不付出任何创造性劳动的情况下设计出更多的附图,这些新附图所代表的技术方案依然在本专利的保护范围之内。
[0028] 图1是本发明实施例中代码生成器规则模型图;
[0029] 图2是本发明实施例中代码生成方法的流程图

具体实施方式

[0030] 为了便于本领域技术人员对本专利技术方案的理解,同时,为了使本专利的技术目的、技术方案和有益效果更加清楚,并使权利要求书的保护范围得到充分支持,下面以具体案例的形式对本专利的技术方案做出进一步的、更详细的说明。
[0031] 一种数据交换格式化源代码生成装置,其包含以下模块:
[0032] (1)协议解析模块,用于按照预设模式读取协议原型定义文件,生成并展开嵌套协议规则;
[0033] (2)协议检测模块,用于验证参数是否合法,判定协议序列优先级,以及生成用于检测代码生成模块生成代码质量的验证代码;
[0034] (3)模板引擎模块,用于存储预先确定的引擎规则模板;
[0035] (4)操作系统抽象层,用于增强模板引擎的功能,封装跨平台的代码接口并进行平台相关的代码优化;
[0036] (5)代码生成模块,用于调用模板引擎模块并结合操作系统抽象层生成C语言代码。
[0037] 如图2所示,一种数据交换格式化源代码生成方法,包括以下步骤:
[0038] 1、按照预设模式读取协议原型定义文件
[0039] 在协议原型定义文件中,可以通过使用描述性语言,来良好地定义程序中需要用到数据格式。为了让代码生成方法用起来简单,使用的协议格式定义尽可能的简化。
[0040] 对应协议原型文件,一个数据流称之为一个“message”,一个“message”对应一个C程序中的结构体,“message”之间可以嵌套;“message”中的每一行称之为一个字段,一个字段描述一个程序中的数据类型。
[0041] 2、生成并展开嵌套协议规则
[0042] 对于每个字段而言,组成部分有:字段类型;字段声明;字段标签(可选);注释(可选)。因为数据流之间可以嵌套,必须展开嵌套的字段,提取出父数据流和子数据流,对每个字段的组成部分进行解析。
[0043] 字段类型标明该字段在程序中的数据类型。协议中出现的数组通过字段标签中的“count”标签能够实现。对于字段而言,每个标签都不是必需的。默认字段初始值default都被初始化为0。
[0044] 3、判断参数是否合法,判定协议序列优先级
[0045] 每个字段的字段标签描述了字段的特征,通过定义default/min/max标签规范数据的有效范围,从而能够在协议中判断该字段是否有效。通过count标签能够说明该字段是否为数组。再根据嵌套数据流之间的关系判定每个字段的优先级和嵌套关系。最后组合上述规则针对每个字段进行判断,判断其是否正确合法。
[0046] 4、匹配预先确定的引擎模板
[0047] 针对数据交换格式化需求,生成的代码需要跨平台运行,并且需要能够方便快捷的生成WINDOWS链接库以及LINUX下的动态链接库等等。根据这些要求,预先确定引擎规则模板,并利用代码生成模块进行调用。首先将数据流转换为结构体的形式,然后根据优先级标签分别将序列化/反序列化,日志,边界检查,最大值/最小值/默认值查询函数一一实现。
[0048] 5、操作系统抽象层
[0049] 为提高生成代码的跨平台特性,本发明具有宏指令代码处理功能。即用户可以在模板中使用宏指令申明变量、处理实例数据等。宏指令包括变量声明、赋值、算术运算、逻辑运算、条件判断、循环等等。通过对数据类型、声明、打印函数和各类接口的封装,实现跨平台功能。
[0050] 本发明还具备代码优化功能,通过调用_bulitin_expect()以及__attribute__等指令的运用,优化编译器,改变汇编指令的执行顺序,来充分利用处理器的流水线,从而加速程序的执行速度。
[0051] 6、编译协议原型定义文件
[0052] 通过以上步骤,就可以将相关定义以及协议规则作为代码生成器的输入,编译产生基于C语言的数据定义代码文件。使用编译器后生成的是.h与.c的代码文件。当下载了对应的编译器二进制文件后,就可以使用命令来完成编译过程。通过查看头文件,可以发现针对每个消息都会生成如下几种函数,包括范围检查,获取边界值等函数。另外,为了验证生成代码的正确性以及鲁棒性,协议检测模块会在代码生成完成后,生成用于检测生成代码的测试代码,方便用户进行代码检测和验证。
[0053] 因为C语言中没有C++提供的类的概念,所以,这里参考Linux内核的编写方式,将各个参数的范围检查相关的函数以函数指针的形式放在结构体中,方便用户使用。对于每个字段会生成一个check函数(范围检查)、get_max_value函数(获取最大值)、get_min_value函数(获取最小值)、get_default_value函数(获取默认值)。需要注意check函数中针对数组的检查方法,对于字段标签count大于1的变量的check函数而言,通过check每一个字段的范围值,如果其中一个不满足参数的范围检查条件,就返回对应错误码。
[0054] 图1所示是一种代码生成器规则。其中,设计模式负责控制输出代码的格式以及内容。元数据则负责将协议规范为代码生成器能够读懂的数据原型定义文件。由此可见,代码生成过程实际上是把和软件平台无关的业务数据翻译成软件平台相关的具体代码的过程,优点在于能够一定程度上减少冗繁的重复代码编写工作,使软件开发人员可以集中精于更富有创造性的工作上去。
[0055] 编译并生成代码文件后,就可以使用生成的API来编写应用程序,编写一个应用很简单,分为序列化数据、反序列化数据两个基本应用。
[0056] 序列化数据主要分为以下四步:
[0057] ·利用生成代码提供的API初始化协议结构体和参数范围检查结构体。
[0058] ·获取来自文件/内存/标准输入的数据源,利用利用代码生成器生成代码提供的API做参数范围检查。
[0059] ·使用检查合法的数据源填充数据结构。
[0060] ·利用代码生成器生成代码提供的序列化接口将数据结构序列化,然后存储在内存或者磁盘上。
[0061] 类似的,反序列化数据主要分为以下五步:
[0062] ·利用代码生成器生成代码提供的API初始化协议结构体和参数范围检查结构体。
[0063] ·将获取的数据载入内存或者输入流。
[0064] ·利用代码生成器生成代码提供的反序列化接口将数据流反序列化,然后存储在内存或者磁盘上。
[0065] ·利用利用代码生成器生成代码提供的API做参数范围检查。
[0066] ·利用利用代码生成器生成代码提供的API打印协议结构体(debug需要)[0067] 下面分别以Linux和Windows系统为例简述数据交换格式化源代码生成工具的编译和使用方法:
[0068] (1)编译:
[0069] 对于Linux系统:
[0070] 转到本工具源代码目录src下,在命令行中输入“make-f makefile.Linux”命令生成二进制可执行文件miniPackage。
[0071] 对于Windows系统:
[0072] 利用Visual Studio 20xx/VC6.0或Eclipse等编译工具,新建工程并添加src目录下的源码,编译生成可执行文件miniPackage.exe。
[0073] (2)依照协议原型定义规范,根据相关协议定义协议原型定义文件,以mpp作为后缀名。
[0074] (3)使用生成的可执行文件miniPackage生成代码:
[0075] Windows:miniPackage.exe-f SRC/*.mpp-log-order
[0076] Linux:./miniPackage-f SRC/*.mpp-log–order
[0077] (4)根据对应的接口函数,调用生成的代码,编写应用程序。
[0078] 本发明能够解决项目中需要序列化/反序列化协议的问题,目前项目都需要自定义协议,并且项目中不同的程序员编码风格不同,容易出现各种各样的问题,导致项目进展缓慢,人工编码在编码风格,手工编码错误,边界检查漏检等方面存在很大的风险。
[0079] 该代码生成方法能够在零点几秒的时间内完成几千甚至上万行代码的生成,完成包括代码生成结构化数据,大小端转换,边界检查,日志打印等函数的封装,极大的方便了程序员后继工作的开展。
[0080] 需要理解的是,上述对于本专利具体实施方式的叙述仅仅是为了便于本领域普通技术人员理解本专利方案而列举的示例性描述,并非暗示本专利的保护范围仅仅被限制在这些个例中,本领域普通技术人员完全可以在对本专利技术方案做出充分理解的前提下,以不付出任何创造性劳动的形式,通过对本专利所列举的各个例采取组合技术特征、替换部分技术特征、加入更多技术特征等等方式,得到更多的具体实施方式,所有这些具体实施方式均在本专利权利要求书的涵盖范围之内,因此,这些新的具体实施方式也应在本专利的保护范围之内。
[0081] 此外,出于简化叙述的目的,本专利也可能没有列举一些寻常的具体实施方案,这些方案是本领域普通技术人员在理解了本专利技术方案后能够自然而然想到的,显然,这些方案也应包含在本专利的保护范围之内。
[0082] 出于简化叙述的目的,上述各具体实施方式对于技术细节的公开程度可能仅仅达到本领域技术人员可以自行决断的程度,即,对于上述具体实施方式没有公开的技术细节,本领域普通技术人员完全可以在不付出任何创造性劳动的情况下,在本专利技术方案的充分提示下,借助于教科书、工具书、论文、专利、音像制品等等已公开文献予以完成,或者,这些细节是在本领域普通技术人员的通常理解下,可以根据实际情况自行作出决定的内容。可见,即使不公开这些技术细节,也不会对本专利技术方案的公开充分性造成影响。
[0083] 总之,在结合了本专利说明书对权利要求书保护范围的解释作用的基础上,任何落入本专利权利要求书涵盖范围的具体实施方案,均在本专利的保护范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈