摘要:作為本系列的第一章,將考慮從何開始下手。運行環境解釋執行編譯器產生的目標代碼。從零開始寫個編譯器吧從何處下手的博客
作為本系列的第一章,將考慮從何開始下手。既然寫的是編譯器,那在此得明確編譯器長什么樣子,進一步,編譯器由哪幾部分構成,其工作原理大概是怎樣的。了解了這些,才好下手。
簡單來說,編譯器本身是一個程序,這個程序能將一種代碼(源代碼)翻譯成另一種代碼(目標代碼)。簡而言之就是如下圖。
而本系列中設計出來以供編譯的語言——tao 語言,也就扮演著“源代碼”的角色。
而編譯器,會將 tao 語言編譯成目標代碼以供執行。那么,是何種目標代碼呢?實際上我并沒有打算寫一個直接生成可執行程序的編譯器,換句話說,該編譯器生成的目標代碼不可以直接(在操作系統上)運行。因此,我需要為 tao 語言創造一個運行環境。
相對于之第一張圖,第二張圖多了tao runtime environment 這個東東。這即是 tao 語言的運行環境。目標代碼將在此運行環境上解釋執行。
但是,tao 語言作為一門語言,還必須要配一個標準庫。為此,在圖中加上標準庫,便有了如下圖。
至此,我們的任務也就清晰的呈現在眼前了。如果我們想讓世界上出現一門叫做 tao 語言的新語言,并且能讓程序員用這種語言寫的程序能順利運行,我們至少要做出下面三個東西:
編譯器:能將 tao 語言寫的源代碼編譯成可供運行環境解釋執行的目標代碼。
運行環境:解釋執行編譯器產生的目標代碼。
標準庫:供 tao 語言的用戶調用的類庫。
從零開始寫個編譯器吧 - 從何處下手 - moskize 的博客
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64217.html
摘要:是的,這個系列將呈現一個完整的編譯器從無到有的過程。但在寫這個編譯器的過程中,我可不會偷工減料,該有的一定會寫上的。該語言的虛擬機將運行于之上,同時編譯器將使用實現。我早有寫編譯器的想法之前沒寫過,故希望一邊寫編譯器一邊完成這個系列。 是的,這個系列將呈現一個完整的編譯器從無到有的過程。當然,為了保證該系列內容的簡潔(也為了降低難度),僅僅保證編譯器的最低要求,即僅能用。但在寫這個編譯...
摘要:自然,我們還是先從語言的編譯器下手吧。在動手寫編譯器之前,得容我將編譯器的結構進行進一步的劃分。這些將被語法分析器接收并進行進一步處理。由于本系列將著重于寫出編譯器,必要的理論和概念還是會交代的。從零開始寫個編譯器吧編譯器的結構的博客 自然,我們還是先從 tao 語言的編譯器下手吧。在動手寫編譯器之前,得容我將編譯器的結構進行進一步的劃分。編譯器可視為一個黑盒,從其一端輸入源代碼,另一...
摘要:各位抱歉了,這個系列在多個平臺的專欄上連載。所以,我把從零開始寫個編譯器吧弄到了上。以后更新也是先從上開始。從零開始寫歌編譯器吧更及時的信息可以從我的公眾號上獲得雖然不怎么寫公眾號,但是還是掛一下吧 各位抱歉了,這個系列在多個平臺的專欄上連載。每發一個新章節,都要同步到各個專欄上,于是可能漏掉 Segmentfault 的博客。汗,其實 Segmentfault 這邊已經落后很久了。 ...
摘要:詞法分析器本身就是一個狀態機,生成這個狀態機有很多種方法,而我打算采取手寫的方式。狀態機不斷從源代碼即一個字符串中讀入一個一個字符,讀到不同的字符將使狀態機的狀態從一個狀態變化到另外一個狀態。 詞法分析器 Tokenizer 本身就是一個狀態機,生成這個狀態機有很多種方法,而我打算采取手寫的方式。因為 tao 語言的詞法還是相對比較簡單的,手寫不成問題。 先新建一個LexicalAna...
摘要:在之前的章節第章從零開始寫個編譯器吧開始寫詞法分析器中我有說,我將函數設計成主動調用的形式,而則是被動調用的形式。接下來本系列將進入編寫語法分析器的階段,不過在此之前,我將抽出一點時間介紹一下語言本身。 上周周末旅游去了,就沒更新了,雖然回到海拔0m的地區,不過目前似乎還在缺氧,所以本次就少更點吧。 這章將結束詞法分析的部分。 在之前的章節(第7章從零開始寫個編譯器吧 - 開始寫詞...
閱讀 1581·2021-11-16 11:44
閱讀 7422·2021-09-22 15:00
閱讀 4462·2021-09-02 10:20
閱讀 1944·2021-08-27 16:20
閱讀 2385·2019-08-26 14:00
閱讀 2904·2019-08-26 11:44
閱讀 1625·2019-08-23 18:33
閱讀 1852·2019-08-22 17:28