当前位置: 首页 > 专利查询>南京大学专利>正文

一种C语言项目依赖信息管理和可视化的方法及系统技术方案

技术编号:30227966 阅读:30 留言:0更新日期:2021-09-29 09:55
本发明专利技术公开了一种C语言项目依赖信息管理和可视化的方法及系统,包括:提取项目中单个C语言文件的信息;将每个文件提取到的信息合并保存到关系型数据库中;基于关系型数据库,根据用户的查询提供多种依赖关系结果;获取依赖图信息并保存至图数据库;基于图数据库,根据用户的查询提供多种可视化的依赖关系图,本发明专利技术提供了一种对C语言项目中的复杂的依赖信息的高效管理,精简存储和便捷访问的方法,同时基于基础信息抽取更丰富的依赖信息,这些数据可以为自动化程序理解技术提供支持;本发明专利技术同时提供了多种可视化的依赖关系图的生成方法,使得开发人员可以直观了解大型项目中的依赖关系。关系。关系。

【技术实现步骤摘要】
一种C语言项目依赖信息管理和可视化的方法及系统


[0001]本专利技术属于软件工程和信息管理领域,尤其涉及一种C语言项目依赖信息管理和可视化的方法及系统。

技术介绍

[0002]在大规模软件工程项目的开发中,自动化程序理解技术的作用越来越重要,已经有很多基于该技术的相关工具帮助提升开发人员的开发效率。而这些技术往往依赖项目源代码中细粒度的、丰富的、多层次的依赖信息。
[0003]C语言在今天被广泛用于底层开发,包括编译器,驱动,嵌入式软件,操作系统内核等软件的开发。但是作为一门古老的通用程序设计语言,由于它偏向底层,设计上支持基于宏的预处理机制,支持独立编译,之后再链接。同时C语言语法中包括多种类型的符号,每个符号存在多种使用状态,还存在复杂的命名空间,因此C语言代码中蕴含着复杂的依赖关系。
[0004]因此,需要一种C语言项目依赖信息管理和可视化的方法和装置,针对C语言项目中复杂的依赖信息,对多种类的依赖信息抽象出较为统一的保存形式,高效地管理这些依赖信息,便捷地访问这些依赖信息,基于基础信息抽取更丰富的依赖信息,同时提供可视化的依赖关系图。

技术实现思路

