編譯原理習題(含答案)——11-14中間代碼生成——MOOC哈爾濱工業大學陳鄞配套_學習通_慕課堂

全套答案見我的《編譯原理》專欄


中間代碼生成_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. 錯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章