当前位置: 首页 > 专利查询>谷歌公司专利>正文

用于对具有缺少源位置的代码段的源代码建模的方法技术

技术编号:12179716 阅读:67 留言:0更新日期:2015-10-08 18:03
本发明专利技术公开了一种用于对不具有位置的代码段建模的系统和方法。可以将源代码编索引,以及在数据图中使用表示代码段的节点和表示节点之间的关系的边来建模。然而,一些代码元素可能是隐藏的或者隐式的,并且因此可能缺少位置信息。在这些情况下,创建代码虚构并且表示为图中的节点。虚构节点可以被特别地指派,使得虚构节点能够很容易地同真实源代码节点区分开来。然后更新图以便包括与隐藏代码或者隐式代码交互的节点中的代码虚构的位置信息。然后可以将数据图提供给用户,或者将数据图提供作为要通过编码工具来使用的服务。

【技术实现步骤摘要】
【国外来华专利技术】用于对具有缺少源位置的代码段的源代码建模的方法
技术介绍
软件开发者使用若干不同的编程语言来编写源代码。每个编程语言具有不同的语法和语义。需要编码工具(该编码工具包括代码浏览器、集成的开发环境(IDE)和历史分析工具)能够理解源代码语言,以便这些工具能够用于软件开发者。多数工具擅长表示一种或多种语言,但是在支持其他语言方面具有困难。为了跨所有编程语言具有适当的工具支持,应当存在能够由所有工具来使用的单个代码模型。针对所有语言来表示源代码的语义和语法需要复杂的数据模型和理解每种语言的细微差别的服务。还需要数据模型和服务能够对元素编索引以及显示来自任何编程语言和跨语言的元素之间的关系。
技术实现思路
本说明书描述了总体上与数据建模相关的技术,以及具体地与用于对缺少源位置的代码段建模的方法和系统相关的技术。一般而言,本说明书中所描述的主题的一方面可以在用于对源代码建模的系统和方法中来实施。示例性系统包括一个或多个处理设备以及存储指令的一个或多个存储设备,该指令在由一个或多个处理设备执行时引起一个或多个处理设备:接收包括不具有源位置的代码段的源代码;对所接收的源代码编索引;根据经编索引的源代码创建数据模型,该数据模型包括表示代码元素的多个节点以及用于元素之间的关系的多个边;确定要与每个节点关联的源位置;响应于将代码段中的一个代码段识别为隐藏代码段或者隐式代码段,创建用于代码段的虚构表示;以及将所创建的代码段指派为与代码段的节点关联的源位置。示例性方法包括:接收包括不具有源位置的代码段的源代码;对所接收的源代码编索引;根据经编索引的源代码创建数据模型,数据模型包括表示代码元素的多个节点以及用于元素之间的关系的多个边;确定要与每个节点关联的源位置;响应于将代码段中的一个代码段识别为隐藏代码段或者隐式代码段,创建用于代码段的虚构表示;以及将所创建的代码段指派为与代码段的节点关联的源位置。用于使用表示不具有源位置的代码段的数据模型的第二示例性方法包括:请求包括不具有源位置的代码段的代码的数据模型;接收包括不具有源位置的代码段的虚构表示的所请求的数据模型;以及可选地向最终用户显示所述代码段的所述虚构表示。这些以及其他实施例可以可选地包括以下特征中的一个或多个特征:可以特别地注释虚构节点以将所述节点同所述数据模型中的其他节点区分开来;可以向用户提供数据模型;可以经由应用编程界面(API)来提供数据模型;可以经由用户界面向用户提供数据模型;可以经由命令行代码来向用户提供数据模型;虚构表示的内容可以是有效的代码语法;虚构表示的内容对代码行为建模,但是不表示有效的代码语法;可以存在有在使用隐藏代码段或者隐式代码段的源代码的节点与表示所创建的虚构的节点之间的边;数据模型可以包含关于虚构表示的元数据;元数据可以用来示出或者隐藏来自最终用户的虚构表示;元数据可以用于显示代码段是虚构这一信息;元数据可以用于显示代码段包含虚构这一信息;以及数据模型可以使用应用编程界面来请求。在仅以说明的方式给出的附图以及下面的说明书中给出本专利技术的一个或多个实施例的细节。本专利技术的其他特征、方面和优点根据说明书、附图和权利要求将变得很清楚。各个附图中相似的附图标记指示相似的元素。附图说明图1a是图示示例性代码段的框图。图1b是图示示例性代码段的框图。图2是图示用于图1a和图1b中定义的代码段的数据模型的框图。图3是图示对两个代码段编索引并且绘制两个代码段的示例性过程的框图。图4是图示用于图3中定义的代码段的数据模型的框图。图5是图示包括用于隐藏代码和/或隐式代码的代码虚构的、用于图3中所定义的代码段的示例性模型的框图。图6是图示对宏编索引并且绘制宏的示例性过程的框图。图7是图示用于图6中定义的宏的数据模型的框图。图8是图示包括用于隐藏代码和/或隐式代码的代码虚构的、用于图6中定义的宏的示例性模型的框图。图9是用于创建表示隐藏代码和/或隐式代码的代码虚构的示例性方法的流程图。图10是图示示例性计算设备的框图。图11是用于使用表示不具有源位置的代码段的数据模型的示例性方法的流程图。具体实施方式示例性数据模型和服务提供源代码和编译器元数据的语言中性规范化表示。该模型将源代码表示为数据图。数据图是存储数据并且使用有限点集、调用节点、线、调用边来示出数据之间的关系的数据结构。如图2所描绘的,通过使用边彼此连接节点来表示图内的关系。为了根据源代码来创建数据图模型,必须将源代码翻译成形成图的节点和边的集合。一种产生高的精度水平的便利方法是针对源代码重用现有的编译器。编译器可以设置有编索引器,该编索引器从编译器提取数据以构造用于数据图模型的节点和边。图1a和1b示出可以一起用于指出词语“helloworld”的源代码文件的两个示例片段。图1a中的文件“stdio.h”(105)包含行2上的函数“printf”的定义,其将串“format”的指针作为参数并且向标准输出写入由“format”指出的串。在图1b中,文件“hello.c”(11)包括行2上的“stdio.h”文件并且在称为“main”(行3)的函数中使用来自行4上的“stdio.h”的“printf”的定义以向标准输出写入串“helloworld”。数据模型可以将源代码片段表示为如下,该图类似于图2中所描绘的图。图2示出两个文件“hello.c”(232)和“stdio.h”(234)作为图中的节点,其具有用两个节点之间的双向边表示的“包括/被包括”关系。表示文件“hello.c”(232)的节点通过描绘两个节点之间的“声明/被声明”关系的双向边连接到表示函数“main”(224)的节点。表示文件“stdio.h”(234)的节点通过“声明/被声明”关系边连接到用于“printf”(222)的节点。由于“printf”由“main”在源代码中调用,因此表示“main”(224)的节点通过“调用/被调用”关系镜像边连接到表示“printf”(222)的节点。在图中,用于“main”(224)的节点和用于“printf”(222)的节点二者与它们所返回的内置类型具有关系。“main”(224)具有空的返回,并且“printf”返回“int”(206)。如以上所讨论的,创建节点以表示源代码的分段。节点可以表示若干不同类型的元素,诸如:内置类型;参数化的类型;复合类型;指针类型;符号声明;用户定义的类型;引用;方法,方法调用,字段,指派,评论,内联文档和文件。每个节点可以包含某些信息,这些信息包括:用于节点的全局唯一标识符;元素的种类;显示名称;元素在源代码中的位置;元素的修饰符;维数;以及源代码中元素周围存在的代码片段。节点可以是但不限于若干种类中的一种,诸如:未决,评论,丢失,名称空间,分组,模块,类,结构,接口,枚举,枚举常量,函数,方法,构造函数,域,局域,参数,变量,属性,布尔,字符,字符串,正则表达式,整数,浮点数,固定数目,有理数,复数,大数,对象,实例,文件,目录,符号链接,诊断,指针,引用,别名,空,空的,单元,变化类型,参数类型,变量类型,专门化类型,符号,名称,值,使用,数组,设置,映射,列表,元组,联盟。边可以表示数据模型中的元素之间的关系。这些边可以是双向的,这表示从第一节点到第二节点的每个本文档来自技高网...
用于对具有缺少源位置的代码段的源代码建模的方法

