CN115686493A - 一种c语言数据结构代码自动生成接口控制文档的方法 - Google Patents

一种c语言数据结构代码自动生成接口控制文档的方法 Download PDF

Info

Publication number
CN115686493A
CN115686493A CN202211227452.4A CN202211227452A CN115686493A CN 115686493 A CN115686493 A CN 115686493A CN 202211227452 A CN202211227452 A CN 202211227452A CN 115686493 A CN115686493 A CN 115686493A
Authority
CN
China
Prior art keywords
variable
annotation
line
data model
attribute
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
CN202211227452.4A
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.)
Avic Luoyang Photoelectric Technology Co ltd
Original Assignee
Avic Luoyang Photoelectric 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 Avic Luoyang Photoelectric Technology Co ltd filed Critical Avic Luoyang Photoelectric Technology Co ltd
Priority to CN202211227452.4A priority Critical patent/CN115686493A/zh
Publication of CN115686493A publication Critical patent/CN115686493A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Machine Translation (AREA)

Abstract

本发明提供了一种C语言数据结构代码自动生成接口控制文档的方法。通过对含有结构体定义的C语言头文件代码进行预处理、信息提取和关键字解析,构建出结构体数据模型、变量模型,并计算出变量长度和结构体长度,完善结构体数据模型中的属性值,同时建立结构体字典,根据字典中的结构体属性信息,最终自动生成与代码中结构体定义一致的接口控制文档。本发明避免了手动编写接口控制文档的过程,能够节约人力成本,提高机载嵌入式软件开发的工作效率。

Description

