a、知識點總計
一、屬性文法
1.屬性文法
是在上下文無關文法的基礎上為每個文法符號(終結符或非終結符)配備若干個相關的「值」(稱為屬性)。
屬性:代表與文法符號相關的資訊,和變數一樣,可以進行計算和傳遞。
例:型別、值、**序列、符號表內容等
2.屬性的分類
綜合屬性
繼承屬性
(2)繼承屬性
用於「自上而下」傳遞資訊。
在語法樹中,乙個結點的繼承屬性由此結點的父結點和/或兄弟結點的某些屬性確定
3.語義規則
屬性計算的過程即是語義處理的過程
對於文法的每乙個產生式配備一組屬性的計算規則,則稱為語義規則。
b:=f(c1,c2,…,ck)
4.語義規則所描述的工作
屬性計算
靜態語義檢查
符號表操作
**生成
二、基於屬性文法的處理過程
輸入串->語法樹依賴圖->語義規則計算次序->計算結果
這種由源程式的語法結構所驅動的處理辦法就是語法制導翻譯法。
語義規則的計算可能產生**、在符號表中存放資訊、給出錯誤資訊或執行任何其它動作。對輸入串的翻譯也就是根據語義規則進行計算得出結果。
三、樹遍歷的屬性計算方法
假設語法樹已經建立起了,並且樹中已帶有開始符號的繼承屬性和終結符的綜合屬性。然後以某種次序遍歷語法樹,直至計算出所有的屬性。
最常用的遍歷方法是深度優先,從左到右的遍歷方法
如果需要,可使用多次遍歷
四、一遍掃瞄的處理方法
與樹遍歷的屬性計算方法不同,一遍掃瞄的處理方法是在語法分析的同時計算屬性值,而不是語法分析構造語法樹之後進行屬性的計算,而且無需構造實際的語法樹。
因為一遍掃瞄的處理方法與語法分析器的相互作用,它與下面兩個因素密切相關:
所採用的語法分析方法
屬性的計算次序
五、抽象語法樹
從語法樹中去掉對翻譯不必要的資訊,而獲得更有效的源程式中間表示。
這種經變換後的語法樹稱之為抽象語法樹(abstract syntax tree)。
在抽象語法樹中,操作符和關鍵字都不作為葉結點出現,而是把它們作為內部結點,即這些葉結點的父結點。
b,、課後習題
c,心得體會:學完這一章有很多不明的的地方,比如表示式建立語法樹的翻譯模式,但也了解到了很多知識,比如樹遍歷的屬性計算方法 和 一遍掃瞄的處理方法等。
編譯原理第六章
1.屬性文法分為 綜合屬性 繼承屬性。出現在產生式左邊的的繼承屬性和出現在產生式右邊的綜合屬性不由所給的產生式的屬性規則進行計算,他由其他產生式的屬性規則計算或者由屬性計算器的引數提供。綜合屬性 在語法樹種,乙個結點的綜合屬性的值由其子結點的屬性值確定,因此使用自底向上的文法在每乙個結點出使用語義規...
編譯原理第六章總結
一 屬性文法 1.屬性文法 是在上下文無關文法的基礎上為每個文法符號 終結符或非終結符 配備若干個相關的 值 稱為屬性 2.屬性的分類 綜合屬性 繼承屬性 3.語義規則 屬性計算的過程即是語義處理的過程 對於文法的每乙個產生式配備一組屬性的計算規則,則稱為語義規則 二 基於屬性文法的處理方法 1.基...
mysql第六章 第六章 mysql日誌
第六章 mysql日誌 一 錯誤日誌 錯誤日誌的預設存放路徑是 mysql 存放資料的地方 hostname.err 1.修改錯誤日誌存放路徑 mysqld log error data mysql mysql.log 2.檢視配置命令 show variables like log error 3...