編譯原理-期末
第一章
編譯原理的基礎問答
- 設 A機器 上有 語言L 的編譯程序,可以用它來編制B機器上的語言'的編譯程序,試用 T形圖 進行表示。
- 通過自展完成C語言的編寫,試描述這個過程。
- 畫出編譯程序的總體結構圖,簡要說明每個模塊的功能
- 如何理解“單詞是程序設計語言中具有獨立意義的最小語法單位”這句話?
- 設
∑={aa,ab,bb,ba},求字符串aaaaabbbba的所有前綴的集合、后綴的集合、真前綴的集合、真后綴的
集合。
部分答案
- 畫出編譯程序的總體結構圖,簡要說明每個模塊的功能
![alt text]()
- 如何理解“單詞是程序設計語言中具有獨立意義的最小語法單位”這句話?
單詞是由字母所組成的,而字母往往是有限的,難以表達更加復雜和高級的含義;
所以由字母依照一定的文法所組成的單詞就承擔了語義表達的作用,而在單詞之上則是句子,能夠表達更加復雜的語義。
所以相較之下,單詞就是具有獨立意義的最小語法單位了。
第二章
- 設文法G有如下產生式:
G:A → B=E
B → C|D
C → a|b|c
D → m[1]|m[2]lm[3]
E → COC|COD|DOC|DOD
O → +|-
現有句子b=a+b,m[2]=b+m[1],試完成下列題目。
(1)分別給出每個句子的3個不同推導,要求有最左推導和最右推導。
(2)給出上面6個不同推導各自對應的歸約。
(3)試畫出相應的語法樹。
(4)指出每個句子中的短語、簡單短語和句柄。
第三章
- 在文法中,終結符號和非終結符號各起什么作用?各用來表示什么類型的對象?有什么不同的特點?
- 什么是語法制導定義?什么是屬性文法?什么是翻譯模式?它們之間的關系是什么?
- 畫出有窮狀態自動機的狀態轉換圖,分別識別下列文法生成的語言。
\[\begin{align}
&(1)G_1:\\
&S → +R|-R|0R|1R|2R|3R|4R\\
&R → 0R|1R|2R|3R|4R|0|1|2|3|4|0D|1D|2D|3D|4D\\
&D → .B\\
&B → 0B|1B|2B|3B|4B|0|1|2|3|4\\
&(2)G_2:\\
&S → as|aB|bB|bS\\
&B → -C|.C\\
&C → cC|dC|eC|fC|e|0E|1E|2E|3E|4E\\
&E → -A|+A\\
&A → 0A|1A|2A|3A|4A|0|1|2|3|4\\
&(3)G_3:\\
&S → Sa|Aa|Bb\\
&A → Ba|a\\
&B → Abb\\
&(4)G_4:\\
&S → aAa\\
&A → aA bB a\\
&B → bB|b\\
\end{align}
\]
第四章
- 考慮簡化了的C聲明的以下文法:
<declaration><type><var_list>
<pe>→int float
<var_list>id,<var_list>id
(1)在該文法中提取左因子。
(2)為改造后文法的語法變量構造 FIRST 集和 FOLL0OW 集。
(3)說明改造后的文法是 LL(1) 文法。
(4)為改造后的文法構造 LL(1) 分析表。
(5)給出輸入串 intx,y,z 所對應的 LL(1) 分析動作。
第五章
- 在自頂向下的分析方法中,既不允許文法中出現直接左遞歸,又不允許出現間接左遞歸,為什么在自底向上的分析方法中沒有這一要求?
- 設有如下文法G:
\[S\rightarrow a|^|(T)
T\rightarrow T,S|S
\]
(1)給出 (a,(a,a)) 和 (((a,a),,(a)),a) 的最左推導和最右推導。
(2)指出 (((a,a),^,(a)),a) 的規范歸約及每一步的句柄。根據該規范歸約,給出“移進-歸約”的過程,
并給出自底向上構造其語法樹的過程。
(3)求其 FIRSTOP 和 LASTOP 。
(4)計算其優先關系,并判斷其是否為算符優先文法。
(5)計算其優先函數。
- 設有如下文法G:
\[<S>\rightarrow<S>(<S>)
<S>\rightarrow a
\]
(1)計算該文法的 LR(0) 項目集規范族,構造識別其所有規范句型活前綴的DFA。
(2)該文法是 LR(0) 文法嗎?請說明理由。
(3)構造該文法的 SLR(1) 分析表。
(4)給出識別句子 a(a(a)) 的自底向上語法分析的過程。
- 設有如下文法G:
\[<S>\rightarrow <A>
<A>\rightarrow <B><A>|\epsilon
<B>\rightarrow a<B>|b
\]
(1)試用識別活前綴的方式給出文法G的 LR(1) 項目集。
(2)構造 G 的 LR(1) 分析表。
(3)給出輸入符號串w=abab的自底向上語法分析過程。
第六章
- 給定如下翻譯模式:
A→aB {print"0";}
A→c {print"1";}
B→Ab {print"2";}
假設在按某一產生式進行歸約時將立即執行括號中的動作,試問當輸人為aabb時,打印出的字符串是什么?
- 綜合屬性和繼承屬性有什么區別?為什么將固有屬性歸入綜合屬性,這樣歸類的依據是什么?

浙公網安備 33010602011771號