從零開始寫個編譯器吧 - 從何處下手

做爲本系列的第一章,將考慮從何開始下手。既然寫的是編譯器,那在此得明確編譯器長什麼樣子,進一步,編譯器由哪幾部分構成,其工做原理大概是怎樣的。瞭解了這些,纔好下手。html

簡單來講,編譯器自己是一個程序,這個程序能將一種代碼(源代碼)翻譯成另外一種代碼(目標代碼)。簡而言之就是以下圖。程序員

40756ec5669d28cca5ae040b8c62db98_b.jpg

而本系列中設計出來以供編譯的語言——tao 語言,也就扮演着「源代碼」的角色。spa

而編譯器,會將 tao 語言編譯成目標代碼以供執行。那麼,是何種目標代碼呢?實際上我並無打算寫一個直接生成可執行程序的編譯器,換句話說,該編譯器生成的目標代碼不能夠直接(在操做系統上)運行。所以,我須要爲 tao 語言創造一個運行環境。操作系統

f60f07b3bf428ea78878a9171a8a1bce_b.jpg

相對於之第一張圖,第二張圖多了tao runtime environment 這個東東。這便是 tao 語言的運行環境。目標代碼將在此運行環境上解釋執行。翻譯

可是,tao 語言做爲一門語言,還必需要配一個標準庫。爲此,在圖中加上標準庫,便有了以下圖。設計

8dd96e73836843173aa09c7ec8e4ed3a_b.jpg

至此,咱們的任務也就清晰的呈如今眼前了。若是咱們想讓世界上出現一門叫作 tao 語言的新語言,而且能讓程序員用這種語言寫的程序能順利運行,咱們至少要作出下面三個東西:htm

編譯器:能將 tao 語言寫的源代碼編譯成可供運行環境解釋執行的目標代碼。
運行環境:解釋執行編譯器產生的目標代碼。
標準庫:供 tao 語言的用戶調用的類庫。get

從零開始寫個編譯器吧 - 從何處下手 - moskize 的博客編譯器

相關文章
相關標籤/搜索