Ocelot的中間代碼是仿照國外編譯器相關圖書Modern Compiler Implementation 中所使用的名為Tree 的中間代碼設計的。顧名思義,Tree 是一種樹形結構,其特征是簡單,而且方便轉換為機器語言。 例如以下代碼: 會被轉換成如下的中間代碼: 組成中間代碼的類如表11.1 ...
Ocelot的中間代碼是仿照國外編譯器相關圖書Modern Compiler Implementation 中所使用的名為Tree 的中間代碼設計的。顧名思義,Tree 是一種樹形結構,其特征是簡單,而且方便轉換為機器語言。
例如以下代碼:
int main(int argc, char** argv) { return ++argc; }
會被轉換成如下的中間代碼:
<<IR>> (G:\編譯原理\自製編譯器\源碼\test\hello_ir.cb:1) variables: functions: <<DefinedFunction>> (G:\編譯原理\自製編譯器\源碼\test\hello_ir.cb:1) name: main isPrivate: false type: int(int, char**) body: <<Assign>> (G:\編譯原理\自製編譯器\源碼\test\hello_ir.cb:3) lhs: <<Addr>> type: INT32 entity: argc rhs: <<Bin>> type: INT32 op: ADD left: <<Var>> type: INT32 entity: argc right: <<Int>> type: INT32 value: 1 <<Return>> (G:\編譯原理\自製編譯器\源碼\test\hello_ir.cb:3) expr: <<Var>> type: INT32 entity: argc
組成中間代碼的類如表11.1 所示。
所有語句的節點都繼承自Stmt 類,表達式的節點繼承自Expr 類。