天天看點

編譯原理

  • 中間語言的優點:

    1、中間語言與具體機器特性無關,一種中間語言可以為生成多種不同型号的目标機的目标代碼服務。前端複用。

    2、可對中間語言進行與機器無關的優化,有利于提高目标代碼的品質。

  1. 生成抽象文法樹後, 接着将抽象文法樹轉化為隻在編譯器内部使用的中間代碼(Intermediate Representation,IR)。

    之是以特地轉化為中間代碼,主要是為了支援多種程式設計語言或者機器語言。例如,GCC 不僅支援C 語言,還可以用來編譯C++ 和Fortran。CPU 方面,不僅是Intel 的CPU,還可以生成面向Alpha、SPARC、MIPS 等各類CPU 的機器語言。如果要為這些語言和CPU 的各種組合單獨制作編譯器,将耗費大量的時間和精力。Intel CPU 用的C 編譯器、IntelCPU 用的C++ 編譯器、Intel CPU 用的Fortran 編譯器、Alpha 用的C 編譯器……要制作的編譯器的數量将非常龐大(圖1.4)。

    而如果将所有的程式設計語言先轉化為共同的中間代碼,那麼對應一種語言或一種CPU,隻要添加一份處理就夠了(圖1.5)。是以支援多種語言或CPU 的編譯器使用中間代碼是比較合适的。例如GCC 使用的是一種名為RTL(Register TransferLanguange)的中間代碼。

    根據編譯器的不同,也存在不經過中間代碼,直接從抽象文法樹生成機器語言的情況。本書制作的C 編譯器最初并沒有使用中間代碼,後來發現使用中間代碼的話,代碼的可讀性和簡潔性都要更勝一籌,是以才決定使用中間代碼。解析代碼轉化為中間代碼為止的這部分内容,稱為編譯器的前端(front-end)。

上一篇: 編譯原理

繼續閱讀