编译原理last集c语言,编译原理作业集-第七章.doc
編譯原理作業集-第七章
第七章 語義分析和中間代碼產生
本章要點
1. 中間語言,各種常見中間語言形式;
2. 說明語句賦值語句布爾表達式控制語句的翻譯;
3. 過程調用的處理;
4. 類型檢查;
本章目標
掌握和理解中間語言,各種常見中間語言形式類型檢查等內容。
本章重點
1.中間代碼的幾種形式,它們之間的相互轉換:四元式、三元式、逆波蘭表示3.賦值語句算術表達式、布爾表達式的翻譯及其中間代碼格式4.各種控制流語句的翻譯及其中間代碼格式5.過程調用的中間代碼格式6.類型檢查本章難點
2. 類型系統和類型檢查;
作業題
一、單項選擇題:
1. 布爾表達式計算時可以采用某種優化措施,比如A and B用if-then-else可解釋為。
a. if A then true else Bb. if A then B else false;
c. if A then false else true; d. if A then true else false;
2. 為了便于優化處理,三地址代碼可以表示成a. 三元式 b. 四元式 c. 后綴式 d. 間接三元式
3. 使用三元式是為了:
便于代碼優化處理 b. 避免把臨時變量填入符號表
節省存儲代碼的空間 提高訪問代碼的速度
4. if x relop y then L表示成四元式為 。
a. (relop,x,y,L);b. (relop,L,x,y);c. (relop,x,L,y);d. (L,x,y,relop);
8. 在編譯程序中, 不是常見的中間語言形式。
a.波蘭式;b. 三元式;c. 四元式; d. 抽象語法樹;
9. 在編譯程序中安排中間代碼生成的目的是________。
a. 便于提高編譯效率; b. 便于提高分析的正確性;
c. 便于代碼優化和目標程序的移植;d.便于提高編譯速度;
10. 按照教材中的約定,下面 不是類型表達式:
a. boolean;b. type-error;c. real;d. DAG;
11. 一個Pascal函數
function f ( a, b:char ) :↑integer;
……
其作用域類型是 :
a. char×integer;b. char×char;c. char×pointer(integer);d. integer×integer;
12. 因為標識符可用于多種情況,比如常量標識符、變量標識符、過程標識符等等。因此,在符號表中為了給出各個符號的標志,常給標識符引入一個屬性kind,然后在相應產生式的語義動作中添加給kind屬性賦值的語句。比如,在在產生式D(id:T的語義動作中添加賦值語句id.kind= 。
a. VAR; b. CONSTANT;c. PROC;d. FUNC;
13. 下面 情況下,編譯器需要創建一張新的符號表。
a. 過程調用語句;b. 標號說明語句;c. 數組說明語句;d.記錄說明語句;
14. 函數function f(a,b:char):↑integer;…
所以f函數的類型表達式為:
a. char×char→pointer(integer); b. char×char→pointer;
c. char×char→integer; d. char×char→integer (pointer)
15. 如果一個語言的編譯器能保證編譯通過的程序,在運行時不會出現類型錯誤,則稱該語言是 。
a. 靜態的;b. 強類型的;c. 動態的;d. 良類型的;
一.答案:1. b;2. d;3. b;4. d;5. c;6. c.;7. a;8. a;9. c;10. d;11. b;12. a;13. d;14. a;15. b;
二、填空題:
1. 語法分析是依據語言的語法規則進行的,中間代碼產生是依據語言的規則進行的。
2. 多目運算x:=y[i]的三元式表示為兩部分:和。
3. 生成三地址代碼時,臨時變量的名字對應抽象語法樹的。
4. 一個類型表達式或者是基本類型,或者由施加于其它類型表達式組成。
5.。tblptr和offset分別保存尚未處理完的過程的 和它們的offset,這兩個棧頂的元素分別是正在處理的過程的的符號表指針和 。
7. 在一些pascal的實現中,如果說明中出現了沒有名字的類型表達式,編譯器這樣處理:建立一個 來和每個聲明的變量標識符相聯系。
8. 賦值語句a:=b*-c+b*-c的后綴式為 。
9. 多目運算
總結
以上是生活随笔為你收集整理的编译原理last集c语言,编译原理作业集-第七章.doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: initsdk.exe是什么进程 作用是
- 下一篇: 表字段注释放在哪_橱柜台面6种材质优缺点