我開發中的編譯器名字暫時叫"saipan" ,就是塞班島的意思,那是個美麗的地方.
目前它分為已下幾個模組
預處理->詞法分析->語法分析->語義分析->位元組碼生成 以及 符號管理,型別系統,屬性管理,錯誤處理 等幾個部分,並在語法分析和語義分析中完成一些屬性的計算.
各個模組大概功能如下:
預處理: 目前只是簡單的去注釋 (已完成)
詞法分析: 將源**拆分成乙個個的識別符號,並判斷出基本型別,例如關鍵字,運算子,立限數 (已完成)
語法分析: 分析已拆分出來的識別符號,檢查是否有語法錯誤,並成生語法樹.
語義分析: 在語法樹的基礎上檢查語義.
位元組碼生成: 生成自己的虛擬機器可以執行的位元組碼.
沒有單獨的屬性計算步驟,為了程式設計上的方便,將屬性計算放在語法分析和語義分析部分一起進行.
其它的模組包括:
符號管理: 管理詞法分析中拆分出來的識別符號. (已完成)
型別系統: 管理型別資訊,包括標準型別和構造型別(類,介面,列舉之類)的資訊,比如此型別所占用位元組長度,是否能顯示或 隱式的轉換成某個其它型別.當某二個型別經過某種運算子的運算,會得到什麼樣的型別等等. (完成一部分)
屬性管理: 管理編譯過程中所計算出來的某個語法元素的屬性,比如乙個引數的型別,在棧上定址的偏移位址等.
錯誤處理: 對源**中各種錯誤的處理. (完成一部分)
編譯器結構
一 乙個編譯器的結構 我們可以吧編譯器看作是乙個黑盒子,它可以把源程式對映為在語義上等價的目標程式。這個對映過程我們我們可以先分為兩個部分 分析部分和綜合部分。1 分析部分 把源程式分解為多個組成要素,並在這些要素之上加上語法結構。然後,使用這個語法結構來建立乙個中間表示。而且,分析部分會收集有關源...
編譯原理 編譯器結構
編譯器是具有高度模組化的一種結構,說白了就是編譯的任務被劃分為乙個個小的子任務,交付給不同的小模組來執行。這些小模組的序列 順序 執行,對應的就是小任務的序列實現,最終就實現了編譯這個總任務。所以說編譯器也可以看成由多個階段構成的流水線結構 如圖所示,一種簡單的 流水線 式的編譯器結構 這個是具有優...
從零開始寫個編譯器吧 編譯器的結構
自然,我們還是先從 tao 語言的編譯器下手吧。在動手寫編譯器之前,得容我將編譯器的結構進行進一步的劃分。編譯器可視為乙個黑盒,從其一端輸入源 另一端產出目標 此過程進一步拆分便有了如下形式。首先是 tokenizer 詞法分析器 它讀入乙個乙個字元,並將其合併成乙個乙個token 單詞 這些 to...