編譯原理(5):語法制導翻譯

聲明:本系列文章,是根據中國大學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
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述

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

在這裏插入圖片描述

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