一种C语言数据结构代码自动生成接口控制文档的方法
技术领域
本发明属计算机软件开发领域,具体涉及一种C语言数据结构代码自动生成接口控制文档的方法。
背景技术
在机载嵌入式软件开发联试过程中,各设备间需要传输的数据会逐渐增加,代码中与之相关的结构体定义需要频繁更改,涉及相应的接口控制文档也需要手动更新的问题,难以保证结构体定义代码与接口控制文档的一致性,同时手动更改接口控制文档工作量较大,不仅效率低下,出错率也较高,不利于后续代码文档的维护。
发明内容
为了克服现有技术的不足,本发明提供一种C语言数据结构代码自动生成接口控制文档的方法。通过对含有结构体定义的C语言头文件代码进行预处理、信息提取和关键字解析,构建出结构体数据模型、变量模型,并计算出变量长度和结构体长度,完善结构体数据模型中的属性值,同时建立结构体字典,根据字典中的结构体属性信息,最终自动生成与代码中结构体定义一致的接口控制文档。本发明避免了手动编写接口控制文档的过程,能够节约人力成本,提高机载嵌入式软件开发的工作效率。
一种C语言数据结构代码自动生成接口控制文档的方法,其特征在于步骤如下:
步骤1:根据用户指定的文件夹路径,加载该路径下全部.h文件,逐个读取.h文件中的代码;
步骤2:对读取到的代码进行预处理,包括删除被预编译指令屏蔽掉的部分,读取被引用的头文件,完成宏定义解析、宏定义的替换,若存在引用其他头文件,优先处理引用的头文件;
步骤3:逐行解析经过预处理之后的代码,包括:判断该行是否为注释行,如果是注释行,则将注释内容添加到当前注释缓存中;判断该行是否为空白行,如果是空白行,则清空当前注释缓存;判断该行是否存在注释信息,如果存在,则截取注释信息,并添加到当前注释缓存中;判断该行是否使用关键字typedef、struct、union或enum定义了前面代码中未出现的新的结构体,如果存在新的结构体,根据字符{}截取该结构体的代码段,同时创建一个结构体数据模型,属性包括结构体名称、类型、成员列表、内存长度、注释;将当前注释缓存中的内容赋值给结构体数据模型的注释属性;将关键字struct、union或enum赋值给结构体数据模型的类型属性;截取关键字struct、union或enum后面一个单词作为结构体名称,如果截取失败,则截取字符}后面一个单词作为结构体名称,赋值给结构体数据模型的名称属性;
步骤4:逐行解析步骤3中截取到的结构体代码段,判断是否定义了新的变量,如果存在,则创建一个变量模型,变量模型包括变量名、变量类型、位域变量的bit位长度、数组长度、变量单位、变量取值范围、变量转换的比例尺、变量分辨率、变量的注释、变量内存长度;将当前注释缓存中的内容赋值给变量模型的注释属性,同时根据分隔符解析注释,得到变量单位、变量取值范围、变量转换的比例尺、变量分辨率;提取当前行分号前的代码,判断该行代码是否存在字符[],如果存在,则提取[]中间的内容作为变量数组的长度,同时剔除[]及其中间内容;判断该行剩余代码是否存在冒号,如果存在则提取冒号后的内容,作为位域变量的bit位长度,同时剔除冒号及其后面内容;根据空格分割该行剩余代码,提取变量类型及变量名;根据变量类型以及数组长度计算该变量在内存中占用的空间大小,并赋值给变量内存长度属性;
步骤5:将步骤3得到的结构体数据模型作为根节点,将步骤4得到的变量模型按照变量定义的先后顺序,添加到对应的结构体数据模型的成员列表属性中,作为叶子节点;
步骤6:根据步骤5中得到的结构体数据模型的类型属性,计算该结构体在内存中占用的空间大小,具体为:对于struct类型,遍历其成员列表属性,将其中的每一个变量模型的变量内存长度属性值相加作为该结构体数据模型的内存长度;对于union类型,遍历其成员列表属性,将其中变量模型的变量内存长度最大值作为该结构体数据模型的内存长度;对于enum类型,其内存长度为固定值4个字节;
然后,将结构体数据模型添加到结构体字典中保存,其中结构体名为字典的索引,结构体数据模型为字典的值;
步骤7:遍历结构体字典,为每一个结构体数据模型创建一个Word表格,分别读取结构体数据模型的结构体名称、类型、内存长度、注释属性值填充到表格的相应位置;遍历结构体数据模型的成员列表,读取每一个变量模型的变量名、变量类型、位域变量的bit位长度、数组长度、变量单位、变量取值范围、变量转换的比例尺、变量分辨率、变量的注释、变量内存长度属性值,填充到表格的相应位置,完成接口控制文档的生成。
本发明的有益效果是:通过提取结构体定义信息,自动生成接口控制文档,避免了手动编写接口控制文档的工作,能够节约人力成本,提高机载嵌入式软件开发的工作效率。
具体实施方式
下面结合实施例对本发明进一步说明,本发明包括但不仅限于下述实施例。
本发明提供了一种C语言数据结构代码自动生成接口控制文档的方法,其具体实现过程如下:
1、头文件代码信息的自动提取
根据用户指定的文件夹路径,加载该路径下全部.h文件,并从第一个.h文件开始,逐个文件中的代码。
2、头文件代码信息预处理
对读取到的代码进行预处理,包括删除被预编译指令屏蔽掉的部分,读取被引用的头文件,完成宏定义解析、宏定义的替换,若存在引用其他头文件,优先处理引用的头文件。
3、结构体类型及关系解析
逐行解析经过预处理之后的代码,包括:判断该行是否为注释行,如果是注释行,则将注释内容添加到当前注释缓存中;判断该行是否为空白行,如果是空白行,则清空当前注释缓存;判断该行是否存在注释信息,如果存在,则截取注释信息,并添加到当前注释缓存中;判断该行是否使用关键字typedef、struct、union或enum定义了前面代码中未出现的新的结构体,如果存在新的结构体,根据字符{}截取该结构体的代码段,同时创建一个结构体数据模型,属性包括结构体名称、类型、成员列表、内存长度、注释;将当前注释缓存中的内容赋值给结构体数据模型的注释属性;将关键字struct、union或enum赋值给结构体数据模型的类型属性;截取关键字struct、union或enum后面一个单词作为结构体名称,如果截取失败,则截取字符}后面一个单词作为结构体名称,赋值给结构体数据模型的名称属性。
4、结构体成员及其长度计算
逐行解析步骤3中截取到的结构体代码段,判断是否定义了新的变量,如果存在,则创建一个变量模型,变量模型包括变量名、变量类型、位域变量的bit位长度、数组长度、变量单位、变量取值范围、变量转换的比例尺、变量分辨率、变量的注释、变量内存长度;将当前注释缓存中的内容赋值给变量模型的注释属性,同时根据分隔符解析注释,得到变量单位、变量取值范围、变量转换的比例尺、变量分辨率;提取当前行分号前的代码,判断该行代码是否存在字符[],如果存在,则提取[]中间的内容作为变量数组的长度,同时剔除[]及其中间内容;判断该行剩余代码是否存在冒号,如果存在则提取冒号后的内容,作为位域变量的bit位长度,同时剔除冒号及其后面内容;根据空格分割该行剩余代码,提取变量类型及变量名;根据变量类型以及数组长度计算该变量在内存中占用的空间大小,并赋值给变量内存长度属性;
5、构建结构体数据模型
将步骤3得到的结构体数据模型作为根节点,将步骤4得到的变量模型按照变量定义的先后顺序,添加到对应的结构体数据模型的成员列表属性中,作为叶子节点。
6、构建结构体字典
根据步骤5中得到的结构体数据模型的类型属性,计算该结构体在内存中占用的空间大小,具体为:对于struct类型,遍历其成员列表属性,将其中的每一个变量模型的变量内存长度属性值相加作为该结构体数据模型的内存长度;对于union类型,遍历其成员列表属性,将其中变量模型的变量内存长度最大值作为该结构体数据模型的内存长度;对于enum类型,其内存长度为固定值4个字节。
然后,将结构体数据模型添加到结构体字典中保存,其中结构体名为字典的索引,结构体数据模型为字典的值。
7、生成接口控制文档
遍历结构体字典,为每一个结构体数据模型创建一个Word表格,分别读取结构体数据模型的结构体名称、类型、内存长度、注释属性值填充到表格的相应位置;遍历结构体数据模型的成员列表,读取每一个变量模型的变量名、变量类型、位域变量的bit位长度、数组长度、变量单位、变量取值范围、变量转换的比例尺、变量分辨率、变量的注释、变量内存长度属性值,填充到表格的相应位置,完成接口控制文档的生成。

