編譯原理(6):中間代碼生成

聲明:本系列文章,是根據中國大學MOOC網 哈工大的編譯原理 這門課學習而成的學習筆記。

一、類型表達式 (Type Expressions)

類型表達式

  1. 基本類型是類型表達式
  • integer
  • real
  • char
  • boolean
  • type_error (出錯類型)
  • void (無類型)
  1. 可以爲類型表達式命名,類型名也是類型表達式
  2. 將類型構造符(type constructor)作用於類型表達式可以構成新的類
    型表達式
  • 數組構造符array
    若T是類型表達式,則array ( I, T )是類型表達式( I是一個整數)
    在這裏插入圖片描述

  • 指針構造符pointer
    若T 是類型表達式,則 pointer ( T ) 是類型表達式,它表示一個指針類型。

  • 笛卡爾乘積構造符
    若T1 和T2是類型表達式,則笛卡爾乘積T1×T2 是類型表達式

  • 函數構造符→
    若T1、T2、…、Tn和R是類型表達式,則T1×T2 ×…×Tn→ R是 類型表達式

  • 記錄構造符record
    若有標識符N1、N2、…、Nn 與類型表達式T1、T2、…、Tn , 則 record ( ( N1× T1 )×( N2×T2 )×…× ( Nn×Tn )) 是一個類型表達式
    在這裏插入圖片描述

二、聲明語句的翻譯

局部變量的存儲分配

對於聲明語句,語義分析的主要任務就是收集標識符的類型等屬性信息,併爲每一個名字分配一個相對地址

  • 從類型表達式可以知道該類型在運行時刻所需的存儲單元數量稱爲類型的寬度(width)
  • 在編譯時刻,可以使用類型的寬度爲每一個名字分配一個相對地址

名字的類型相對地址信息保存在相應的符號表記錄中

變量聲明語句的SDT

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

三、簡單賦值語句的翻譯

賦值語句翻譯的任務

在這裏插入圖片描述

賦值語句的SDT

在這裏插入圖片描述

增量翻譯

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

四、數組引用的翻譯

數組引用的翻譯

在這裏插入圖片描述

數組元素尋址 (Addressing Array Elements )

在這裏插入圖片描述

在這裏插入圖片描述

帶有數組引用的賦值語句的翻譯

在這裏插入圖片描述
在這裏插入圖片描述

數組引用的SDT

在這裏插入圖片描述

在這裏插入圖片描述

五、控制流語句及其SDT

控制流語句的基本文法

在這裏插入圖片描述

控制流語句的代碼結構

在這裏插入圖片描述

控制流語句的SDT

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

六、布爾表達式及其SDT

布爾表達式的基本文法

在這裏插入圖片描述

  • 在跳轉代碼中,邏輯運算符&&、|| 和 ! 被翻譯成跳轉指令。運算符本身不出現在代碼中,布爾表達式的值是通過代碼序列中的位置來表示的

在這裏插入圖片描述

布爾表達式的SDT

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

七、控制流翻譯的例子

控制流語句的SDT

在這裏插入圖片描述

SDT的通用實現方法

  • 任何SDT都可以通過下面的方法實現
    首先建立一棵語法分析樹,然後按照從左到右的深度優先順序來執行這些動作

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

七、布爾表達式的回填

回填 (Backpatching)

在這裏插入圖片描述

非終結符B的綜合屬性

在這裏插入圖片描述

函數

在這裏插入圖片描述

布爾表達式的回填

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

八、控制流語句的回填

控制流語句的回填

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

九、switch語句的翻譯

switch語句的翻譯

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

增加一種case指令

在這裏插入圖片描述

十、過程調用語句的翻譯

過程調用語句的翻譯

在這裏插入圖片描述

過程調用語句的代碼結構

在這裏插入圖片描述
在這裏插入圖片描述

過程調用語句的SDD

在這裏插入圖片描述

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章