Colm語言簡介
編程語言最近(再次)成為研究的主要題目,并且,這次人們仔細地關(guān)注它們的語義基礎(chǔ):
程序就是帶有語義的結(jié)構(gòu)化對象。結(jié)構(gòu)讓我們可以對程序做轉(zhuǎn)換。而語義則為我們提供了比較程序以及推斷轉(zhuǎn)換有效性的方法。語義包括程序的外延和內(nèi)涵行為。
程序轉(zhuǎn)換(Program Transformation)也得益于這種新的研究浪潮,并且已經(jīng)有公司成功發(fā)布了商業(yè)化的產(chǎn)品。
程序轉(zhuǎn)換是把一種程序轉(zhuǎn)換為另一種的操作。而術(shù)語“程序轉(zhuǎn)換”也被用于描述實現(xiàn)程序轉(zhuǎn)換的算法。程序中被轉(zhuǎn)換的語言和編寫得到的程序所用的語言分別被叫做源語言和目標語言。
Adrian Thurston最近發(fā)布了Colm(計算機語言處理)的***個版本,這種語言被設(shè)計用來對計算機語言進行分析和轉(zhuǎn)換。
Adrian是在皇后大學(xué)(ON,Canada)讀博士期間開發(fā)了Colm。他解釋說:
一種轉(zhuǎn)換語言會擁有基于正規(guī)語言的類型系統(tǒng)。它不會定義類或是數(shù)據(jù)結(jié)構(gòu),而是會定義語法。根據(jù)語法會自動構(gòu)造解析器,而這個解析器會用于兩種目的: 解析輸入語言,并解析執(zhí)行分析的程序中的結(jié)構(gòu)模式。在這種設(shè)定中,基于語法的解析非常重要,因為它確保輸入和結(jié)構(gòu)化模式都從同樣的類型系列解析為樹狀結(jié)構(gòu),從而讓我們可以進行比較。
Colm的主要貢獻在于解析方法。
Colm的解析引擎是廣義上的,但是它也考慮到了對二進制全局數(shù)據(jù)結(jié)構(gòu)的構(gòu)建,那種結(jié)構(gòu)可以在解析過程中查詢。在其它廣義的方法中,對全局數(shù)據(jù)的構(gòu)建需要慎重的考慮,因為在解析方法中會存在固有的并發(fā)操作。這是一種非常巧妙的方法,經(jīng)??梢栽诳傮w上避免問題的發(fā)生,并把問題延遲到對解析森林在解析之后的后續(xù)處理中。
使用Colm,我們可以在對輸入的***次遍歷過程中就獲得正確的解析樹,并確保某些回溯操作是可接受的。Colm讓我們不需要推斷對全局數(shù)據(jù)的并發(fā)更新,也不需要獲取很多可能的解析樹,只是把錯誤的拋棄即可。
元編程(也叫做面向元模型的編程)取得了很大進展,這多虧有了對語言工作臺和像Colm這樣強大的轉(zhuǎn)換技術(shù)的開發(fā)。你可能會使用一種嗎? 你已經(jīng)使用一種了嗎?你選擇的是哪種呢?
英文原文:http://www.infoq.com/news/2011/05/colm
【編輯推薦】