Claims (1)

1.一种C语言数据结构代码自动生成接口控制文档的方法,其特征在于步骤如下:
步骤1:根据用户指定的文件夹路径,加载该路径下全部.h文件,逐个读取.h文件中的代码;
步骤2:对读取到的代码进行预处理,包括删除被预编译指令屏蔽掉的部分,读取被引用的头文件,完成宏定义解析、宏定义的替换,若存在引用其他头文件,优先处理引用的头文件;
步骤3:逐行解析经过预处理之后的代码,包括:判断该行是否为注释行,如果是注释行,则将注释内容添加到当前注释缓存中;判断该行是否为空白行,如果是空白行,则清空当前注释缓存;判断该行是否存在注释信息,如果存在,则截取注释信息,并添加到当前注释缓存中;判断该行是否使用关键字typedef、struct、union或enum定义了前面代码中未出现的新的结构体,如果存在新的结构体,根据字符{}截取该结构体的代码段,同时创建一个结构体数据模型,属性包括结构体名称、类型、成员列表、内存长度、注释;将当前注释缓存中的内容赋值给结构体数据模型的注释属性;将关键字struct、union或enum赋值给结构体数据模型的类型属性;截取关键字struct、union或enum后面一个单词作为结构体名称,如果截取失败,则截取字符}后面一个单词作为结构体名称,赋值给结构体数据模型的名称属性;
步骤4:逐行解析步骤3中截取到的结构体代码段,判断是否定义了新的变量,如果存在,则创建一个变量模型,变量模型包括变量名、变量类型、位域变量的bit位长度、数组长度、变量单位、变量取值范围、变量转换的比例尺、变量分辨率、变量的注释、变量内存长度;将当前注释缓存中的内容赋值给变量模型的注释属性,同时根据分隔符解析注释,得到变量单位、变量取值范围、变量转换的比例尺、变量分辨率;提取当前行分号前的代码,判断该行代码是否存在字符[],如果存在,则提取[]中间的内容作为变量数组的长度,同时剔除[]及其中间内容;判断该行剩余代码是否存在冒号,如果存在则提取冒号后的内容,作为位域变量的bit位长度,同时剔除冒号及其后面内容;根据空格分割该行剩余代码,提取变量类型及变量名;根据变量类型以及数组长度计算该变量在内存中占用的空间大小,并赋值给变量内存长度属性;
步骤5:将步骤3得到的结构体数据模型作为根节点,将步骤4得到的变量模型按照变量定义的先后顺序,添加到对应的结构体数据模型的成员列表属性中,作为叶子节点;
步骤6:根据步骤5中得到的结构体数据模型的类型属性,计算该结构体在内存中占用的空间大小,具体为:对于struct类型,遍历其成员列表属性,将其中的每一个变量模型的变量内存长度属性值相加作为该结构体数据模型的内存长度;对于union类型,遍历其成员列表属性,将其中变量模型的变量内存长度最大值作为该结构体数据模型的内存长度;对于enum类型,其内存长度为固定值4个字节;
然后,将结构体数据模型添加到结构体字典中保存,其中结构体名为字典的索引,结构体数据模型为字典的值;
步骤7:遍历结构体字典,为每一个结构体数据模型创建一个Word表格,分别读取结构体数据模型的结构体名称、类型、内存长度、注释属性值填充到表格的相应位置;遍历结构体数据模型的成员列表,读取每一个变量模型的变量名、变量类型、位域变量的bit位长度、数组长度、变量单位、变量取值范围、变量转换的比例尺、变量分辨率、变量的注释、变量内存长度属性值,填充到表格的相应位置,完成接口控制文档的生成。
CN202211227452.4A 2022-10-09 2022-10-09 一种c语言数据结构代码自动生成接口控制文档的方法 Pending CN115686493A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211227452.4A CN115686493A (zh) 2022-10-09 2022-10-09 一种c语言数据结构代码自动生成接口控制文档的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211227452.4A CN115686493A (zh) 2022-10-09 2022-10-09 一种c语言数据结构代码自动生成接口控制文档的方法

