當人們聽我說我們的程序將存儲為圖形并且我們需要特定的編輯器,我確信很多人認為我將要談到圖形編輯器,事實不是這樣子的;盡管程序是圖形形式,編輯器卻不一定非得將程序描繪成圖形;事實上,只有少數情況下圖形編輯器才是有用的(也就是說,當它合適的時候,比如對數據庫表);相反,我們的Editor Language有更好的靈感來源,諷刺的是,它來自文本編輯器
如果你用文本編輯器瀏覽一個典型的程序,你可以想象編輯器被分成了矩形單元;一些單元包含必需的標識如關鍵字、花括號、圓括號等,其它的單元包含用戶定義的標識,如類和方法的名稱;大的單元由小的單元組成,像方法塊包含語句,而語句可能包含自己的嵌套塊;事實上,任何主流編程語言中任何良好構造的程序都可以分解為矩形單元的集合;那么,在Editor Language中,你不需要想象這些單元,因為編輯器就是簡單的由矩形單元組成的
單元的使用有一些有趣的優點;首先,當直接工作在程序圖形而不是程序文本上時,單元可以完美的模仿甚至超過標準的文本編輯器;第二,單元不局限于文本,你可以往單元里塞進顏色選擇器、數學符號、圖表、矢量圖、或任何別的什么;最后,這種單元形式的layout是可選的,程序員可以提供不同的機制,單元形式的 layout只是一種有用的缺省設置
因此,Editor Language幫助你定義語言中每個概念對應的單元的layout;你可以定義哪些部分是不變的,像括號或其它修飾符號,哪些是可變的,需要用戶去定義的;Editor Language也幫助你在你自己的編輯器中加入強大的特性,像自動完成、重構、導航、語法加亮、錯誤加亮、以及任何其它你想到的事情;因此你能夠增加現在的編輯器如IntelliJ IDEA等擁有的功能到你自己的語言中;這是可能的,因為程序和語言被構造為圖形,而我們有專門的Editor Language幫助我們創造強大的編輯器
Transformation Language
Structure Language和Editor Language已經共同提供了一些功能,你能夠用它們和其他人交流思想,比如畫UML圖,或者編寫其它類型的文檔;然而,大部分時間我們是想讓我們的代碼做點什么,因此,我們必須找到一種方法讓它能夠執行;有兩種主要的方式來做這件事情:解釋和編譯
DSLs支持的解釋方式幫助定義計算機應該如何解釋程序,DSLs支持的編譯方式幫助定義如何為程序產生可執行代碼;我將在以后的文章中討論對解釋方式的支持,現在我想說明一下MPS是如何支持編譯方式的
編譯意味著拿到源代碼,并從中產生某種形式的可執行代碼;對于結果代碼有多種可能的形式;為產生可執行代碼,你可以生成本地機器碼,也可以生成虛擬機字節碼;或者,你可以生成另外一種語言的源代碼(比如Java,C++),然后用現有的編譯器轉換為可執行代碼;類似的,你甚至可以產生某種解釋型語言的源代碼,用現有的解釋器解釋執行
為了避免處理這么廣泛的目標格式,我們的方法是用MPS來做每一件事;首先,你在MPS中使用Structure Language定義一種目標語言,這種目標語言和目標格式之間應該有直接的一對一的映射;例如,如果你的目標格式是機器碼,你應該用MPS定義一種對應機器碼的目標語言;如果目標格式是Java源代碼,你應該定義一種類Java的目標語言;目標語言不必支持目標格式所有的功能特性,只為你需要的語言特性進行簡單的一對一的映射即可
文章來源于領測軟件測試網 http://www.kjueaiud.com/