專利名稱:用于聲明性編程語言的基于樹的有向圖編程結構的制作方法
技術領域:
本發明一般涉及用于聲明性編程語言的基于樹的有向圖編程結構。背景作為一般背景,在計算機科學中,抽象句法樹(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·昂比 申請人:微軟公司