用于声明性编程语言的基于树的有向图编程结构的制作方法

xiaoxiao2020-7-22  4

专利名称:用于声明性编程语言的基于树的有向图编程结构的制作方法
技术领域
本发明一般涉及用于声明性编程语言的基于树的有向图编程结构。背景作为一般背景,在计算机科学中,抽象句法树(AST)是用编程语言编写的一些源代码的句法的树表示或源代码的某一其他功能等效表示。树的每一节点表示出现在源代码中的构造。该树因不表示出现在原始源中的一些构造而是抽象的。这种省略的示例是对圆括号进行编组,因为在AST中,操作数的编组隐含在树结构中。解析器通常将AST作为编译源代码的过程的一部分来构建。一旦构建了 AST,例如语义分析等后续处理就可以向该AST添加附加信息,这可造成基于AST来产生抽象语义图 (ASG)。ASG是比AST更高级的抽象,它可被用来表达表达式或程序的句法结构。在计算机科学中,ASG是被用来表示或导出用例如编程语言等形式语言编写的表达式的语义的数据结构。ASG通常是由浓缩和抽象过程从抽象句法树构造的。例如,浓缩可以是将从其中使用变量的标识符节点起的向后指针(back-pointer)或边添加到表示该变量的声明的节点。抽象,例如,可能需要移除细节,这些细节只在解析时相关而非对语义相关。就此,诸如XML等半结构化数据的当前表示被限于表示树结构。对于XML,表示图结构需要使用诸如XML_ID等显式引用,相对于底层图结构的表示和存储而言,这引入了复杂性并且缺乏灵活性。例如,使用XML ID需要类型系统定义标识符是什么以及引用是什么, 这意味着这样的定义是在底层图结构的外部,从而引入了使用复杂性。因此,特别需要使用紧凑的人类友好的句法而不使用显式标识符来创作复杂图结构化数据的能力。当今将半结构化程序数据表示成图的上述缺点仅旨在提供常规系统的一些问题的概览,并且不旨在是穷尽性的。常规系统的其他问题以及此处所描述的各非限制性实施例的对应的益处可以在审阅以下描述后变得更显而易见。概述此处提供了简化概述以帮助能够对以下更详细的描述和附图中的示例性、非限制性实施例的各方面有基本或大体的理解。然而,本概述并不旨在作为详尽的或穷尽的概观。 相反,本概述的唯一目的是以简化的形式来提出与一些示例性非限制性实施例相关的一些概念,作为以下各实施例的更为详细的描述的序言。提供了用于声明性编程语言的基于树的有向图编程结构的各实施例。在各实施例中,复杂图结构化数据(在此在一个非限制性实现中被称为“DGraph(D图)”)是使用紧凑的人类友好的句法而不使用显式标识符来创作的。在一个非限制性方面,句法包括对遵从 (conformance)关系(也被称为因子分解(factored)关系)的支持。在另一非限制性方面,半结构化图数据是基于树的表示,并且句法包括引用的词法解析或词法作用域确定和/ 或非局部初始化。这些和其他实施例在下面将更详细地描述。附图简述
各非限制性实施例参考附图来进一步描述,附图中附

