第六章
1.屬性文法
是在上下文無關文法的基礎上為每個文法符號(終結符或非終結符)配備若干個相關的「值」(稱為屬性)。
屬性:代表與文法符號相關的資訊,和變數一樣,可以進行計算和傳遞。
(1)綜合屬性
用於「自下而上」傳遞資訊
在語法樹中,乙個結點的綜合屬性的值,由其子結點的屬性值確定
(2)繼承屬性用於「自上而下」傳遞資訊。
在語法樹中,乙個結點的繼承屬性由此結點的父結點和/或兄弟結點的某些屬性確定
(2)繼承屬性
用於「自上而下」傳遞資訊。
在語法樹中,乙個結點的繼承屬性由此結點的父結點和/或兄弟結點的某些屬性確定
4.語義規則所描述的工作
屬性計算
靜態語義檢查
符號表操作
**生成
2.基於屬性文法的處理方法
1 輸入串--語法樹--依賴圖--語義規則計算次序--計算結果
這種由源程式的語法結構所驅動的處理辦法就是語法制導翻譯法。
語義規則的計算可能產生**、在符號表中存放資訊、給出錯誤資訊或執行任何其它動作。對輸入串的翻譯也就是根據語義規則
進行計算得出結果。
2 屬性的計算次序
乙個有向非迴圈圖的拓撲序是圖中結點的任何順序m1,m2, …mk,使得邊必須是從序列中前面的結點指向後面的結點。
也就是說,如果mi--mj是mi到mj的一條邊,那麼在序列中mi必須出現在mj之前。
3、樹遍歷的屬性計算方法
假設語法樹已經建立起了,並且樹中已帶有開始符號的繼承屬性和終結符的綜合屬性。然後以某種次序遍歷語法樹,直至計算出
所有的屬性。
4.抽象語法樹
從語法樹中去掉對翻譯不必要的資訊,而獲得更有效的源程式中間表示。
這種經變換後的語法樹稱之為抽象語法樹
3.屬性文法的自下而上計算
s—屬性文法,它只含有綜合屬性。
綜合屬性可以在分析符號串的同時由自上而下的分析器來構造
分析器可以儲存與棧中文法符號有關的綜合屬性值
每當進行歸約時,新的屬性值就由棧中正在歸約的產生式右邊符號的屬性值來計算
可以通過擴充分析器中的棧來存放這些綜合屬性值
s-屬性文法的翻譯器通常可借助於lr分析器實現
4.l-屬性文法的自頂向下翻譯
屬性的計算次序受分析方法所限定的分析樹結點建立次序的限制
分析樹的結點是自左向右生成
如果屬性資訊是自左向右流動,那麼就有可能在分析的同時完成屬性計算
5.翻譯模式
翻譯模式是語法制導定義的一種便於翻譯的書寫形式。其中屬性與文法符號相對應,語義規則或語義動作用花括號{ }括起來,
可被插入到產生式右部的任何合適的位置上。
這是一種語法分析和語義動作交錯的表示法,他表達在按深度優先遍歷分析樹的過程中何時執行語義動作。
翻譯模式給出了使用語義規則進行計算的順序。可看成是分析過程中翻譯的注釋。
第七章1.語義分析的任務
1. 審查每乙個語法結構的靜態語義,即驗證語法正確的結構是否有意義。
2.在語義正確的基礎上生成一種中間**或目標**。
2. 語義分析的範圍
1.確定型別:確定識別符號所關聯的資料型別。
2.型別檢查:按語言的型別規則,檢查運算的合法性與運算分量型別的一致性,必要時作型別轉換。
3.識別含義:根據語言的語義定義(形式或非形式),識別程式中各構造成分組合到一起的含義,並作相應的語義處理(生成中間**或目標**)。
4.控制流檢查:控制流語句必須轉移到合法的地方。如c中,break語句規定跳出最內層的迴圈或switch語句。
5.一致性檢查:在很多場合要求物件只能被說明一次。
6.相關名字檢查:如:ada,迴圈或塊可以有乙個名字,它出現在這些結構的開頭或結尾。編譯程式必須檢查這兩個地方用的名字是否相同。
其他:如名字的作用域分析等也是語義分析的工作。
3.語義描述工具和語義分析方法
1 .語義描述工具
目前流行:用屬性文法作為描述語義的工具。
2.語義分析方法
根據描述屬性文法的語義規則的方式不同分為:
語法制導定義
翻譯方案
3.語法制導翻譯
自底向上的語法制導翻譯
自頂向下的語法制導翻譯
4.幾種常用的中間語言形式
逆波蘭表示法:a+b → ab+
圖表示法:抽象語法樹
三元式:
三元式由三個部分組成:
算符:op
第一運算分量:arg1
第二運算分量:arg2
間接三元式:在三元式的基礎上附加一張指示器表─間接碼表,按運算的先後順序列出有關三元式在三元式表中的位置。這種表示方法稱為間接三元式
四元式:乙個四元式是乙個帶有四個域的記錄結構:op,arg1,arg2及result。它實際上就是一條三位址的指令。
5.賦值語句的翻譯
1.簡單算術表示式的賦值語句:
所謂簡單指不考慮陣列元素、記錄、函式的引用等情況。
2.型別轉換
有的程式語言允許混合運算,有的不允許。如果不允許,則發現有型別不相同的運算分量就應該報錯。如果允許,就要進行型別轉換。
6.控制流語句的翻譯
1. 條件語句中布林表示式的翻譯
出現在條件語句if e then s1 else s2中的布林表示式e,它的作用僅在於控制對s1或s2的選擇,亦即提供「真」「假」出口,所以其值無需一直保留。
2.標號和無條件轉移的翻譯
3.迴圈與分情況語句的翻譯
7.過程呼叫的翻譯
1.把程式控制轉移到子程式(過程段),執行完畢再返回。這個問題很好解決。
2.傳遞實在引數。我們前面談到過幾種不同的引數傳遞方式(傳名、傳值、傳位址),它們的語義動作也就有所區別。
第六章第七章 基本過濾
1 過濾資料 1 使用where語句 select prod name,prod price from products where prod price 2.50 2 操作符 操 作 符 說 明 等於 不等於!不等於 小於 小於等於 大於 大於等於 between 在指定的兩個值之間 betwee...
C primer plus第六章 第七章筆記
補第四章printf scanf 筆記 關於printf scanf 返回值問題 1 printf 函式返回值,他返回的是列印字元的個數,是其列印輸出功能的附帶用途。具體應用如下 2 scanf 函式返回成功讀取的項數。如果沒有讀取任何項,且需要讀取乙個數字而使用者卻輸入乙個非數值字串,scanf ...
大話資料結構第六章 第七章
二叉樹 前序遍歷使用遞迴 1.列印根節點2.遞迴遍歷左子樹3.遍歷右子樹 遞迴結束條件 該節點不存在 中序遍歷使用遞迴 1.遞迴遍歷左子樹2.列印根節點3.遍歷右子樹 遞迴結束條件 該節點不存在 後序遍歷使用遞迴 1.遞迴遍歷左子樹2.列印根節點3.遍歷右子樹 遞迴結束條件 該節點不存在 線索二叉樹...