無
背景技術(shù):
域特定語言(domain-specificlanguages,dsl)是特定應用程序域?qū)S玫木幊陶Z言。用于構(gòu)造編譯后dsl的可能框架可包括由作者創(chuàng)建dsl、實施dsl以及由應用程序開發(fā)人員使用dsl以獲得應用程序。這允許dsl的客戶,例如應用程序開發(fā)人員,以極高水平進行編程,同時產(chǎn)生優(yōu)化代碼。
為了產(chǎn)生和優(yōu)化編譯后程序,可使用程序變換,所述程序變換將程序的抽象語法樹(abstractsyntaxtree,ast)用作輸入并產(chǎn)生另一ast。重寫規(guī)則是此類變換的一種特定種類,其描述樹片段的模式并將匹配本模式的每一片斷變換成輸出片斷,同時原地保持其它所有事物。重寫規(guī)則對程序優(yōu)化來說相當重要,并且一些dsl可包含高達數(shù)十或數(shù)百的規(guī)則。
然而,用于描述重寫規(guī)則的已知系統(tǒng)并不支持程序創(chuàng)建新規(guī)則或變換現(xiàn)有規(guī)則。此外,通常,單獨的語言用于描述研發(fā)出的語言和重寫規(guī)則。因此,希望使得dsl或應用程序開發(fā)人員能夠容易地增加或改變重寫規(guī)則。
技術(shù)實現(xiàn)要素:
本發(fā)明的目標是提供有效的編譯概念以獲得程序代碼。
此目標通過獨立權(quán)利要求的特征實現(xiàn)。其它實施形式根據(jù)從屬權(quán)利要求、說明書和附圖中顯而易見。
本發(fā)明是基于此發(fā)現(xiàn):當例如dsl編譯器的編譯器支持例如重寫規(guī)則的優(yōu)化或其它優(yōu)化時,可獲得上述目標。
根據(jù)第一方面,本發(fā)明涉及用于將源代碼編譯成程序代碼的方法,所述方法包括基于源代碼提供模式圖,所述模式圖根據(jù)呈第一編程語言形式的規(guī)則集而對應于源代碼的中間表示,其中所述規(guī)則集包括指示模式圖將被分配給模式圖的對應替換圖替換的特定替換規(guī)則;用分配給模式圖的替換圖替換模式圖;以及基于替換圖產(chǎn)生程序代碼。
在根據(jù)第一方面的方法的第一可能實施形式中,當特定替換規(guī)則在編譯中被設置成激活時,模式圖被替換成對應替換圖。
在根據(jù)先前實施形式中的一個或同樣根據(jù)第一方面的方法的第二可能實施形式中,模式圖的實例與它們的對應替換圖一起寄存在規(guī)則集的規(guī)則組件中。
在根據(jù)第二實施形式的方法的第三可能實施形式中,所述方法包括通過查找規(guī)則集的規(guī)則組件,檢測呈源代碼的中間表示形式的模式圖的實例,并用寄存在規(guī)則組件中的模式圖的實例的對應替換圖替換模式圖的實例。
在根據(jù)先前實施形式中的一個或同樣根據(jù)第一方面的方法的第四可能實施形式中,第一編程語言包括域特定語言。
在根據(jù)先前實施形式中的一個或同樣根據(jù)第一方面的方法的第五可能實施形式中,源代碼的中間表示包括表示源代碼的基于圖的數(shù)據(jù)結(jié)構(gòu)。
在根據(jù)先前實施形式中的一個或同樣根據(jù)第一方面的方法的第六可能實施形式中,源代碼的中間表示包括第一節(jié)點層,所述第一節(jié)點層包括表達。
在根據(jù)先前實施形式中的一個或同樣根據(jù)第一方面的方法的第七可能實施形式中,產(chǎn)生模式圖以使得模式圖匹配源代碼的中間表示。
在根據(jù)第七實施形式的方法的第八可能實施形式中,產(chǎn)生模式圖以使得模式圖的第一節(jié)點層中的數(shù)個節(jié)點匹配源代碼的中間表示的第一節(jié)點層中的數(shù)個節(jié)點;并且使得模式圖的其它節(jié)點層的二元運算匹配源代碼的中間表示的其它節(jié)點層的二元運算。
在根據(jù)第八實施形式的方法的第九可能實施形式中,替換圖包括第一節(jié)點層,所述第一節(jié)點層包括表達,確切地說,包括變量,所述第一節(jié)點層與包括二元運算的其它節(jié)點層級聯(lián),其中替換圖具有與模式圖相同數(shù)目的第一節(jié)點層的節(jié)點和至少一個不同的其它節(jié)點層中的二元運算。
在根據(jù)先前實施形式中的一個或同樣根據(jù)第一方面的方法的第十可能實施形式中,特定替換規(guī)則寄存為規(guī)則組件,所述規(guī)則組件包括第一編程語言的規(guī)則集中的模式圖和替換圖。
根據(jù)第二方面,本發(fā)明涉及可在處理器上運行的編譯器,所述編譯器用于將源代碼編譯成程序代碼,所述編譯器包括模式圖提供器,其用于基于源代碼提供模式圖,所述模式圖根據(jù)呈第一編程語言形式的規(guī)則集而對應于源代碼的中間表示,其中規(guī)則集包括指示模式圖將被分配給模式圖的對應替換圖替換的特定替換規(guī)則;替換單元,其用于用分配給模式圖的替換圖替換模式圖;以及代碼產(chǎn)生器,其用于基于替換圖產(chǎn)生程序代碼。
在根據(jù)第二方面的編譯器的第一可能實施形式中,編譯器用于將呈特定應用程序域?qū)S玫挠蛱囟ㄕZ言形式的源代碼編譯成呈第二編程語言形式的程序代碼,所述第二編程語言可在處理器上執(zhí)行。
在根據(jù)先前實施形式中的一個或同樣根據(jù)第二方面的編譯器的第二可能實施形式中,編譯器包括分級評估器,其用于執(zhí)行規(guī)則集的分級評估,并用于根據(jù)規(guī)則集創(chuàng)建源代碼的中間表示。
在根據(jù)先前實施形式中的一個或同樣根據(jù)第二方面的編譯器的第三可能實施形式中,模式圖提供器形成用于執(zhí)行第一編程語言的分級評估的分級評估器,其中分級評估的結(jié)果是形成源代碼的中間表示的程序圖。由此,程序圖可用于構(gòu)造模式圖和替換圖兩者。
根據(jù)第三方面,本發(fā)明涉及域特定框架系統(tǒng),包括規(guī)則規(guī)范單元,其用于以第一編程語言創(chuàng)建規(guī)則集,其中規(guī)則集包括指示模式圖將被分配給模式圖的對應替換圖替換的特定替換規(guī)則;規(guī)則組件單元,所述規(guī)則組件單元包括多個模式圖和由規(guī)則規(guī)范單元分配給模式圖的每一模式圖的對應替換圖;以及分級評估器,其用于執(zhí)行規(guī)則集的分級評估,并用于根據(jù)規(guī)則集創(chuàng)建源代碼的中間表示。
附圖說明
將參考附圖描述本發(fā)明的其它實施例,其中:
圖1示出了根據(jù)實施形式的用于將源代碼編譯成程序代碼的方法的圖式,
圖2示出了根據(jù)實施形式的圖,
圖3示出了根據(jù)實施形式的模式圖,
圖4示出了產(chǎn)生根據(jù)實施形式的替換圖,以及
圖5示出了根據(jù)實施形式的域特定框架系統(tǒng)。
具體實施方式
圖1示出了用于將源代碼編譯成程序代碼的方法100,所述方法包括基于源代碼提供101模式圖,所述模式圖根據(jù)呈第一編程語言形式的規(guī)則集而對應于源代碼的中間表示,其中所述規(guī)則集包括指示模式圖將被分配給模式圖的對應替換圖替換的特定替換規(guī)則;用分配給模式圖的替換圖替換103模式圖;以及基于替換圖產(chǎn)生105程序代碼。
由此,可執(zhí)行沒有額外代碼的寫入規(guī)則。此外,如果現(xiàn)有dsl具有新規(guī)則,那么可執(zhí)行擴展??梢詃sl框架所支持的任何語言進一步寫入規(guī)則。此外,可支持跨dsl規(guī)則和規(guī)則測試。
根據(jù)一些實施形式,分級dsl框架用于寫入規(guī)則規(guī)范。此外,可使用分級評估器,所述分級評估器部分地評估規(guī)則規(guī)范并創(chuàng)建中間表示。
根據(jù)一些實施形式,規(guī)則組件可包括兩個圖ir:模式圖和替換圖。
根據(jù)一些實施形式的算法辨識寄存過模式圖的實例,并用對應替換圖替換它們。
根據(jù)一些實施形式,可執(zhí)行以下方法:在方法步驟中,開發(fā)人員指定呈現(xiàn)有dsl的任何組合形式的重寫規(guī)則。在另一方法步驟中,分級評估器創(chuàng)建規(guī)則的圖ir。在又一方法步驟中,這個圖ir被拆分成模式圖和替換圖。這兩個圖可被包裝成規(guī)則組件,并被寄存在dsl框架中。當使用dsl框架對程序進行編譯時,它們匹配寄存過規(guī)則組件的模式圖的ir的任何子圖可被檢測到,并且可被替換圖替換。
根據(jù)一些實施形式,重寫規(guī)則由應在輸入代碼中被檢測到的且應替換本模式的每一實例的模式構(gòu)成。
作為實例,可將整數(shù)的分布性定律抽象地考慮如下:
在此,在構(gòu)造我們的程序的中間表示時,每當編譯器可能遇到匹配左側(cè)的一段代碼時,它應被右側(cè)替換。以此方式,可減少所得代碼的運算次數(shù),并且可暴露優(yōu)化的其它機會(例如,在y和z兩者是常量的情況下)。
根據(jù)一些實施形式,本規(guī)則將被指定為
1)規(guī)則{(x:rep[int],y:rep[int],z:rep[int])=>
2)x*y+x*z==>x*(y+z)
3)}
根據(jù)一些實施形式,這可作為界定dsl的特點的部分由dsl開發(fā)人員完成。rep[int]是類型int的分級值的類型,即在由編譯器輸出的程序中將具有類型int(或其呈所產(chǎn)生的語言形式的等效物)的符號。運算*和+是rep[int]的常用數(shù)值運算。運算規(guī)則和==>在我們的解決方案中是添加到metadsl框架中的函數(shù)。運算==>創(chuàng)建表示為二元運算的圖節(jié)點。運算規(guī)則首先編譯它接收的scala函數(shù),這產(chǎn)生了圖2中所展示的圖,所述圖指示根據(jù)實施方案的編譯后規(guī)則初始表示。
變量s1、s2和s3是變量,全部其它圖節(jié)點對應于二元運算。這個圖可被拆分成對應于==>的左側(cè)部分和右側(cè)部分的兩個部分:模式圖和替換圖。
最后,這一對圖存儲在dsl框架的重寫規(guī)則的集合中。
之后,應用程序開發(fā)人員可寫入代碼,所述代碼的部分具有與圖3中所展示的模式圖相同的圖表示。
如入箭頭所示,s7、s9和s5不一定是變量,但可以是任意表達。當通過分級評估器創(chuàng)建每一非變量節(jié)點時,可相對于集合中的全部規(guī)則進行檢查。此處,s7、s9和s5已經(jīng)創(chuàng)建,并且因此在創(chuàng)建它們時已經(jīng)應用任何相關(guān)規(guī)則。在此情況下,當創(chuàng)建兩個*節(jié)點時,它們將不匹配模式圖的根部中的+節(jié)點(但是仍然可匹配其它規(guī)則)。
當創(chuàng)建好+節(jié)點時,它匹配模式圖中的+節(jié)點。因此,這兩個*節(jié)點以遞歸方式與模式圖中的*節(jié)點比較,并且再次發(fā)現(xiàn)與它們匹配。最后,節(jié)點s7、s9和s5對應于要素圖中的變量,并且因此僅需要比較它們的類型。比較成功,并且通過匹配器返回替代{s1→s7,s2→s9,s3→s5}。它被應用到替換圖,其中在圖4中示出了產(chǎn)生替換圖。
根據(jù)一些實施形式,新的+和*節(jié)點相對于全部存儲規(guī)則同樣匹配。因此,當產(chǎn)生最終圖時,已經(jīng)應用全部可能的規(guī)則。
根據(jù)一些實施形式,提供分級dsl框架,其可用于創(chuàng)建規(guī)則規(guī)范。另外,可提供級評估器,其執(zhí)行規(guī)則規(guī)范的分級評估并創(chuàng)建規(guī)則的基于圖的ir。根據(jù)一些實施形式,規(guī)則組件含有模式圖ir和替換圖ir,且其寄存在dsl框架中以供重寫。此外,可提供規(guī)則的行為,所述行為可辨識模式圖的實例并可用替換圖替換它們。
根據(jù)一些實施形式,所述方法可具有以下步驟:
1.使用現(xiàn)有dsl的任何組合來指定重寫規(guī)則,例如,spec(a,b,c)=a*b+a*c==>a*(b+c)
2.通過規(guī)則規(guī)范的分級評估構(gòu)建基于圖的ir,例如,
規(guī)則(a,b,c)
s1=a*b
s2=a*c
s3=s1+s2
s4=b+c
s5=a*s4
res=s3==>s5
3.將規(guī)則圖拆分成模式圖(其表示用于辨識的模式),例如,
模式(a,b,c)
s1=a*b
s2=a*c
s3=s1+s2
和替換圖(其將替換辨識過的模式的實例),例如,
替換(a,b,c)
s4=b+c
s5=a*s4
4.將這一對圖ir封裝成dsl描述的組件,并將它存儲在全部重寫規(guī)則的集合中。
5.當使用dsl對應用程序進行編譯時,用對應的替換圖的實例替換匹配模式圖的任何圖片段。
圖5示出了可在處理器上運行的編譯器200,所述編譯器用于將源代碼編譯成程序代碼。編譯器包括模式圖提供器201,其用于基于源代碼,提供模式圖,例如,如上文所提及,所述模式圖根據(jù)呈第一編程語言形式的規(guī)則集而對應于源代碼的中間表示,其中規(guī)則集包括指示模式圖將被分配給模式圖的對應替換圖替換的特定替換規(guī)則;替換單元203,其用于,例如,如上文所提及,用分配給模式圖的替換圖替換模式圖;以及代碼產(chǎn)生器205,其用于基于替換圖產(chǎn)生程序代碼,例如,如上文所述。
編譯器200可根據(jù)上述實施形式進行運行。
圖5示出了根據(jù)實施形式的域特定框架系統(tǒng)300。域特定框架系統(tǒng)300包括規(guī)則規(guī)范單元301,其用于以第一編程語言創(chuàng)建規(guī)則集,其中規(guī)則集包括指示模式圖將被分配給模式圖的對應替換圖替換的特定替換規(guī)則;規(guī)則組件單元303,所述規(guī)則組件單元包括多個模式圖和由規(guī)則規(guī)范單元分配給模式圖的每一模式圖的對應替換圖;以及分級評估器305,其用于執(zhí)行規(guī)則集的分級評估,并用于根據(jù)規(guī)則集創(chuàng)建源代碼的中間表示。
域特定框架系統(tǒng)300可根據(jù)上述實施形式運行。