編譯器開發系列--Ocelot語言7.中間代碼

Ocelot的中間代碼是仿照國外編譯器相關圖書Modern Compiler Implementation 中所使用的名爲Tree 的中間代碼設計的。顧名思義,Tree 是一種樹形結構,其特徵是簡單,並且方便轉換爲機器語言。設計

例如如下代碼:blog

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 類。源碼

相關文章
相關標籤/搜索