1. ucc的組成
ucc編譯後,生成乙個c語言編譯器ucl和編譯驅動ucc, ucl執行時將輸入的c原始檔編譯輸出預處理檔案,而ucc則分析輸入引數,根據引數呼叫
具。2. 預備知識
2.1 編譯的流程
通常,當需要編譯c原始檔時,只需要執行gcc/cc即可。實際上,gcc是乙個編譯驅動程式,它會依據編譯引數依次呼叫預處理器cpp, 編譯器cc, 彙編器as, 聯結器ld處理相關檔案,最後輸出可執行檔案或者庫檔案。
2.2 鍊錶list
在程式中,輸入檔案集合,輸出檔案集合以及其他引數使用list來儲存,該結構的定義,
typedef struct list
*list;
3. ucc概覽
3.1 編譯選項分析
ucc在開始執行時,會對編譯選項進行分析,確定輸入檔案的階段。
-e, 輸出預處理檔案.
-s, 輸出彙編檔案.
-c, 輸出目標檔案
-o, 輸出可執行檔案.
-wl, 鏈結器選項.
-wa, 彙編器選項.
分析得到的資料放置在struct option, 該結構的定義,
struct option
;3.2 編譯過程
3.2.1 ucc的編譯流程
ucc與gcc的編譯流程類似,在編譯c原始檔階段,呼叫ucl執行編譯任務,
執行流程將根據ucc選項,將依次執行預處理,編譯, 彙編,鏈結的階段。
enum ;
for (i = pp_file; i <= option.oftype; ++i)
}
3.2.3 預處理示例
以預處理作為示例,進一步詳細分析步驟,
可以看到,首先將c原始檔推出輸出的預處理檔案,將字尾改變為.i,合成命令序列,使用gcc做預處理,每次處理乙個檔案。
UCC向量Vector分析
1.vector的意義與定義 vector表示可變長度的物件指標陣列向量,定義如下,typedef struct vector vector data,表示物件指標陣列的首位址.len,表示陣列中指標的數量.size,表示陣列的最大容量.2.vector的操作 vector定義了一系列的操作,獲取陣...
ucc編譯器分析與總結 3 宣告檢查
有了型別系統和符號管理的基礎知識之後,接下來就可以分析宣告檢查部分的 了。源 經過預編譯後生成.i檔案,這時候 主要分為函式語句和宣告語句兩部分,其實函式只不過是一種特殊的宣告語句,比宣告語句多了 裡面的內容。函式語句和非函式語句是分開檢查的 if p kind nk function else 下...
ucc編譯器(x86移植)
之前寫過一篇ucc的文章,也就是這一篇。這篇文章對ucc的流程說了挺多,但是怎麼把ucc移植到新的cpu上面,卻沒有說很多,後來自己又看了一下 發現還是有不少新的收穫。emit.c檔案是真正的後端入口,所有的彙編檔案的整理 組織部分都是這裡完成的。當然這部分只是框架的內容,告訴我們乙個大概,全域性變...