Publications (1)

Publication Number Publication Date
CN115686493A true CN115686493A (zh) 2023-02-03

Family

ID=85063971

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211227452.4A Pending CN115686493A (zh) 2022-10-09 2022-10-09 一种c语言数据结构代码自动生成接口控制文档的方法

Country Status (1)

Country Link
CN (1) CN115686493A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116431117A (zh) * 2023-04-18 2023-07-14 南京朗立微集成电路有限公司 使用结构化数据与嵌入式主机通信的方法和系统

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116431117A (zh) * 2023-04-18 2023-07-14 南京朗立微集成电路有限公司 使用结构化数据与嵌入式主机通信的方法和系统
CN116431117B (zh) * 2023-04-18 2023-12-29 南京朗立微集成电路有限公司 使用结构化数据与嵌入式主机通信的方法和系统

Similar Documents

Publication Publication Date Title
CN110019218B (zh) 数据存储与查询方法及设备
CN112528174A (zh) 基于知识图谱和多重匹配的地址修整补全方法及应用
CN112540862A (zh) 一种接口文档数据生成方法、装置、设备及存储介质
CN115686493A (zh) 一种c语言数据结构代码自动生成接口控制文档的方法
CN112379917A (zh) 浏览器兼容性提升方法、装置、设备及存储介质
CN112163025A (zh) 数据库数据导出方法、装置、计算机设备及存储介质
CN115408088A (zh) 一种软件系统语言国际化全流程自动化方法
CN116227505A (zh) 一种国际化文件翻译方法、装置、设备及介质
CN109947711B (zh) 一种对ios项目开发过程中的多语言文件自动化管理方法
CN115408419A (zh) 一种数据抽取方法及相关装置
CN111241191A (zh) 一种数据库的同步方法及装置
CN106407266B (zh) 一种三维计算结果格式化提取方法和装置
CN111626585B (zh) 脚本数据提取方法、装置、计算机设备和存储介质
CN113220800B (zh) 基于antlr的数据字段血缘分析方法及装置
CN110618816B (zh) 一种基于Python的iOS APP国际化文件管理方法
CN115168399B (zh) 基于图形化界面的数据处理方法、装置、设备及存储介质
CN114969131B (zh) 一种信息的查询方法、装置及设备
CN114676289A (zh) 前缀树的处理方法、装置、终端及存储介质
CN110780919B (zh) 一种应用程序语言包的制作维护方法及系统
CN110515913B (zh) 日志处理方法及装置
CN113127484A (zh) 一种高效快捷的数据入库方法及设备
CN112328258A (zh) 一种编程语言的转换方法及系统
CN112783927A (zh) 一种数据库查询方法及系统
CN115617343A (zh) 编译描述文件的代码注入方法、系统和电子设备
CN113138959A (zh) 一种将数据库中数据导出成Excel文件的方法

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