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

一种将源代码存入图数据库的方法技术

技术编号:11103702 阅读:164 留言:0更新日期:2015-03-04 15:55
本发明专利技术公开了一种将源代码存入图数据库的方法。该方法将源代码中的声明、语句和表达式根据语法树上的节点生成相应的节点,并根据语法树上的节点关系生成节点之间的关系,然后将节点和节点之间的关系存入图数据库中。相比于传统文本格式存储的方法,本发明专利技术的方法提取了丰富的代码结构信息存入了数据库,利于后续使用。相比于利用关系数据库存储代码,本发明专利技术的方法省去了表与表之间复杂的依赖关系,因此更加直观易懂,便于需求者的理解和操作。

【技术实现步骤摘要】

本专利技术涉及软件工程领域中的程序分析以及数据库的操作。
技术介绍
近年来,随着互联网的普及,网络中的各种数据呈现出爆炸性的增长,这其中也包 括了在互联网中共享的开源代码。Sourceforge,Google code等开源代码库给了人们大量 可供参考的源代码。如何从海量的代码中找到自己需要的内容,对代码库中的代码进行分 析,越来越成为一种重要的需求。然而,目前大部分开源代码库只支持关键字检索,而检索 的结果常常需要进一步进行筛选以确认是否是自己想要的的代码,这样的代码查询显然是 低效而繁琐的。 代码并不仅仅是简单的文本,代码是有结构的,每种代码语言都有各自的语法规 贝U,而这些规则正体现了代码中各个元素之间的关系。如果能够充分利用这些结构信息,将 大大提高代码查询的效率,而最直接的想法就是构造一个新型的代码库来存放这些信息。 所有这些结构信息都能够使用实体以及实体之间的关系来表示,目前描述关系的 数据库主要是关系型数据库。然而,代码中元素种类众多,元素之间关系复杂,这意味着想 要完整记录代码结构信息需要数十个表,加上表与表之间的依赖关系(外键等),加大了对 信息进行理解和操作的难度。此外,关系型数据库使用的二维表结构在处理高并发、海量的 数据读写方面效率低下,扩展性差。因此,关系型数据库不能很好地满足用户的需求。 NOSQL数据库,也即非关系数据库,是近年来飞速发展的一类数据库。图数据是非 关系数据库的一种,擅于处理高度关联的数据,Ne〇4j是目前最流行的图数据库。Ne〇4j使 用的基本数据结构是图,主要涉及两类对象:节点和关系。其中,节点表示实体,每个节点可 以拥有若干个属性来刻画实体信息,例如:(姓名:张三)表示节点有一个属性叫姓名,而 属性的值为张三;关系对应于图中的边,可使用三元组〈起始节点,关系类型,终止节点〉 来表征关系。每个关系都必须有唯一的类型,起始、终止节点表明关系的方向,同时关系也 可以有自己的属性。Ne〇4j还支持给节点添加标签来将节点划分为不同的类别。Ne〇4j通 过遍历来访问图中的节点和关系,图遍历执行的速度是常数(每秒遍历百万个关系),跟图 的规模大小无关,极大地提高了性能。Neo4j拥有自己的查询语言Cypher,它是一种声明式 语言,易于理解和学习。 JDT实际上就是Eclipse中提供的用于支持Java开发的一个插件,它提供了用户 在Eclipse平台下进行Java语言开发的IDE。利用JDT,软件开发人员就可以在Eclipse 工具中自由的编辑,编译,执行和调试Java程序。此外,JDT还提供了访问源代码编译过程 中的中间结构的相关API,这个中间结构就是软件开发人员所熟悉的抽象语法树(AST)。对 AST的利用可以使得对Java语言的源代码分析变得更加方便。软件开发人员在进行代码分 析工作时就不再需要从Java源代码开始,先要通过词法分析、语法分析等获取代码结构信 息,而是可以直接利用JDT的相关API获取相应代码的AST,并对AST中的信息进行分析工 作。JDT所提供的AST除了具有数据结构严整,访问便捷,内容详细这些传统的抽象语法树 的特性之外,还提供了对绑定等语义信息的支持,为面向Java语言的源代码的分析研究 工作提供了很大的便利。
技术实现思路
本专利技术所要解决的问题是将源代码存入图数据库。 为解决上述问题,本专利技术采用的方案如下: -种将源代码存入图数据库的方法,包括如下步骤: Sl :通过对源代码的静态语义分析,将源代码中的声明、语句和表达式生成节点, 根据声明、语句和表达式之间的包含关系构建节点之间的关系; S2 :将生成的节点和节点之间的关系存入图数据库。 如权利要求1所述的将源代码存入图数据库的方法,其特征在于,所述将源代码 中的声明、语句和表达式生成的节点根据源代码语法树上的节点定义。 进一步,所述步骤Sl还包括将源代码文件生成节点,并根据源代码文件和源代码 之间的关系构建节点之间的关系。 进一步,所述步骤Sl还包括将多个源代码文件所组成的包生成节点,并根据包与 源代码文件之间的关系构建节点之间的关系。 进一步,所述源代码为java代码。 进一步,所述的图数据库为Ne〇4j数据库。 本专利技术的技术效果如下: 1、相比于传统文本格式存储的方法,本专利技术的方法提取了丰富的代码结构信息存 入了数据库,利于后续使用。 2、相比于利用关系数据库存储代码,本专利技术的方法省去了表与表之间复杂的依赖 关系,因此更加直观易懂,便于需求者的理解和操作。 【具体实施方式】 下面对本专利技术做进一步详细说明。 本专利技术的将源代码存入图数据库的方法是主要通过源代码转化成图结构实现,即 步骤Sl :通过对源代码的静态语义分析,将源代码中的声明、语句和表达式生成节点,根据 声明、语句和表达式之间的包含关系构建节点之间的关系。也就是将源代码中的声明、语句 和表达式作为图结构上的节点,并将声明、语句和表达式之间的包含关系构建节点之间的 关系作为节点之间的关系作为图结构上的节点之间的边。 将源代码中的声明、语句和表达式生成节点的方法有很多。其中,最为经典和 成熟的是利用抽象语法树。下述实施方式中,源代码以java源代码为示例,图数据库 以Ne〇4j数据库为示例。下述表1是以java语法树为蓝本,针对java代码建立的各 种类型的节点。下述表2是表1中各类型节点之间的关系定义。表1中列出了 80种 节点类型,其中76种类型的节点都能够在java语法树上找到对应(括号中)。例如: AQ) (AnonymousClassDeclaration))表不节点类型为AQ),其对应于java语法树中的 AnonymousClassDeclaration。NT表示非终结,即可以有以该类节点为起始节点的关系;T 表示终结,即没有以该类节点为起始节点的关系。属性栏列出了每类节点拥有的属性,例 如:T_KEY: String表示该类节点拥有属性T_KEY且属性值的类型是String。有的属性的类 型为DBR,这表示该属性的类型是在运行时决定的。对于像A(Annotation)这种类型的节 点事实上是抽象节点,即它不会出现在图中,它有多个子节点MA,NA, SMA,子节点除了拥有 自己特有的属性外还继承了父节点所有属性。 \ 表示当前类型节点没有任何属性。由于 java文件是语法树解析的单位,因此添加了 P (Project)类型节点来组织同一项目下的所 有java文件。表2中每一个表项〈起始节点,类型,终止节点〉对应于一个关系定义。 I 表示或,例如:〈C,TYPES,ATD |ED| TD>表示这个关系的终止节点可以有3种,ATD、ED或 TD。对于关系〈起始节点,类型,终止节点〉,数目表示从起始节点出发,该类型的关系可能 的数目。〇|1、1,*,1+,2+分别表示0个或1个、1个、0个或多个、1个或1个以上、2个或2 个以上。 本文档来自技高网
...

【技术保护点】
一种将源代码存入图数据库的方法,其特征在于,包括如下步骤:S1:通过对源代码的静态语义分析,将源代码中的声明、语句和表达式生成节点,根据声明、语句和表达式之间的包含关系构建节点之间的关系;S2:将生成的节点和节点之间的关系存入图数据库。

【技术特征摘要】
1. 一种将源代码存入图数据库的方法,其特征在于,包括如下步骤: 51 :通过对源代码的静态语义分析,将源代码中的声明、语句和表达式生成节点,根据 声明、语句和表达式之间的包含关系构建节点之间的关系; 52 :将生成的节点和节点之间的关系存入图数据库。2. 如权利要求1所述的将源代码存入图数据库的方法,其特征在于,所述将源代码中 的声明、语句和表达式生成的节点根据源代码语法树上的节点定义。3. 如权利要求1或2所述的将源代码存入图数据库的方法,其特征在...

【专利技术属性】
技术研发人员:张天朱晓倩李宣东
申请(专利权)人:南京大学
类型:发明
国别省市:江苏;32

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

1