編譯原理課程總結 第六章 屬性文法和語法制導翻譯

2021-08-20 17:03:31 字數 2586 閱讀 7232

屬性文法是在上下文無關文法的基礎上為每個文法符號(終結符或非終結符)配備若干個相關的「值」(稱為屬性)。

屬性分為兩類:

(1)綜合屬性

用於「自下而上」傳遞資訊

在語法樹中,乙個結點的綜合屬性的值,由其子結點的屬性值確定

s—屬性文法:僅僅使用綜合屬性的屬性文法

(2)繼承屬性

用於「自上而下」傳遞資訊。

在語法樹中,乙個結點的繼承屬性由此結點的父結點和/或兄弟結點的

某些屬性確定

注意:

(1)終結符只有綜合屬性,它由詞法分析器提供

(2)非終結符既可以有綜合屬性也可以有繼承屬性,文法開始符號的所有繼承屬性作為屬性計算前的初始值。

(3) 產生式右邊符號的繼承屬性和產生式左邊符號的綜合屬性都必須提供乙個計算規則

(4) 產生式左邊符號的繼承屬性和產生式右邊符號的綜合屬性不由所給的產生式的屬性計算規則進行計算,它們由其它產生式的屬性規則計算

所以在對屬性計算的過程即是對語義處理的過程,對於文法的每乙個產生式配備一組屬性的計算規則,則稱為語義規則。

注意:

(1)語義規則可能產生***(如產生**),

(2)也可能是過程,不是嚴格的函式(即不一定有返回值)

例子:

在屬性文法的基礎上進行處理

輸入串語法樹->依賴圖->語義規則計算次序->計算結果

這種由源程式的語法結構所驅動的處理辦法就是語法制導翻譯法。

在一顆語法樹中的結點的繼承屬性和綜合屬性之間的相互依賴關係可以用稱作依賴圖的乙個有向圖來描述。

注意:

如果一屬性文法不存在屬性之間的迴圈依賴關係,那麼該文法為良定義的。為了設計編譯程式,我們只處理良定義的屬性文法。

迴圈依賴:

例如p,c1,c2都是屬性,若有如下求值規則

p:=f1(c1)、c1:=f2(c2)、c2=f3(p),

就無法對p求值.

屬性的計算次序乙個有向非迴圈圖的拓撲序是圖中結點的任何順序m1,m2, …mk,使得邊必須是從序列中前面的結點指向後面的結點。也就是說,如果mimj是mi到mj的一條邊,那麼在序列中mi必須出現在mj之前。

乙個依賴圖的任何拓撲排序都給出乙個語法樹中結點的語義規則計算的有效順序。這就是說,在拓撲排序中,在乙個結點上,語義規則b:=f(c1,c2,…ck)中的屬性c1,c2…ck在計算b以前都是可用的。

抽象語法樹

從語法樹中去掉對翻譯不必要的資訊,而獲得更有效的源程式中間表示。

這種經變換後的語法樹稱之為抽象語法樹(abstract syntax tree)。

在抽象語法樹中,操作符和關鍵字都不作為葉結點出現,而是把它們作為內部結點,即這些葉結點的父結點。

l-屬性文法的自頂向下翻譯

翻譯模式

1. 定義

(1)翻譯模式是語法制導定義的一種便於翻譯的書寫形式。其中屬性與文法符號相對應,語義規則或語義動作用花括號{ }括起來,可被插入到產生式右部的任何合適的位置上。

(2)這是一種語法分析和語義動作交錯的表示法,他表達在按深度優先遍歷分析樹的過程中何時執行語義動作。

(3)翻譯模式給出了使用語義規則進行計算的順序。可看成是分析過程中翻譯的注釋。

設計翻譯模式(根據語法制導定義)

條件:語法制導定義是l-屬性定義

保證語義動作不會引用還沒有計算的屬性值。

—–(1)只需要綜合屬性的情況

為每乙個語義規則建立乙個包含賦值的動作,並把這個動作放在相應的產生式右邊的末尾。

例如:

產生式 語義規則

tt1*f tval:=t1 val*f val

翻譯模式

tt1*f

——(2)既有綜合屬性又有繼承屬性的情況

①產生式右邊的符號的繼承屬性必須在這個符號以前的動作中計算出來。

②乙個動作不能引用這個動作右邊符號的綜合屬性。

③產生式左邊非終結符號的綜合屬性只有在它所引用的所有屬性都計算出來以後才能計算。計算這種屬性的動作通常可放在產生式右端的未尾。

編譯原理第六章總結

一 屬性文法 1.屬性文法 是在上下文無關文法的基礎上為每個文法符號 終結符或非終結符 配備若干個相關的 值 稱為屬性 2.屬性的分類 綜合屬性 繼承屬性 3.語義規則 屬性計算的過程即是語義處理的過程 對於文法的每乙個產生式配備一組屬性的計算規則,則稱為語義規則 二 基於屬性文法的處理方法 1.基...

編譯原理第六章

a 知識點總計 一 屬性文法 1.屬性文法 是在上下文無關文法的基礎上為每個文法符號 終結符或非終結符 配備若干個相關的 值 稱為屬性 屬性 代表與文法符號相關的資訊,和變數一樣,可以進行計算和傳遞。例 型別 值 序列 符號表內容等 2.屬性的分類 綜合屬性 繼承屬性 2 繼承屬性 用於 自上而下 ...

編譯原理第六章

1.屬性文法分為 綜合屬性 繼承屬性。出現在產生式左邊的的繼承屬性和出現在產生式右邊的綜合屬性不由所給的產生式的屬性規則進行計算,他由其他產生式的屬性規則計算或者由屬性計算器的引數提供。綜合屬性 在語法樹種,乙個結點的綜合屬性的值由其子結點的屬性值確定,因此使用自底向上的文法在每乙個結點出使用語義規...