[0005]为此,需要提供一种C语言项目依赖信息管理和可视化的方法及系统,可实现对C语言项目中的复杂依赖信息的高效管理,精简存储和便捷访问,基于基础信息抽取更丰富的依赖信息,同时提供多种可视化的依赖关系图。
[0006]为实现上述目的,专利技术人提供了一种C语言项目依赖信息管理和可视化的方法,包括:提取项目中单个C语言文件的信息;将每个文件提取到的信息合并保存到关系型数据库中;基于关系型数据库,根据用户的查询提供多种依赖关系结果;获取依赖图信息并保存至图数据库;基于图数据库,根据用户的查询提供多种可视化的依赖关系图。
[0007]作为本专利技术的一种优选方式,所述提取项目中单个C语言文件的符号信息,包括:提取单个C语言文件中的符号信息,对C语言文件中出现的每个符号,提取该符号的全限定名、符号类型,所述符号类型包括函数符号、变量符号、宏符号、类型符号和文件符号;提取单个C语言文件中的引用信息,对C语言文件中出现的符号引用,提取该引用的对应符号的全限定名、所在文件、所在位置和引用类型,所述所在位置包括行号和列号,所述引用类型包括声明、定义、使用和宏,所述宏包含定义、取消定义、宏展开和条件分支。
[0008]作为本专利技术的一种优选方式,所述符号的全限定名包括文件名、符号名、偏移量、限定符和分割符,所述文件名指该符号的定义所在的文件路径,所述偏移量为该符号的定义位置相对于文件开头的偏移字符数,所述限定符为标识该局部符号所在的局部命名空间的其他符号的符号名,所述分隔符包括正斜杠分隔符、双冒号分隔符、#分隔符和@分隔符,
其中:文件名与限定符、文件名与符号名、偏移量与限定符、偏移量与符号名之间用正斜杠分隔符隔开,限定符与限定符、限定符与符号名之间用双冒号分隔符隔开,文件名与偏移量之间用@分隔符隔开,#分隔符、@分隔符还出现在符号名之前,用于标识符号的类型;
[0009]作为本专利技术的一种优选方式,所述提取该符号的全限定名,包括:提取函数符号的全限定名,格式为“文件名/函数名”,文件名是指函数定义所在的文件名,如果未找到函数定义,那么没有文件名和正斜杠分隔符;提取变量符号的全限定名,所述变量包括全局变量和局部变量,全局变量的全限定名格式为“文件名/变量名”,局部变量的全限定名格式为“文件名@偏移量/限定符::变量名”,其中,如果该局部变量定义在一个嵌套的命名空间中,“限定符::”可重复多次,文件名和偏移量是指变量定义所在的文件名和位置,如果未找到变量定义,那么没有文件名、偏移量、@分隔符和正斜杠分隔符,函数的参数视为定义在该函数命名空间中的局部变量,结构体、联合体和枚举型中的成员视为定义在该类型命名空间中的局部变量;提取宏符号的全限定名,宏符号的全限定名格式为“#宏符号名”;提取类型符号的全限定名,全局类型的全限定名格式为“文件名/限定符::类型名”,对于结构体、联合体和枚举型,类型名前固定有一组限定符和双冒号分隔符,分别是“struct::”、“union::”、“enum::”,全局类型符号的全限定名没有其他的限定符,局部类型符号的全限定名存在其他的限定符,局部类型的全限定名格式为“文件名@偏移量/限定符::类型名”,其中,如果该局部类型定义在一个嵌套的命名空间中,“限定符::”可重复多次,文件名和偏移量是指该类型的定义所在的文件名和位置,如果未找到类型的定义,那么没有文件名、偏移量、@分隔符和正斜杠分隔符;提取文件类型符号的全限定名,文件符号的全限定名格式为“@文件路径”。
[0010]作为本专利技术的一种优选方式,所述将每个文件提取到的信息合并保存到关系型数据库中,包括:新建关系型数据库和表,初始化关系型数据库,创建SymbolTable,ReferenceTable、FileTable三张空表,分别存储符号信息、引用信息和文件的路径,三张表均使用自增的主键,分别称为sid,refid,fid;合并文件信息,将项目中分析过的C语言文件的信息添加到FileTable,对出现在引用信息中的每个文件,如果该文件的完整路径不在FileTable中,将该文件的路径存入FileTable;合并符号信息,对于每个文件中的每个符号信息,如果SymbolTable中不存在全限定名与该符号的全限定名相同的数据,那么将该符号信息存入SymbolTable;合并引用信息,对于每个文件中的每个引用信息,如果ReferenceTable中不存在所在文件、所在位置、引用符号的全限定名与该引用的对应信息完全相同的数据,那么在SymbolTable中通过对应符号的全限定名获得sid,将该引用信息中引用符号的全限定名替换为sid;在FileTable中通过文件路径获得fid,将该引用信息中引用符号的所在文件替换为fid,将修改过的引用信息存入RefTable;修正符号信息,对于SymbolTable中的符号信息,如果存在一个符号A的全限定名不含文件名,另一个符号B的全限定名去除文件名后与A符号的全限定名完全相同,将ReferenceTable中sid对应为符号A的数据全部改为与B符号对应,并删除SymbolTable中A符号的记录;
[0011]作为本专利技术的一种优选方式,所述基于关系型数据库,根据用户的查询提供多种依赖关系结果,包括:根据用户输入的引用信息,提取对应的符号的定义

使用关系;根据用户输入的符号信息,提取对应符号与其他符号依赖关系;根据用户输入的文件信息,提取对应文件的文件包含关系;根据用户输入的文件信息,提取对应文件与其他文件之间的依赖
关系。
[0012]作为本专利技术的一种优选方式,所述根据用户输入的引用信息,提取对应的符号的定义

