论文部分内容阅读
近年来,开源社区的发展蒸蒸日上,SourceForge、Bitbucket、GitHub等开源社区上托管着几百万的开源项目,规模与日俱增。为了利用这些海量的开源代码资源,首先需要对代码进行理解。理解代码的一个必要手段,是对代码进行查询。然而,开源社区所提供的搜索能力往往仅限于关键字匹配,难以满足使用者对关系语义查询的需求。另外,不同的代码版本控制协议也让不同开源社区的开源代码库彼此异构,使得用户很难通过一次查询在不同的异构代码库上获得结果。MongoDB是一种基于文档的NoSQL数据库。它采用了无模式的文档数据模型,能够灵活地存储不同结构的数据,并具有极高的可扩展性。它非常适合用来存储结构复杂、形式多样、大数据量的异构代码。本文在对相关工作进行调研分析的基础上,提出了一个基于MongoDB的开源代码查询平台,以解决代码查询的异构问题,支撑开源代码的理解、复用和分析工作,主要工作包括:1.使用FreeTXL将异构的开源代码转换为通用的中间格式XML,再使用JDOM转换为JSON格式,存入MongoDB中。异构的代码在经过这两步转换后,以统一的格式得到了持久化存储,从而代码异构问题不再是代码查询的阻碍。2.提出了一种针对面向对象代码的查询语言JINS+,其语法简洁、功能丰富,提供五种语义元素的属性和关系查询,并支持逻辑运算符和谓词。3.设计了一个查询引擎,解析并执行输入的JINS+语句。首先从中抽取出查询原语,再将查询原语映射到对应的MongoDB查询命令上,与内嵌文档路径信息重组后进行执行,返回结果。