图1是声明性编程语言和相关结构的编译过程链的框图;附图2是遵从关系的一般图示;附图3是示出有向图结构的第一非限制性方面的流程图;附图4是示出有向图结构的第二非限制性方面的流程图;附图5是示出根据本文描述的一个或多个方面的作为具有计算机可执行模块的计算机可读介质的示例性实施例的框图;附图6是出于说明性目的的半结构化图数据的示例图表表示;附图7是出于说明性目的的半结构化图数据的示例图表表示;附图8是出于说明性目的的半结构化图数据的示例图表表示;附图9示出结合一个或多个实施例中描述的基于树的结构的词法作用域确定的示例性方面;附图10、11、12及13示出有向图结构的不同的词法作用域确定选择的到文本表示的图表映射,从而能对各选择进行比较;附图14、15、16、17和18类似地示出一系列类似的或相关的有向图结构示图,用于示出用于描述图结构的紧凑且灵活的句法的附加方面;附图19是用于声明性编程模型和相关表示的示例性过程链;附图20是与面向记录的执行模型相关联的类型系统的图示;附图21是根据本发明的一实施例的与基于约束的执行模型相关联的类型系统的非限制性图示;附图22是根据有序的执行模型的数据存储的图示;附图23是根据次序无关的执行模型的数据存储的非限制性图示;附图24是表示其中可实现此处所描述的各实施例的示例性、非限制性联网环境的框图;以及附图25是表示其中可实现此处所描述的各实施例的一个或多个方面的示例性、 非限制性计算系统或操作环境的框图。详细描述概览如以上在背景中讨论的,常规系统尤其不能允许使用紧凑的人类友好的句法来创作复杂图结构化数据。在用XML来表示复杂图结构化数据的情况下,该表示必须使用诸如 XML_ID等显式标识符或引用来形成该结构化图数据。因此,在各非限制性实施例中,提供了用于声明性编程语言的基于树的有向图编程结构的各实施例。复杂图结构化数据(在此在一些实施例中被称为“DGraph”)可以使用紧凑的人类友好的句法而不使用显式标识符来创作。在各非限制性方面,句法包括对遵从关系的支持,启用引用的词法解析(也称为词法作用域确定)和/或非局部初始化。作为以下内容的路标,首先提供各实施例的概览,然后更详细地讨论示例性的、非限制行的任选实现及示例图和图表示来提供另外的理解。接着,结合诸如D编程语言等声明性编程语言来提供一些补充上下文。最后,阐述了其中可以部署本文描述的技术的一些示例性非限制性网络和计算环境。
—般而言,用声明性编程语言来创作源代码通常是合乎需要的,声明性编程语言通常被认为是命令性编程语言的对应物。与命令性编程语言不同,声明性编程语言允许用户写下他们想要从他们的数据得到什么,而不必指定如何针对给定的技术或平台来满足这些希望。就此,D编程语言(或简写为“D”)(可在下文中找到关于它的更多细节)是很适于紧凑且人类可理解的表示的声明性编程语言,并且有利地包括用于独立于诸如闪存、关系数据库、RAM、外部驱动器、网络驱动器等底层存储机制来创建并修改数据密集应用程序的高效构造。“D”有时也被称为“M”编程语言,但为了一致起见,在本文中不使用对M的引用。D包括用于编写声明性源代码的高效且紧凑的句法。就此,D的编程构造还可基于为编译器所接收到的给定源代码而生成的一个或多个抽象句法树来高效地表示成半结构化图数据。另外,由于该半结构化图数据的句法的人类友好性质,在可直接指定该半结构化图数据的情况下,应用程序和开发人员不需要形成实际源代码。就此,基于一组树,或D程序的另一规范,可以形成由于句法中支持的各新颖属性而高效地表示D程序的编程构造的 DGraph,这些新颖属性有助于形成对于机器以及人类可理解的较简单DGraph结构,人类基于对并不深奥的DGraph结构的文本表示(像语义图的常规文本表示一样)的视觉调查就可以理解该DGraph结构。示出了可以表示并使用D程序的不同方式的一般框图系统在附图1的编译链中示出。例如,源代码100可由开发人员或机器直接创作。源代码100可由D编译器110来编译,所述D编译器110包括例如用于解析源代码100的D解析器120和用于形成D句法树的D句法树组件130,D句法树随后可被分析并转换成D图(DGraph)结构140。D图结构 140可由开发人员直接生成,并且也可由应用程序直接生成,并且基于D图结构所支持的某些特征来以紧凑的方式表示。D图结构140可被展开到树130上并展开回源代码100,D图结构140可结合数据密集应用程序根据诸如SQL数据库查询、企业数据管理(EDM)、电子表格应用程序、图形应用程序等各领域专用用途150(即,可存储并分析数据的任何地方)被编译或半编译成对象代码。就此,D图结构140的先前未实现的两个特征包括对遵从关系的支持和对标识符或引用的词法解析。一般而言,如附图2所示,遵从关系220将一个模型210链接到被称作它的引用模型200的另一模型。更具体而言,本文描述的声明性编程模型的上下文中的遵从关系220 指的是标识共同标记的因子分解的定义的可能性,以及加入它们以用于有向图结构的高效表不。例如,附图3概括性地示出一个实施例中的用于将声明性编程模型的编程构造表示成有向图的方法。在300,接收包括声明性编程模型的编程构造的一组定义的有向图数据结构。在310,作出因子分解是否适用于该组定义中的某一个的判定。如果是,则在320,为便于存储或其他原因,可基于因子分解原理来组合各定义以形成一共同的等效定义,或可以将各定义拆分开(因子分解)。因子分解可适用于从存储中接收到或检索到的有向图结构,或在生成有向图结构时适用于有向图结构。为了构建灵活且任意的有向图,将词法解析或词法作用域确定(与动态作用域确定相对)与D编程语言相结合是有利的。例如,附图4概括性地示出用于基于树表示来将
6声明性编程模型的编程构造表示成有向图的方法。在400,接收声明性编程语言的句法树。 在410,标识了定义对一个句法树进行交叉引用的不同方式的词法作用域的指示,并随后在 420,生成有向图数据结构,有向图数据结构包括基于词法作用域的至少一个指示来确定的来自两个句法树的至少一个交叉引用。词法作用域确定包括定义自顶层向底层的作用域确定是否适用或自内向外的作用域确定是否适用,并且还包括指示是当前节点还是后继节点适用于图的给定边。在一个实施例中,如附图5概括地示出的,诸如计算机可读介质等计算机程序产品500可包括用于生成或接收表示声明性编程模型的有向图数据结构的DGraph模块510。 在一个实施例中,声明性编程模型支持基于约束的类型定义并遵循次序无关的执行模型。 如在第一非限制性方面中描述的,可包括因子分解模块520,以用于标识可向其应用因子分解的有向图数据结构的定义。在第二非限制性方面,在生成有向图数据结构时,DGraph模块确定适用于形成有向图数据结构的词法作用域。基于树的有向图编程结构如上所述,在各非限制性实施例中,提供了用于声明性编程语言的基于树的有向图编程结构。基本上,对于一些附加背景,DGraph是具有以下各项的加标记的有向图1.节点集合N ;2.关于N的二元关系A。A被称为有向图的弧的集合。弧是节点对。3.标记集合1 ;以及4.关于Nxl的二元关系L。L被称为有向图的标记。附图6示出被表示为图表600 的示例图。使用以上形式,图的图表600可用文本表示成N= {1,2,3,4,5,6,7,8,9,10,11,12,13}A= {(1,2), (1,3), (2,4), (2,5), (2,6), (3,7), (3,8), (3,9), (4,10), (5,11), (6,2), (7,1), (8,12),(9,13)}1 = {People, Jack, Jill, Name, Age, Spouse, “ Jack" ,23, “ Jill" ,25}L = {(People, 1),(Jack, 2) , (Jill,3),(Name, 4) , (Age,5),(Spouse, 6), (Spouse,7),(Name,8),(Age,9), (" Jack" , 10), (23,11),(" Jill" ,12), (25,13)}尽管这一文本形式很精确并且足以表示所有图,但它留下了许多将要需要的事物1.图的结构不像在图表中那样清楚。2.因为14不是节点,因此句法不保证例如(1,14)这样的很好地形成的图是有效句法,但不是有效边。3.文本具有作者必须补足的对图无关紧要的信息,尤其是节点和标记id。此外,4.通过将描述因子分解成可被合成的分开组件来便于创作大型的图。考虑同一图的以下文本表示
权利要求
1.一种用于基于树表示来将声明性编程模型的编程构造表示成有向图的方法,包括接收400声明性编程语言的至少一个句法树数据结构的表示;接收410定义交叉引用所述至少一个句法树数据结构的不同方式的词法作用域的至少一个指示;以及生成420包括始发自来自第一句法树数据结构的节点和来自第二句法树数据结构的节点的至少一个交叉引用的有向图数据结构,所述至少一个交叉引用是基于词法作用域的所述至少一个指示来确定的。
2.如权利要求1所述的方法,其特征在于,接收410词法作用域的至少一个指示包括接收所述生成是否包括从顶层作用域到底层作用域进行来生成所述有向图数据结构的指示。
3.如权利要求1所述的方法,其特征在于,接收410词法作用域的至少一个指示包括接收所述生成是否包括从最内部作用域到最外部作用域进行来生成所述有向图数据结构的指示。
4.如权利要求1所述的方法,其特征在于,接收410词法作用域的至少一个指示包括接收所述生成是否包括相对于当前节点进行来生成所述有向图数据结构的指示。
5.如权利要求1所述的方法,其特征在于,接收410词法作用域的至少一个指示包括接收所述生成是否包括相对于当前节点的后继节点进行来生成所述有向图数据结构的指示。
6.如权利要求1所述的方法,其特征在于,还包括将所述有向图数据结构的至少一个定义因子分解310成等效于该至少一个定义的至少两个子定义。
7.如权利要求6所述的方法,其特征在于,还包括将所述至少两个子定义的值存储在至少两个不同的存储位置。
8.如权利要求1所述的方法,其特征在于,还包括标识所述有向图数据结构的至少两个因子分解的定义;以及将所述至少两个因子分解的定义自动地组合成所述有向图数据结构的等效于所述至少两个因子分解的定义的定义。
9.如权利要求1所述的方法,其特征在于,接收410词法作用域的至少一个指示包括接收作为节点标记前导的‘.’,它指示从顶层作用域进行来生成所述有向图数据结构。
10.如权利要求1所述的方法,其特征在于,接收410词法作用域的至少一个指示包括接收作为节点标记前导的‘&’,它指示是从当前节点还是后继节点进行来生成所述有向图数据结构。
11.一种用于将声明性编程模型的编程构造表示成有向图的方法,包括接收300有向图数据结构,所述有向图数据结构包括描述所述声明性编程模型的编程构造的一组定义的一组节点、一组边以及一组标记;以及标识310所述一组定义中的至少一个定义,因子分解操作可应用于该至少一个定义以形成至少一个等效定义。
12.如权利要求11所述的方法,其特征在于,接收300所述有向图数据结构包括生成所述有向图数据结构。
13.如权利要求11所述的方法,其特征在于,还包括自动地组合320所述一组定义中的至少两个定义以基于所述因子分解操作来形成共同的等效定义。
14.如权利要求11所述的方法,其特征在于,还包括将所述一组定义中的至少一个定义自动地因子分解320成等效于该至少一个定义的至少两个因子分解的定义。
15.如权利要求14所述的方法,其特征在于,所述因子分解320包括应用执行所述一组标记的共同标记的自顶向下加入的规则。
16.如权利要求14所述的方法,其特征在于,所述因子分解320包括应用执行所述一组标记的共同标记的后继节点的自顶向下联合的规则。
17.如权利要求14所述的方法,其特征在于,还包括将所述至少两个因子分解的定义存储在至少两个不同的存储位置。
18.—种包括用于分析表示声明性编程模型的有向图数据结构的计算机可执行指令的有形计算机可读介质,包括用于生成或接收表示声明性编程模型的有向图数据结构的DGraph模块520,所述声明性编程模型支持基于约束的类型定义并遵循次序无关的执行模型,其中在生成所述有向图数据结构时,所述DGraph模块确定适用于形成所述有向图数据结构的词法作用域;以及用于标识所述有向图数据结构的至少一个定义的因子分解模块530,其中可对该至少一个定义应用因子分解以形成表示该至少一个定义的至少一个等效定义。
19.如权利要求18所述的计算机可读介质,其特征在于,所述因子分解模块530将所述至少一个定义自动地因子分解以形成包括所述至少一个等效定义的等效有向图数据结构。
20.如权利要求19所述的计算机可读介质,其特征在于,还包括用于将所述等效有向图数据结构输出给存储540或第三方应用550中的至少一个以供消费的输出模块510。
全文摘要
提供了用于声明性编程语言的基于树的有向图编程结构的各实施例。在各实施例中,复杂的图结构化数据(在此在一个非限制性实现中被称为“DGraph”)是使用紧凑的人类友好的句法而不使用显式标识符来创作的。在一个非限制性方面,句法包括对遵从关系(也被称为因子分解的关系)的支持。在另一非限制性方面,半结构化图数据是基于树的表示,并且句法包括引用的词法解析或词法作用域确定和/或非局部初始化。
文档编号G06F9/44GK102171679SQ200980139954
公开日2011年8月31日 申请日期2009年9月30日 优先权日2008年10月3日
发明者B·H·洛夫林, D·E·兰沃西, D·F·伯克斯, J·L·昂比 申请人:微软公司

最新回复(0)