全套答案見我的《編譯原理》專欄
中間代碼生成_1
1 中間代碼生成時所依據的是( )。
A. 語法規則
B. 詞法規則
C. 語義規則
D. 等價變換規則
2 在編譯程序中與中間代碼生成無關的是( )。
A. 便於目標代碼的優化
B. 便於存儲空間的組織
C. 便於編譯程序的移植
D. 便於目標代碼的移植
3 以下說法不正確的是( )。
A. 對於聲明語句,語義分析的主要任務就是收集標識符的類型等屬性信息,爲每一個名
字分配一個相對地址
B. 從變量類型可以知道該變量在運行時刻需要的內存數量。在編譯時刻,可以使用這些
數量爲每一個名字分配一個相對地址
C. 名字的類型和相對地址信息保存在相應的符號表條目中
D. 對聲明的處理要構造符號表,但不產生中間代碼
4 以下說法不正確的是( )。
A. 類型自身也有結構,用類型表達式來表示這種結構
B. 基本類型不是類型表達式
C. 類型名也是類型表達式
D. 將類型構造符作用於類型表達式可以構成新的類型表達式
5 數組元素的地址計算與數組的存儲方式有關。
A. 對
B. 錯
6 在程序中標識符的出現僅爲使用性的。
A. 對
B. 錯
7 在編譯階段只對可執行語句進行翻譯。
A. 對
B. 錯
8 在程序中標識符的出現僅爲定義性的。
A. 對
B. 錯
第12講 中間代碼生成_2
1 有文法G及其語法制導翻譯如下所示( 語義規則中的*和+分別是常規意義下的算術運算符):
E→E(1) ∧ T {E.val = E(1).val * T.val}
E→T {E.val = T.val}
T→T(1)# n {T.val = T(1).val + n.val }
T→ n {T.val = n.val}
則分析句子1 ∧ 2 ∧ 3 # 4其值爲( )。
A. 10
B. 34
C. 14
D. 54
2 用( )可以把a:=b+c翻譯成四元式序列。
A. 語法規則
B. 詞法規則
C. 語義規則
D. 等價變換規則
3 有文法G及其語法制導翻譯如下所示( 語義規則中的*和+分別是常規意義下的算術運算符):
E→E(1) ∧ T {E.val = E(1).val * T.val}
E→T {E.val = T.val}
T→T(1)# n {T.val = T(1).val + n.val }
T→ n {T.val = n.val}
則分析句子2 ∧ 3 # 4其值爲( )。
A. 10
B. 21
C. 14
D. 24
4 以下說法不正確的是( )。
A. 賦值語句翻譯的主要任務是生成對表達式求值的三地址碼
B. 在增量翻譯方法中,gen( )函數不僅要構造出一個新的三地址指令,還要將它添加到
至今爲止已生成的指令序列之後
C. 如果一個賦值語句中涉及到數組元素,那麼將該語句翻譯成三地址碼時要解決的主要
問題是確定數組元素的存放地址,也就是數組元素的尋址
D. 數組元素的地址計算與數組的存儲方式無關
5 數組元素的地址由兩部分構成,一部分是基地址,另一部分是偏移量。
A. 對
B. 錯
6 基地址通過查符號表即可獲得。
A. 對
B. 錯
7 數組元素的偏移地址的計算只取決於數組的下標。
A. 對
B. 錯
8 設計數組引用的SDT的關鍵問題是:如何將地址計算公式和數組引用的文法關聯起來。
A. 對
B. 錯
中間代碼生成_3
1 關於布爾表達式的敘述,不正確的是( )。
A. 布爾常量是布爾表達式
B. 布爾常量不是布爾表達式
C. 關係表達式是布爾表達式
D. 將括號和邏輯運算符作用於布爾表達式得到一個新的布爾表達式
2 以下說法不正確的是( )。
A. 爲布爾表達式和控制流語句生成目標代碼時,關鍵問題之一是確定跳轉指令的目標標
號
B. 在生成跳轉指令時,就可以確定目標標號
C. 在生成跳轉指令時,目標標號還不能確定
D. 可以將標號的地址作爲繼承屬性傳遞到生成相關跳轉指令的地方,但是這樣的做法需
要再進行一趟處理,將標號和具體地址綁定起來
3 令非終結符B表示布爾表達式,爲B設置兩個繼承屬性true和false。B.true是一個地址,該地址中存放了當B爲真時控制流轉向的指令的標號;B.false也是一個地址,該地址中存放了當B爲假時控制流轉向的指令的標號,則下列SDT中不正確的是( )。
4 令非終結符B表示布爾表達式,爲B設置兩個繼承屬性true和false。B.true是一個地址,該地址中存放了當B爲真時控制流轉向的指令的標號;B.false也是一個地址,該地址中存放了當B爲假時控制流轉向的指令的標號,則下列SDT中不正確的是( )。
5 在分支和循環中會用到條件式,而用作條件式的通常是布爾表達式。
A. 對
B. 錯
6 在控制流語句的翻譯中,布爾表達式B被翻譯成由跳轉指令構成的跳轉代碼。
A. 對
B. 錯
7 邏輯運算符&&、|| 和 ! 會出現在代碼中。
A. 對
B. 錯
8在跳轉代碼中,邏輯運算符&&、|| 和 ! 被翻譯成跳轉指令。
A. 對
B. 錯
中間代碼生成_4
1 令非終結符B表示布爾表達式。在布爾表達式的回填技術中,爲非終結符B設置兩個綜合屬性:
B.truelist:指向一個包含跳轉指令的列表,這些指令最終獲得的目標標號就是當B爲真時控制流
應該轉向的指令的標號;B.falselist:指向一個包含跳轉指令的列表,這些指令最終獲得的目標
標號就是當B爲假時控制流應該轉向的指令的標號。則下列SDT中不正確的是()。
2 在下面的語句中,( )不需要回填技術。
A. 賦值語句
B. goto語句
C. 條件語句
D. 循環語句
3 四元式之間的聯繫是通過( )實現的。
A. 指示器
B. 臨時變量
C. 符號表
D. 程序變量
4 四元式表示法的優點爲 ( )。
A. 不便於優化處理,但便於表的更動
B. 不便於優化處理,但節省存儲空間
C. 便於優化處理,也便於表的更動
D. 便於表的更動,也節省存儲空間
5 在回填技術中,生成一個跳轉指令時,暫時不指定該跳轉指令的目標標號。
A. 對
B. 錯
6 在回填技術中,同一個列表list中的跳轉指令具有相同的目標標號。
A. 對
B. 錯
7 在回填技術中,同一個列表list中的跳轉指令可能具有不同的目標標號。
A. 對
B. 錯
8 在回填技術中,等到能夠確定正確的目標標號時,纔去填充指令的目標標號。
A. 對
B. 錯