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