Skip to content

Latest commit

 

History

History
58 lines (33 loc) · 2.34 KB

README.md

File metadata and controls

58 lines (33 loc) · 2.34 KB

C4編譯器

C4編譯器:一個針對C語言的編譯器,將C代碼轉換為目標機器碼,實現比較高效的執行。

C4編譯器的設計原則之一是簡單性和易用性。它采用了直觀且易於理解的設計,使開發人員能夠輕鬆地使用編譯器進行編譯和調試操作。簡單性還有助於提高代碼的可維護性和可擴展性。

C語言編譯器項目,整個實現只有:

  • 一個C語言源碼文件
  • 528行C語言代碼
  • 4個函數

具備完整的詞法分析、語法分析、簡單的語義檢查、代碼生成、運行時環境(即虛擬機)。和常見的C編譯器不同的是,它把C語言源程序編譯成字節碼(bytecode),然後在一個精簡的虛擬機中解釋執行。

C4最特別的地方是,就是自己編譯自己。最初始的C4編譯器的可執行文件,還是必須要通過GCC、Clang等編譯器進行編譯生成。

四個函數來實現:

  • 支持char、int和指針類型。
  • 支持if、while、return和表達式語句。
  • 實現了自編譯的功能,並且具有一些額外的功能。

該編譯器包含以下全局變量:

p、lp:用於跟蹤源代碼的當前位置和上一行代碼的位置。

data:指向數據/未初始化數據段的指針。

e、le:指向生成的機器代碼的當前位置和上一行的位置。

id:指向當前解析的標識符。

sym:符號表,存儲標識符。

tk:當前的token。

ival:當前token的值。

ty:當前表達式的類型。

loc:局部變量的偏移量。

line:當前行號。

src:打印源代碼和組合代碼的標誌。

debug:打印執行的指令的標誌。

c4編譯器使用的tokensclasses按照優先級順序排列。tokens用於表示各種標識符、運算符和關鍵字,而classes則用於表示不同的類型。

心得:

c4編譯器提供一個簡單的框架,用於解析c語言代碼並且生成相應的機器代碼。對於初學者來說,這是一個好的工具,之前比較沒有過多的去了解編譯器,做這個筆記報告的時候查找很多資料,對編譯器也有更多的了解。

參考資料: