一种C语言数据结构代码自动生成接口控制文档的方法与流程

文档序号:33185849发布日期:2023-02-04 06:25阅读:29来源:国知局
一种c语言数据结构代码自动生成接口控制文档的方法
技术领域
1.本发明属计算机软件开发领域,具体涉及一种c语言数据结构代码自动生成接口控制文档的方法。


背景技术:

2.在机载嵌入式软件开发联试过程中,各设备间需要传输的数据会逐渐增加,代码中与之相关的结构体定义需要频繁更改,涉及相应的接口控制文档也需要手动更新的问题,难以保证结构体定义代码与接口控制文档的一致性,同时手动更改接口控制文档工作量较大,不仅效率低下,出错率也较高,不利于后续代码文档的维护。


技术实现要素:

3.为了克服现有技术的不足,本发明提供一种c语言数据结构代码自动生成接口控制文档的方法。通过对含有结构体定义的c语言头文件代码进行预处理、信息提取和关键字解析,构建出结构体数据模型、变量模型,并计算出变量长度和结构体长度,完善结构体数据模型中的属性值,同时建立结构体字典,根据字典中的结构体属性信息,最终自动生成与代码中结构体定义一致的接口控制文档。本发明避免了手动编写接口控制文档的过程,能够节约人力成本,提高机载嵌入式软件开发的工作效率。
4.一种c语言数据结构代码自动生成接口控制文档的方法,其特征在于步骤如下:
5.步骤1:根据用户指定的文件夹路径,加载该路径下全部.h文件,逐个读取.h文件中的代码;
6.步骤2:对读取到的代码进行预处理,包括删除被预编译指令屏蔽掉的部分,读取被引用的头文件,完成宏定义解析、宏定义的替换,若存在引用其他头文件,优先处理引用的头文件;
7.步骤3:逐行解析经过预处理之后的代码,包括:判断该行是否为注释行,如果是注释行,则将注释内容添加到当前注释缓存中;判断该行是否为空白行,如果是空白行,则清空当前注释缓存;判断该行是否存在注释信息,如果存在,则截取注释信息,并添加到当前注释缓存中;判断该行是否使用关键字typedef、struct、union或enum定义了前面代码中未出现的新的结构体,如果存在新的结构体,根据字符{}截取该结构体的代码段,同时创建一个结构体数据模型,属性包括结构体名称、类型、成员列表、内存长度、注释;将当前注释缓存中的内容赋值给结构体数据模型的注释属性;将关键字struct、union或enum赋值给结构体数据模型的类型属性;截取关键字struct、union或enum后面一个单词作为结构体名称,如果截取失败,则截取字符}后面一个单词作为结构体名称,赋值给结构体数据模型的名称属性;
8.步骤4:逐行解析步骤3中截取到的结构体代码段,判断是否定义了新的变量,如果存在,则创建一个变量模型,变量模型包括变量名、变量类型、位域变量的bit位长度、数组长度、变量单位、变量取值范围、变量转换的比例尺、变量分辨率、变量的注释、变量内存长
度;将当前注释缓存中的内容赋值给变量模型的注释属性,同时根据分隔符解析注释,得到变量单位、变量取值范围、变量转换的比例尺、变量分辨率;提取当前行分号前的代码,判断该行代码是否存在字符[],如果存在,则提取[]中间的内容作为变量数组的长度,同时剔除[]及其中间内容;判断该行剩余代码是否存在冒号,如果存在则提取冒号后的内容,作为位域变量的bit位长度,同时剔除冒号及其后面内容;根据空格分割该行剩余代码,提取变量类型及变量名;根据变量类型以及数组长度计算该变量在内存中占用的空间大小,并赋值给变量内存长度属性;
[0009]
步骤5:将步骤3得到的结构体数据模型作为根节点,将步骤4得到的变量模型按照变量定义的先后顺序,添加到对应的结构体数据模型的成员列表属性中,作为叶子节点;
[0010]
步骤6:根据步骤5中得到的结构体数据模型的类型属性,计算该结构体在内存中占用的空间大小,具体为:对于struct类型,遍历其成员列表属性,将其中的每一个变量模型的变量内存长度属性值相加作为该结构体数据模型的内存长度;对于union类型,遍历其成员列表属性,将其中变量模型的变量内存长度最大值作为该结构体数据模型的内存长度;对于enum类型,其内存长度为固定值4个字节;
[0011]
然后,将结构体数据模型添加到结构体字典中保存,其中结构体名为字典的索引,结构体数据模型为字典的值;
[0012]
步骤7:遍历结构体字典,为每一个结构体数据模型创建一个word表格,分别读取结构体数据模型的结构体名称、类型、内存长度、注释属性值填充到表格的相应位置;遍历结构体数据模型的成员列表,读取每一个变量模型的变量名、变量类型、位域变量的bit位长度、数组长度、变量单位、变量取值范围、变量转换的比例尺、变量分辨率、变量的注释、变量内存长度属性值,填充到表格的相应位置,完成接口控制文档的生成。
[0013]
本发明的有益效果是:通过提取结构体定义信息,自动生成接口控制文档,避免了手动编写接口控制文档的工作,能够节约人力成本,提高机载嵌入式软件开发的工作效率。
具体实施方式
[0014]
下面结合实施例对本发明进一步说明,本发明包括但不仅限于下述实施例。
[0015]
本发明提供了一种c语言数据结构代码自动生成接口控制文档的方法,其具体实现过程如下:
[0016]
1、头文件代码信息的自动提取
[0017]
根据用户指定的文件夹路径,加载该路径下全部.h文件,并从第一个.h文件开始,逐个文件中的代码。
[0018]
2、头文件代码信息预处理
[0019]
对读取到的代码进行预处理,包括删除被预编译指令屏蔽掉的部分,读取被引用的头文件,完成宏定义解析、宏定义的替换,若存在引用其他头文件,优先处理引用的头文件。
[0020]
3、结构体类型及关系解析
[0021]
逐行解析经过预处理之后的代码,包括:判断该行是否为注释行,如果是注释行,则将注释内容添加到当前注释缓存中;判断该行是否为空白行,如果是空白行,则清空当前注释缓存;判断该行是否存在注释信息,如果存在,则截取注释信息,并添加到当前注释缓
存中;判断该行是否使用关键字typedef、struct、union或enum定义了前面代码中未出现的新的结构体,如果存在新的结构体,根据字符{}截取该结构体的代码段,同时创建一个结构体数据模型,属性包括结构体名称、类型、成员列表、内存长度、注释;将当前注释缓存中的内容赋值给结构体数据模型的注释属性;将关键字struct、union或enum赋值给结构体数据模型的类型属性;截取关键字struct、union或enum后面一个单词作为结构体名称,如果截取失败,则截取字符}后面一个单词作为结构体名称,赋值给结构体数据模型的名称属性。
[0022]
4、结构体成员及其长度计算
[0023]
逐行解析步骤3中截取到的结构体代码段,判断是否定义了新的变量,如果存在,则创建一个变量模型,变量模型包括变量名、变量类型、位域变量的bit位长度、数组长度、变量单位、变量取值范围、变量转换的比例尺、变量分辨率、变量的注释、变量内存长度;将当前注释缓存中的内容赋值给变量模型的注释属性,同时根据分隔符解析注释,得到变量单位、变量取值范围、变量转换的比例尺、变量分辨率;提取当前行分号前的代码,判断该行代码是否存在字符[],如果存在,则提取[]中间的内容作为变量数组的长度,同时剔除[]及其中间内容;判断该行剩余代码是否存在冒号,如果存在则提取冒号后的内容,作为位域变量的bit位长度,同时剔除冒号及其后面内容;根据空格分割该行剩余代码,提取变量类型及变量名;根据变量类型以及数组长度计算该变量在内存中占用的空间大小,并赋值给变量内存长度属性;
[0024]
5、构建结构体数据模型
[0025]
将步骤3得到的结构体数据模型作为根节点,将步骤4得到的变量模型按照变量定义的先后顺序,添加到对应的结构体数据模型的成员列表属性中,作为叶子节点。
[0026]
6、构建结构体字典
[0027]
根据步骤5中得到的结构体数据模型的类型属性,计算该结构体在内存中占用的空间大小,具体为:对于struct类型,遍历其成员列表属性,将其中的每一个变量模型的变量内存长度属性值相加作为该结构体数据模型的内存长度;对于union类型,遍历其成员列表属性,将其中变量模型的变量内存长度最大值作为该结构体数据模型的内存长度;对于enum类型,其内存长度为固定值4个字节。
[0028]
然后,将结构体数据模型添加到结构体字典中保存,其中结构体名为字典的索引,结构体数据模型为字典的值。
[0029]
7、生成接口控制文档
[0030]
遍历结构体字典,为每一个结构体数据模型创建一个word表格,分别读取结构体数据模型的结构体名称、类型、内存长度、注释属性值填充到表格的相应位置;遍历结构体数据模型的成员列表,读取每一个变量模型的变量名、变量类型、位域变量的bit位长度、数组长度、变量单位、变量取值范围、变量转换的比例尺、变量分辨率、变量的注释、变量内存长度属性值,填充到表格的相应位置,完成接口控制文档的生成。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1