聲明:本系列文章,是根據中國大學MOOC網 哈工大的編譯原理 這門課學習而成的學習筆記。
一、語法制導翻譯概述
什麼是語法制導翻譯
語法制導翻譯的基本思想
兩個概念
語法制導定義(SDD)
語法制導翻譯方案(SDT)
SDD與SDT
SDD:
- 是關於語言翻譯的高層次規格說明;
- 隱蔽了許多具體實現細節,使用戶不必顯式地說明翻譯發生的順序
SDT:
- 可以看作是對SDD的一種補充,是SDD的具體實施方案;
- 顯式地指明瞭語義規則的計算順序,以便說明某些實現細節
二、語法制導定義SDD
綜合屬性(synthesized attribute)
繼承屬性(inherited attribute)
屬性文法 (Attribute Grammar)
一個沒有副作用的SDD有時也稱爲屬性文法
屬性文法的規則僅僅通過其它屬性值和常量來定義一個屬性值
三、SDD的求值順序
SDD的求值順序
-
SDD爲CFG中的文法符號設置語義屬性。對於給定的輸入串x,應用語義規則計算分析樹中各結點對應的屬性值
-
按照什麼順序計算屬性值?
語義規則建立了屬性之間的依賴關係,在對語法分析樹節點的一個屬性求值之前,必須首先求出這個屬性值所依賴的所有屬性值
依賴圖(Dependency Graph)
- 依賴圖是一個描述了分析樹中結點屬性間依賴關 系的有向圖
- 分析樹中每個標號爲X的結點的每個屬性a都對應着依賴圖中的一個結點
- 如果屬性X.a的值依賴於屬性Y.b的值,則依賴圖中有一條從Y.b的結點指向X.a的結點的有向邊
屬性值的計算順序
四、S-屬性定義與L-屬性定義
S-屬性定義
L-屬性定義
五、語法制導翻譯方案SDT
語法制導翻譯方案SDT
SDT可以看作是SDD的具體實施方案
主要關注如何使用SDT來實現兩類重要的SDD,因爲在這兩種情況下,SDT可在語法分析過程中實現
- 基本文法可以使用LR分析技術,且SDD是S屬性的
- 基本文法可以使用LL分析技術,且SDD是L屬性的
將S-SDD轉換爲SDT
將一個S-SDD轉換爲SDT的方法:將每個語義動作都放在產生式的最後
S-屬性定義的SDT 實現
將L-SDD轉換爲SDT
L-屬性定義的SDT 實現
L-屬性定義的SDT 實現
六、在非遞歸的預測分析
在中進行在非遞歸的預測分析過程中進行翻譯
擴展語法分析棧
分析棧中的每一個記錄都對應着一段執行代碼
- 綜合記錄出棧時,要將綜合屬性值複製給後面特定的語義動作
- 變量展開時(即變量本身的記錄出棧時),如果其含有繼承屬性,則要將繼承屬性值複製給後面特定的語義動作
七、在遞歸的預測分析過程中進行翻譯
算法
八、L-屬性定義的自底向上翻譯
- 給定一個以LL文法爲基礎的L-SDD,可以 修改這個文法,並在LR語法分析過程中計 算這個新文法之上的SDD