第六章 第七章

2021-08-20 19:03:05 字數 2925 閱讀 9470

第六章

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.遍歷右子樹 遞迴結束條件 該節點不存在 線索二叉樹...