【技术保护点】
一种用于对源代码建模的方法,包括:接收包括不具有源位置的代码段的源代码(901);对所接收的源代码编索引(903);根据经编索引的源代码创建数据模型(905),所述数据模型包括表示代码元素的多个节点以及用于元素之间的关系的多个边;确定要与每个节点关联的所述源位置(907);响应于将所述代码段中的一个代码段识别为隐藏代码段或者隐式代码段,创建用于所述代码段的虚构表示(909);以及将所创建的虚构指派为与所述代码段的节点关联的所述源位置(909)。

【技术特征摘要】
【国外来华专利技术】2013.02.06 US 13/760,6411.一种用于对源代码建模的方法,包括:接收包括不具有源位置的代码段的源代码;对所接收的源代码编索引;根据经编索引的源代码创建数据模型,所述数据模型包括表示代码元素的多个节点以及用于元素之间的关系的多个边;确定要与每个节点关联的所述源位置;响应于将所述代码段中的一个代码段识别为隐藏代码段或者隐式代码段,创建用于所述代码段的虚构节点,其中所述数据模型使用所述虚构节点与表示包含对所述虚构的引用的代码元素的节点之间的边来表示所述虚构的行为,并且其中所述虚构节点的内容不表示有效的代码语法;以及将所创建的虚构指派为与所述代码段的节点关联的所述源位置。2.根据权利要求1所述的方法,其中特别地注释虚构节点以将所述节点同所述数据模型中的其他节点区分开来。3.根据权利要求1所述的方法,还包括向用户提供所述数据模型。4.根据权利要求3所述的方法,其中经由API向用户提供所述数据模型。5.根据权利要求3所述的方法,其中经由用户界面向用户提供所述数据模型。6.根据权利要求3所述的方法,其中经由命令行代码向用户提供所述数据模型。7.根据权利要求1所述的方法,其中所述数据模型包括多个虚构节点并且至少一个虚构节点的内容是有效的代码语法。8.一种用于向表示不具有源位置的代码段的数据模型中的节点提供源位置的方法,包括:响应于将所述代码段识别为缺少源位置,创建用于所述代码段的虚构节点,其中所述数据模型使用所述虚构节点与表示包含对所述虚构的引用的代码元素的节点之间的边来表示所述虚构的行为,并且其中所述虚构节点的内容不表示有效的代码语法;以及将所创建的虚构指派为与所述代码段的节点关联的所述源位置。9.一种用于使用表示不具有源位置的代码段的数据模型的方法,包括:请求用于包括不具有源位置的代码段的代码的数据模型;接收所请求的、包括不具有源位置的所述代码段的虚构节点的数据模型,其中所述数据模型使用所述虚构节点与表示包含对所述虚构的引用...

【专利技术属性】
技术研发人员:J·V·戈格S·F·耶奇M·J·弗洛姆贝格A·沙利G·S·韦斯特J·A·丹尼特L·埃斯佩霍尔特R·A·布朗斯坦
申请(专利权)人:谷歌公司
类型:发明
国别省市:美国;US

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

1