使用关系,包括:根据用户输入的引用信息,在ReferenceTable中查找到对应信息,获得该引用对应符号的sid;根据sid在SymbolTable中查找到该符号的全限本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种C语言项目依赖信息管理和可视化的方法,其特征在于,包括:提取项目中单个C语言文件的信息;将每个文件提取到的信息合并保存到关系型数据库中;基于关系型数据库,根据用户的查询提供多种依赖关系结果;获取依赖图信息并保存至图数据库;基于图数据库,根据用户的查询提供多种可视化的依赖关系图。2.根据权利要求1所述的一种C语言项目依赖信息管理和可视化的方法,其特征在于,所述提取项目中单个C语言文件的符号信息,包括:提取单个C语言文件中的符号信息,对C语言文件中出现的每个符号,提取该符号的全限定名、符号类型,所述符号类型包括函数符号、变量符号、宏符号、类型符号和文件符号;提取单个C语言文件中的引用信息,对C语言文件中出现的符号引用,提取该引用的对应符号的全限定名、所在文件、所在位置和引用类型,所述所在位置包括行号和列号,所述引用类型包括声明、定义、使用和宏,所述宏包含定义、取消定义、宏展开和条件分支。3.根据权利要求2所述的一种C语言项目依赖信息管理和可视化的方法,其特征在于:所述符号的全限定名包括文件名、符号名、偏移量、限定符和分割符,所述文件名指该符号的定义所在的文件路径,所述偏移量为该符号的定义位置相对于文件开头的偏移字符数,所述限定符为标识该局部符号所在的局部命名空间的其他符号的符号名,所述分隔符包括正斜杠分隔符、双冒号分隔符、#分隔符和@分隔符,其中:文件名与限定符、文件名与符号名、偏移量与限定符、偏移量与符号名之间用正斜杠分隔符隔开,限定符与限定符、限定符与符号名之间用双冒号分隔符隔开,文件名与偏移量之间用@分隔符隔开,#分隔符、@分隔符还出现在符号名之前,用于标识符号的类型;所述提取该符号的全限定名,包括:提取函数符号的全限定名,格式为“文件名/函数名”,文件名是指函数定义所在的文件名,如果未找到函数定义,那么没有文件名和正斜杠分隔符;提取变量符号的全限定名,所述变量包括全局变量和局部变量,全局变量的全限定名格式为“文件名/变量名”,局部变量的全限定名格式为“文件名@偏移量/限定符::变量名”,其中,如果该局部变量定义在一个嵌套的命名空间中,“限定符::”可重复多次,文件名和偏移量是指变量定义所在的文件名和位置,如果未找到变量定义,那么没有文件名、偏移量、@分隔符和正斜杠分隔符,函数的参数视为定义在该函数命名空间中的局部变量,结构体、联合体和枚举型中的成员视为定义在该类型命名空间中的局部变量;提取宏符号的全限定名,宏符号的全限定名格式为“#宏符号名”;提取类型符号的全限定名,全局类型的全限定名格式为“文件名/限定符::类型名”,对于结构体、联合体和枚举型,类型名前固定有一组限定符和双冒号分隔符,分别是“struct::”、“union::”、“enum::”,全局类型符号的全限定名没有其他的限定符,局部类型符号的全限定名存在其他的限定符,局部类型的全限定名格式为“文件名@偏移量/限定符::类型名”,其中,如果该局部类型定义在一个嵌套的命名空间中,“限定符::”可重复多次,文件名和偏移量是指该类型的定义所在的文件名和位置,如果未找到类型的定义,那么没有文件名、偏移量、@分隔符和正斜杠分隔符;提取文件类型符号的全限定名,文件符号的全限定名格式为“@文件路径”。
4.根据权利要求1所述的一种C语言项目依赖信息管理和可视化的方法,其特征在于,所述将每个文件提取到的信息合并保存到关系型数据库中,包括:新建关系型数据库和表,初始化关系型数据库,创建SymbolTable,ReferenceTable、FileTable三张空表,分别存储符号信息、引用信息和文件的路径,三张表均使用自增的主键,分别称为sid,refid,fid;合并文件信息,将项目中分析过的C语言文件的信息添加到FileTable,对出现在引用信息中的每个文件,如果该文件的完整路径不在FileTable中,将该文件的路径存入FileTable;合并符号信息,对于每个文件中的每个符号信息,如果SymbolTable中不存在全限定名与该符号的全限定名相同的数据,那么将该符号信息存入SymbolTable;合并引用信息,对于每个文件中的每个引用信息,如果ReferenceTable中不存在所在文件、所在位置、引用符号的全限定名与该引用的对应信息完全相同的数据,那么在SymbolTable中通过对应符号的全限定名获得sid,将该引用信息中引用符号的全限定名替换为sid;在FileTable中通过文件路径获得fid,将该引用信息中引用符号的所在文件替换为fid,将修改过的引用信息存入RefTable;修正符号信息,对于SymbolTable中的符号信息,如果存在一个符号A的全限定名不含文件名,另一个符号B的全限定名去除文件名后与A符号的全限定名完全相同,将ReferenceTable中sid对应为符号A的数据全部改为与B符号对应,并删除SymbolTable中A符号的记录。5.根据权利要求4所述的一种C语言项目依赖信息管理和可视化的方法,其特征在于,所述基于关系型数据库,根据用户的查询提供多种依赖关系结果,包括:根据用户输入的引用信息,提取对应的符号的定义

使用关系;根据用户输入的符号信息,提取对应符号与其他符号依赖关系;根据用户输入的文件信息,提取对应文件的文件包含关系;根据用户输入的文件信息,提取对应文件与其他文件之间的依赖关系。6.根据权利要求5所述的一种C语言项目依赖信息管理和可视化的方法,其特征在于:所述根据用户输入的引用信息,提取对应的符号的定义

使用关系,包括:根据用户输入的引用信息,在ReferenceTable中查找到对应信息,获得该引用对应符号的sid;根据sid在SymbolTable中查找到该符号的全限定名、符号类型信息;根据sid在ReferenceTable中查找到所有该符号的引用记录,其中包括定义、声明和使用多种类型的引用,在使用类型的引用与声明、定义类型的引用建立定义

使用关系;输出该符号的信息以及对应的定义

使用依赖关系;所述根据用户输入的符号信息,提取对应符号与其他符号依赖关系,包括:根据用户输入的符号信息,在SymbolTable中获得该符号的sid;在ReferenceTable中使用sid查找到该符号对应的定义类型引用和声明类型引用;对每个该符号的定义引用和声明引用,在ReferenceTable中查找到使用位置位于定义...

【专利技术属性】
技术研发人员:潘敏学张天彭彦鑫
申请(专利权)人:南京大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1