日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

编译原理什么是移进规约冲突_编译原理复习题

發布時間:2024/4/19 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编译原理什么是移进规约冲突_编译原理复习题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

可以微信掃碼觀看

河南城建

《編譯原理》復習題丨楊海振整理丨20150521

一、單項選擇題

1.構造編譯程序應掌握 ? 。D

a. 源程序 ? ? ? ? ? ? ? ? ? ? ? ? ?b. 目標語言 ? ? ?

c. 編譯方法 ? ? ? ? ? ? ? ? ? ? ? ?d. 以上三項都是

2.編譯程序絕大多數時間花在 ? 上。D

a. 出錯處理 ? ? ? ? ? ? ? ? ? ? ? ?b. 詞法分析

c. 目標代碼生成 ? ? ? ? ? ? ? ? ? ?d. 表格管理

3.DFAM(見圖1-1)接受的字集為 ? 。D

a.以0開頭的二進制數組成的集合 ? ? ? ?

b. 以0結尾的二進制數組成的集合 ? ? ? ?

c. 含奇數個0的二進制數組成的集合 ? ? ? ? ? ? ? ?

d. 含偶數個0的二進制數組成的集合 ?

4.-a-(b*c/(c-d)+(-b)*a)的逆波蘭表示是 ? ? ? ? 。(@代表后綴式中的求負運算符) C

a. ?abc*cd-b@a*+/-@ ? ? ? ? ? ? ? ?b. ?a@bc*cd-b@a*+/-

c. ?a@bc*cd-/b@a*+- ? ? ? ? ? ? ? ?d. ?a@bc*/cd-b@a*+-

5.在規范歸約中,用 ? 來刻畫可歸約串。 ?B

a. 直接短語 ? ? ? ? ? ? ? ? ? ? ?b. 句柄 ?

c. 最左素短語 ? ? ? ? ? ? ? ? ? ?d. 素短語

6.若B為非終結符,則A→α·Bβ為 ? 項目。D

a. 歸約 ? ? ? ? ? ? ? ? ? ? ? ? b. 移進 ? ?

c. 接受 ? ? ? ? ? ? ? ? ? ? d. 待約

7.中間代碼生成時所依據的是 ? ? 。C

a. 語法規則 ? ? ? ? ? ? ? ? ? ?b. 詞法規則

c. 語義規則 ? ? ? ? ? ? ? ? ? ?d. 等價變換規則

8.有文法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其值為 ? ? ? ?。 C

a. 10 ? ? ? ?b. 34 ? ? ? ? ? c. 14 ? ? ? ? ? ? ? ? ?d.54

9.如果文法G是無二義的,則它的任何句子α ? 。 A

a. 最左推導和最右推導對應的語法樹必定相同

b. 最左推導和最右推導對應的語法樹可能不同

c. 最左推導和最右推導必定相同

d. 可能存在兩個不同的最左推導,但它們對應的語法樹相同

10.下列動作中,不是自下而上分析動作的是: ? 。B

a. 移進 ? ? ? ? ? ? ? ? ? ?b. 展開

c. 接受 ? ? ? ? ? ? ? ? ? ? ? ? d. 報錯

11.編譯程序是對 ? 。D

a. 匯編程序的翻譯 ?? ? ? ? ? ? ? b.高級語言程序的解釋執行

c. 機器語言的執行 ?? ? ? ? ? ? ? d.高級語言的翻譯

12.詞法分析器的輸出結果是 ? 。C

a. 單詞的種別編碼 ? ? ? ? ? ? ? ?b. 單詞在符號表中的位置

? c. 單詞的種別編碼和自身值 ? ? ? ?d. 單詞自身值

13.正規式M1和M2等價是指 ? 。C

a. M1和M2的狀態數相等

? b. M1和M2的有向邊條數相等

c. M1和M2所識別的語言集相等

d. M1和M2狀態數和有向邊條數相等

14.在規范歸約中,用 ? 來刻畫可歸約串。B

a. 直接短語 ? ? ? ? ? ? ? ? ? ? ?b. 句柄 ?

c. 最左素短語 ? ? ? ? ? ? ? ? ? ?d. 素短語

15.若a為終結符,則A→α·aβ為 ? 項目。B

a. 歸約 ? ? ? ? ? ? ? ? ? ? ? ? b. 移進

c. 接受 ? ? ? ? ? ? ? ? ? ? d. 待約

16.語法分析時所依據的是 ? ? 。A

a. 語法規則 ? ? ? ? ? ? ? ? ? ?b. 詞法規則

c. 語義規則 ? ? ? ? ? ? ? ? ? ?d. 等價變換規則

17.文法G:S→xSx|y所識別的語言是 ? 。C

a. xyx ? ? ? ? ? ? ? ? ? ? ? ? ? b. (xyx)*

c. xnyxn (n≥0) ? ? ? ? ? ? ? ? ? ?d. x*yx*

18.如果文法G是無二義的,則它的任何句子α ? 。 A

a. 最左推導和最右推導對應的語法樹必定相同

b. 最左推導和最右推導對應的語法樹可能不同

c. 最左推導和最右推導必定相同

d. 可能存在兩個不同的最左推導,但它們對應的語法樹相同

19.下列動作中,不是自上而下分析動作的是: ? 。C

a. 匹配 ? ? ? ? ? ? ? ? ? ? ?b. 展開

c. 移進 ? ? ? ? ? ? ? ? ? ? ? ? d. 報錯

20.詞法分析器的輸出結果是 ? 。C

a. 單詞的種別編碼 ? ? ? ? ? ? ? ? ?b. 單詞在符號表中的位置

? c. 單詞的種別編碼和自身值 ? ? ? ? ?d. 單詞自身值

21.-a-(b*c/(c-d)+(-b)*a)的逆波蘭表示是 ? ? ? ? 。(@代表后綴式中的求負運算符) C

a. ?abc*cd-b@a*+/-@ ? ? ? ? ? ? ? ? ? b. ?a@bc*cd-b@a*+/-

c. ?a@bc*cd-/b@a*+- ? ? ? ? ? ? ? ? ? d. ?a@bc*/cd-b@a*+-

22.在規范歸約中,用 ? 來刻畫可歸約串。 ?B

a. 直接短語 ? ? ? ? ? ? ? ? ? ? ?b. 句柄 ?

c. 最左素短語 ? ? ? ? ? ? ? ? ? ?d. 素短語

23.若B為非終結符,則A→α· 為 ? 項目。A

a. 歸約 ? ? ? ? ? ? ? ? ? ? ? ? b. 移進 ? ?

c. 接受 ? ? ? ? ? ? ? ? ? ? d. 待約

24.文法G:S→xSx|xS|y所識別的語言是 ? 。 ?A

a. xmyxn(m≥n≥0) ? ? ? ? ? ? ? ? b. (xyx)* ? ? ?

c. xnyxn(n≥0) ? ? ? ? ? ? ? ? ? ? d. x*yx*

25.有文法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其值為 ? ? ? ?。 C

a. 10 ? ? ? ? ? ? ? ? ? ? ? ? ?b. 21 ?

c. 14 ? ? ? ? ? ? ? ? ? ? ? ? ?d. 24

26.間接三元式表示法的優點為 ? 。 A

a. 采用間接碼表,便于優化處理 ?

b. 節省存儲空間,不便于表的修改

c. 便于優化處理,節省存儲空間 ?

d. 節省存儲空間,不便于優化處理

27.下列動作中,不是自上而下分析動作的是: ? 。C

a. 匹配 ? ? ? ? ? ? ? ? ? ?b. 展開

c. 接受 ? ? ? ? ? ? ? ? ? ? ? ?d. 報錯

28.同正規式(a|b)+等價的正規式是______B___________。

A.(a|b)* ? ? B.(a|b)(a|b)* ? ? C.(ab)*(ab) ? ? D.(a|b)|(a|b)*

29.稱有限自動機A1和A2等價是指_______D________。

A.A1和A2都是定義在一個字母表上的有限自動機

B.A1和A2狀態數和有向邊數相等

C.A1和A2狀態數或有向邊數相等

D.A1和A2所能識別的字符串集合相等

30.由文法的開始符號出發經過若干步(包括0步)推導產生的文法符號序列稱為______B________。

A.語言 ? ? B.句型 ? ? C.句子 ? ? D.句柄

31.在自上而下的語法分析中,應從 ? ?C ? ?開始分析。

A.句型 B.句子 C.文法開始符號 D.句柄

32.一個文法G,若________C____________,則稱它是LL(1)文法。

A.G中不含左遞歸 ? ? ? ? ? ? ? ? ? ? ? ? ? B.G無二義性 ? ?

C.G的LL(1)分析表中不含多重定義的條目 ? D.G中產生式不含左公因子

33.在規范歸約中,用______B______來刻畫可歸約串。

A.直接短語 ? ? B.句柄 ? ? C.素短語 ? ? D.短語

34.若a為終結符,則A→α·aβ為_______B______項目。

A.歸約 ? ? ? ? B.移進 ? ? ?C.接受 ? ? ? ? ?D.待約

35.中間代碼生成時所依據的是 ? ? C ? ? ?。

A.詞法規則 ? ? B.語法規則 ? ? C.語義規則 ? ? D.等價變換規則

36.文法G[S]及其語法制導翻譯定義如下:

產生式 語義動作

S’ → S print(S.num)

S → (L) S.num = L.num +1

S → a S.num = 0

L →L(1),S L.num = L(1).num + S.num

L →S L.num= S.num

若輸入為(a,(a)),且采用自底向上的分析方法,則輸出為 ? ? C ? ? ?。

A.0 B.1 C.2 D.4

37.四元式之間的聯系是通過_______B____________實現的。

A.指示器 ? ? B.臨時變量 ? ? C.符號表 ? ? D.程序變量

38.將編譯程序分成若干“遍”,是為了( B)。

A.提高程序的執行效率 ? ? ? ? ? ? B.使程序的結構更為清晰

C.利用有限的機器內存并提高機器的執行效率

D.利用有限的機器內存但降低了機器的執行效率

39.一個編譯程序在編譯時,大多數時間花在(D )上。

A.出錯處理 ? ? ? ? ? ? ? ? ? ? ? B.詞法分析

C.目標代碼生成 ? ? ? ? ? ? ? ? ? D.表格管理及處理

40. 下列符號串不可以由符號集S={a,b}上的正閉包運算產生的是:(A )

A. ε ? ? ? ? ? ? ? ? ? ? ? ? ? ? B. a

C. aa ? ? ? ? ? ? ? ? ? ? ? ? ? D. ab

41.詞法分析器的輸出是:(C )

A.單詞在符號表中的位置 ? ? ? ? ? B.單詞的自身值

C.單詞的自身值和單詞的種類碼 ? ? D.單詞的種類碼

42. 兩個DFA等價是指:(D )

A. 這兩個DFA的狀態數相同

B. 這兩個DFA的狀態數和有向弧條數都相等

C. 這兩個DFA的有向弧條數相等

D. 這兩個DFA接受的語言相同

43.生成中間代碼時所依據的是(C ?)。

A.語法規則 ? ? ? ? ? ? ? ? ? ? ?B.詞法規則 ? ?

C.語義規則 ? ? ? ? ? ? ? ? ? ? ?D.等價變換規則

44.表達式(┐a∨b)∧(c∨d)的逆波蘭表示為(B)。

A.┐ab∨∧cd∨ ? ? ? ? ? ? ?B.a┐b∨cd∨∧

C.ab∨┐cd∨∧ ? ? ? ? ? ? ?D.a┐b∨∧cd∨

45.有文法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其值為(C ?)。

A. 10 ? ? ? ? ? ? ? ? ? ? ? ? ? ? B. 21

C. 14 ? ? ? ? ? ? ? ? ? ? ? ? ? ? D. 24

46.表達式a+b+c+d的逆波蘭表示為(B )。

A.a+bc+d+ ? ? ? ? ? ? ? ? B.ab+c+d+

C.ab+cd++ ? ? ? ? ? ? ? ? D.abc+d++

47. 文法G[S]及其語法制導翻譯定義如下:

產生式 語義動作

S’ → S print(S.num)

S → (L) S.num = L.num +1

S → a ? ? S.num = 0

L →L(1),S ? ?L.num = L(1).num + S.num

L →S ? L.num = S.num

若輸入為(a,(a)),且采用自底向上的分析方法,則輸出為( C )。

A.0 ? ? ? ? ? ?B.1

C.2 ? ? ? ?D.4

48.若a為終結符,則A→α.aβ為(B )。

A.歸約項目 ? ? ? ? ? ? ? ? ?B.移進項目

C.待約項目 ? ? ? ? ? ? ? ? ?D.接受項目

49.若B為非終結符,則A→α.Bβ為(C )。

A.歸約項目 ? ? ? ? ? ? ? ? ?B.移進項目

C.待約項目 ? ? ? ? ? ? ? ? ?D.接受項目

50. 項目A→α.為(A )。

A.歸約項目 ? ? ? ? ? ? ? ? ?B.移進項目

C.待約項目 ? ? ? ? ? ? ? ? ?D.接受項目

51. 語法分析器的輸入是:(A )

A. Token序列 ? ? ? ? ? ? ? ?B. 源程序

C. 目標程序 ? ? ? ? ? ? ? ? D. 符號表

52. 在LR(0)的Action表中,如果某行中存在標記為“rj”的欄,則:(A )

A. 該行必定填滿“rj” ? ? ? ?B. 該行未必填滿“rj”

C. 其他行可能也有“rj” ? ? ?D. goto表中也可能有“rj”

53. LR分析過程中棧內存儲的是(A )。

A. 活前綴 ? ? ? ? ? ? ? ? ? B. 前綴

C. 歸約活前綴 ? ? ? ? ? ? ? D. 項目

54.文法G:S→ x xS | y 所識別的語言是(D )。

A.xxy* ? ? ?B.(xxy)* ? ? ?C.xx*yx ? ? D.(xx)*y

55.若狀態k含有項目“A→α.”,對任意非終結符a,都用規則“A→α”歸約的語法分析方法是(B )。

A.LALR分析法 ? ? B.LR(0)分析法

C.LR(1)分析法 ? ? D.SLR(1)分析法

56.在編譯過程中,如果遇到錯誤應該(C ?)。

A. 把錯誤理解成局部的錯誤 ? ?

B. 對錯誤在局部范圍內進行糾正,繼續向下分析

C. 當發現錯誤時,跳過錯誤所在的語法單位繼續分析下去

D. 當發現錯誤時立即停止編譯,待用戶改正錯誤后再繼續編譯

57.將編譯程序分成若干“遍”,是為了(B )

A.提高程序的執行效率 ? ? ? ? ? ? ? ? ? ? ?B.使程序的結構更為清晰

C.利用有限的機器內存并提高機器的執行效率

D.利用有限的機器內存但降低了機器的執行效率

58.下列符號串不可以由符號集S={a,b}上的正閉包運算產生的是:(A )

A. ε ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?B. a

C. aa ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?D. ab

59.表達式(┐a∨b)∧(e∨f)的逆波蘭表示為(B )。

A.┐ab∨∧ef∨ ? ? ? ? ? ? ? ? ? ? ?B.a┐b∨ef∨∧

C.ab∨┐ef∨∧ ? ? ? ? ? ? ? ? ? ? ? D.a┐b∨∧ef∨

60.有文法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}

則分析句子3∧ 3 # 4其值為(B ?)。

A. 10 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?B. 21

C. 14 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?D. 24

61.表達式a+b+c的逆波蘭表示為(B )。

A.a+bc+ ? ? ? ? ? ? ? ? ? ? ? B.ab+c+

C.+abc+ ? ? ? ? ? ? ? ? ? ? ? ? D.abc++

62. 文法G[S]及其語法制導翻譯定義如下:

產生式 語義動作

S’ → S print(S.num)

S → (L) S.num = L.num +1

S → a ? ?S.num = 0

L →L(1),S L.num = L(1).num + S.num

L →S ? L.num = S.num

若輸入為(a,a),且采用自底向上的分析方法,則輸出為( B ?)。

A.0 ? ? ? ?B.1

C.2 ? ? ? ?D.4

63. 在SLR(1)的Action表中,如果某行中存在標記為“rj”的欄,則:(B )

A. 該行必定填滿“rj” ? ? ? ?B. 該行未必填滿“rj”

C. 其他行可能也有“rj” ? ? ?D. goto表中也可能有“rj”

64. 一個(D )指明了在LR分析過程中的某個時刻所能看到產生式多大一部分。

A. 活前綴 ? ? ? ? ? ? ? ? ? B. 前綴

C. 歸約活前綴 ? ? ? ? ? ? ? D. 項目

65.文法G:S→ xS | y 所識別的語言是(D )。

A.xy* ? ? ? ? ? ? ? ? ? ? ?B.(xy)*

C.xx*yx ? ? ? ? ? ? ? ? ? ?D.x*y

66.若狀態k含有項目“A→α.”,且僅當輸入符號a∈FOLLOW(A)時,才用規則“A→α”歸約的語法分析方法是(D )。

A.LALR分析法 ? ? ? ? B.LR(0)分析法

C.LR(1)分析法 ? ? ? ? ? ? D.SLR(1)分析法

67.設有文法G[T]:

T→T*F|F

F→F↑P|P

P→(T)|a

該文法句型T*P↑(T*F)的句柄是下列符號串(C ? )

A.(T*F) ? B. T*F ? ? ? ?C. P ? ? ? ? D. P↑(T*F)

68.LR分析表中的轉移表(goto)是以(B ? )作為列標題的。

A.終結符 ? ? B.非終結符 C.終結符或非終結符 ? ?D.表示狀態的整形數

69.編譯程序的語法分析器必須輸出的信息是( ?A ? )

A.語法錯誤信息 B.語法規則信息 C.語法分析過程 D.語句序列

70.下列項目中為可移進項目的是( ?C ? ? )。

A.E′→E. ? ? B.L→. ? ?C.L→-.L ? D.F→L*F.

71.有一語法指導定義如下:

S→bAb ? ? ? ?print ?“1”

A→(B ? ? ? print ?“2”

A→a ? ? ? ? ?print ?“3”

B→aA) ? ? ? ?print ?“4”

若輸入序列為b(a(a(aa)))b,且采用自底向上的分析方法,則輸出序列為( ? ?B ? ? )

A.32224441 B.34242421 C.12424243 D.34442212

72.同正規式(a|b)*等價的正規式為(D ? )

A.(a|b)+ B.a*|b* C.(ab)* D.(a*|b*)+

73.詞法分析器的加工對象是(C ? )

A.中間代碼 B.單詞 C.源程序 D.元程序

74.在自下而上的語法分析中,應從( B ? ?)開始分析。

A.句型 B.句子 C.文法開始符號 D.句柄

75.賦值語句X:=-(a+b)/(c-d)-(a+b*c)的逆波蘭表示是( ? C ? ? ?)

  • Xab+cd-/-bc*a+-:=

  • Xab+/cd-bc*a+--:=

  • Xab+-cd-/ a bc* +-:=

  • Xab+cd-/abc* +--:=

  • 76.設有文法G[T]:

    T→T*F|F

    F→F↑P|P

    P→(T)|a

    該文法句型T*F↑(T*F)的句柄是下列符號串(B ? )

    A.(T*F) ? B. T*F ? ? ? ?C. P ? ? ? ? D. P↑(T*F)

    77.LR分析表中的動作表(action)是以( D ?)作為列標題的。

    A.終結符 ? ? B.非終結符 C.終結符或非終結符 ? ?D.終結符和結束符$

    78.下列項目中為可歸約項目的是( B ? ? ?)。

    A.E′→.E ? ? B.L→. ? ?C.L→-.L ? D.F→L*.F

    79.有一語法指導定義如下,其中+表示符號連接運算:

    S→B ? ? ? ?print ?B.vers

    B→a ? ? ? ? B.vers=a

    B→b ? ? ? ? ? B.vers=b

    B→Ba ? ? ? ? B.vers=a+B.vers

    B→Bb ? ? ? ? B.vers=b+B.vers

    若輸入序列為abab,且采用自底向上的分析方法,則輸出序列為( ? D ? ? ?)

    A.aabb B.abab C.bbaa D.baba

    80.同正規式(a|b)*等價的正規式為(D ? )

    A.(a|b)+ B.a*|b* C.(ab)* D.(a*|b*)+

    共 4 ? 頁第 ? 1 ?頁

    81.詞法分析器的加工對象是(C ? )

    A.中間代碼 B.單詞 C.源程序 D.元程序

    82.在自上而下的語法分析中,應從( C ? ?)開始分析。

    A.句型 B.句子 C.文法開始符號 D.句柄

    83.賦值語句X:=-(a+b)/(c-d)-(a+b*c)的逆波蘭表示是( ? C ? ? ?)

  • Xab+cd-/-bc*a+-:=

  • Xab+/cd-bc*a+--:=

  • Xab+-cd-/ a bc* +-:=

  • Xab+cd-/abc* +--:=

  • 84.編譯程序不能檢查、處理的錯誤是程序中的_______B_________。

    A.靜態語義檢查 ? ? ? ?B.動態語義檢查 ? ?C.語法錯誤 ? ? D.詞法錯誤

    85.在LR(0)的ACTION子表中,如果某一行中有標記為“rj”的欄,則_______C__________。

    A.該行既有rj又有Sj ? ? ? ? ? ? ?B.其它行也有rj

    C.該行一定填滿rj ? ? ? ? ? ? ? ? D.該行未填滿rj

    86.同正規式(a|b)+等價的正規式是_________B________________。

    A.(a|b)* ? B.(a|b)(a|b)* ? C.(ab)*(ab) ? D.(a|b)|(a|b)*

    87.在規范歸約中,用______B______來刻畫可歸約串。

    A.直接短語 ? ? B.句柄 ? ? ?C.素短語 ? ? ? ?D.短語

    88.若a為終結符,則A→α·aβ為_______B______項目。

    A.歸約 ? ? ? ? B.移進 ? ? ?C.接受 ? ? ? ? ?D.待約

    89.一個文法G,若________C____________,則稱它是LL(1)文法。

    A.G中不含左遞歸 ? ? ? ? ? ? ? ? ? ? ? ? ?B.G無二義性 ? ?

    C.G的LL(1)分析表中不含多重定義的條目 ?D.G中產生式不含左公因子

    90.LR分析器的核心部分是一張分析表,該表由_______D___________組成。

    A.ACTION表 ? ? ?B.GOTO表 ? ?C.預測分析表 ? ?D.ACTION表和GOTO表

    91.構造編譯程序應該掌握_______D__________。

    A.源程序 ? ? B.目標語言 ? ? C.編譯方法 ? ? ? ?D.以上三項都是

    92.在遞歸子程序方法中,若文法存在左遞歸,則會使分析過程產生___D__________。

    A.回溯 ? ? ? B.非法調用 ? ? C.有限次調用 ? ? ?D.無限循環

    93.最左簡單子樹的葉結點,自左至右排列組成句型的________C____________。

    A.短語 ? ? ? B.句型 ? ? ? ? C.句柄 ? ? ? ? ? ?D.間接短語

    94.如果一個正規式所代表的集合是無窮的,則它必含有的運算是__________C___________。

    A.連接運算“·” ?B.或運算“|” C.閉包運算“*” ? D.括號“(”和“)”

    95.同正規式a*b*等價的文法是________C___________。

    A.G1:S→aS|bS|ε ? B.G2:S→aSb|ε C.G3:S→aS|Sb|ε ? D.G4:S→abS|ε

    96.由文法的開始符號出發經過若干步(包括0步)推導產生的文法符號序列稱為______B________。

    A.語言 ? ?B.句型 ? ?C.句子 ? ?D.句柄

    97.四元式之間的聯系是通過_______B____________實現的。

    A.指示器 ? B.臨時變量 ? ? C.符號表 ? ?D.程序變量

    98.編譯程序的語法分析器必須輸出的信息是________A____________。

    A.語法錯誤信息 ? ? B.語法規則信息 ? ?C.語法分析過程 ? D.語句序列

    99.LL(1)分析法中“1”的含義是在輸入串中查看一個輸入符號,其目的是_______C___________。

    A.確定最左推導 ? ? ? ? ? ? ? ? ? B.確定句柄 ? ?

    C.確定使用哪一個產生式進行展開 ? D.確定是否推導

    100.稱正規式R1和R2等價是指__________C_______________。

    A.R1和R2都是定義在同一個字母表上的正規式

    B.R1和R2使用的運算符相同

    C.R1和R2代表同一個正規集

    D.R1和R2代表不同的正規集

    二、填空題

    概述部分:

    1.編譯程序的開發常常采用自編譯、 交叉編譯 、 ?自展 和移植等技術實現。

    2.解釋程序和編譯程序的區別在于是否生成目標程序 。

    3.如果編譯程序生成的目標程序是匯編語言程序,則源程序的執行分為3個階段: 編譯階段 、 匯編階段 和 運行階段 。

    4.編譯程序工作過程中,第一階段輸入是 源程序,最后階段的輸出為 目標程序 ?。

    5.編譯過程通常可分為5個階段詞法分析階段、 語法分析階段、 語義分析和中間代碼生成階段、優化階段和目標代碼生成階段。

    6.如果編譯階段生成的目標程序是某特定計算機系統的機器代碼程序,則源程序的執行分為兩大階段: 編譯階段 和 ?運行階段 。

    7.對編譯程序而言,輸入數據是 ? ? 源程序 ? ? ,輸出結果是 ? ? 目標程序 ? ?。

    8.貫穿于編譯程始終的工作有 ? ? 符號表處理 ? ? ?和出錯處理。

    詞法分析部分:

    1.詞法分析的工作是將源程序中的 字符串 變換成 ?單詞符號流 的過程,所遵循的是語言的 構詞規則 。

    2.若兩個正規式所表示的 正規集 相同,則認為二者是等價的。

    3.若兩個正規式所表示的正規集相同,則認為二者是 等價 ?的。

    4.正規式R1和R2等價是指_______表示相同的正規集 ? ? ? ? ? ? ? ? 。

    5.詞法分析器的輸入是源程序字符串,輸出結構是 二元式(單詞種別,單詞自身的值) 。詞法分析所遵循的是語言的 構詞 ?規則。

    6.確定的有限自動機是一個五元組,包含的五個元分別是:狀態集合、字母表、初態、終態集、狀態轉換函數集合。

    7.有限自動機是更一般化的狀態轉換圖,它分為 確定的有限自動機DFA ?和 非確定的有限自動機NFA 兩種。

    8.NFA和DFA的區別主要有兩點:其一是 NFA可以有若干個初始狀態,而DFA僅有一個初始狀態 ;其二是 NFA的狀態轉換函數f不是單值函數,而是一個多值函數 。

    語法分析部分:(基本概念、LL(1)、LR(0)、SLR(1)、遞歸下降子程序)

  • 語法分析的方法通常分為兩類: 自上而下分析方法 和 ?自下而上分析方法 。

  • 2.文法中的終結符集和非終結符集的交集是 空集 ?。

    3.一個句型的最左直接短語稱為該句型的___句柄________________。

    4.規范歸約是 最右推導 的逆過程。

    5.自下而上語法分析中分析器的動作有_移進 ? 、____歸約 ?、__接受_ ?、__報錯 __。

    6.自上而下語法分析中分析器的動作有___匹配終結符____、__展開非終結符_、__分析成功、報錯__。

    7.常用的自上而下語法分析方法有遞歸下降子程序方法和預測分析表方法(LL(1)方法)。

    8.常用的自下而上語法分析方法有算符優先分析法和LR分析法。

    9.一個LL(1)分析器由 ?一張LL(1)分析表(預測分析表) ?、 ?一個先進后出分析棧 ? 和一個 控制程序(表驅動程序)組成。

    10.一個LR分析器由 分析棧 、 ?分析表 和總控程序三個部分組成。

    11.LR(0)分析法的名字中,“L”表示自左至右分析輸入串,“R”表示 采用最右推導的逆過程即最左歸約。“0”表示 向右查看0個字符 。

    12.LL(1)分析法中,第一個L的含義是 從左到右掃描輸入串 ;第二個L的含義是 分析過程中采用最左推導 ;“1”的含義是 只需向右查看一個符號就可以決定如何推導 。

    13.LR(1)文法的含義是:L表明_____自左至右掃描輸入串__,R表明___采用最右推導的逆過程(最左歸約)方法進行分析__。

    14.一個上下文無關文法是LL(1)文法的充分必要條件是:對每一個非終結符A的任何兩個不同產生式A→α|β,有下面的條件成立:(1) ? ? FIRST(α)∩FIRST(β)= ? ? ? ;(2)假若,則有 FIRST(α) ∩ FOLLOW(A) = ? ? ?。

    15.對于LL(1)文法中的任何產生式A→α|β,則需要滿足__First(_α)∩First(β)=Φ ? ? ?、

    _若_β=>*ε,則_First(_α) ∩__Follow(A)=_Φ_。

    16.LR分析器的核心部分是一張分析表,該表包括 動作(ACTION)表和 ?狀態轉換(GOTO)表 等兩個子表。

    17.關于非終結符A的直接左遞歸產生式:A→Aα|β,其中α、β是任意的符號串且β不以A開頭,則可以將A的產生式改寫為右遞歸的形式為: A→βA’ , A’→αA’|ε 。

    18.在消除回溯,提取公共左因子時,關于A的產生式A→ δβ1 | δβ2 | … | δβi i+1 | …| βj,可以改寫為: A → δA’| βi+1 | …| βj,A’ →β1| … |βi ?。

    19.設G[S]是一文法,如果符號串x是從識別符號推導出來的,即有x,則稱x是文法G[S]的____句型__,若x僅由終結符號組成,即,則稱x為文法G[S]的__句子 。

    20.已知文法G[S]:

    S→eT|RT ? ? ? ?T→DR|ε ?R→dR|ε ? ?D→a|bd

    求FIRST(S)={e,d,a,b,ε}______;FOLLOW(D)=_{d,#} ? 。

    語義處理部分:

    1.文法符號的屬性有兩種,一種稱為 繼承屬性 ,另一種稱為 綜合屬性 。

    2.編譯過程中,常見的中間語言形式有逆波蘭表示法、 ?抽象語法樹 、 三元式、 ?四元式 。

    3.語法制導翻譯的方法就是為每個產生式配上一個 翻譯子程序(語義動作或語義子程序) ,并在語法分析的同時執行它們。

    4.編譯過程中,常見的中間語言形式有逆波蘭表示法、 ?抽象語法樹 、 三元式、 ?四元式 。

    5.詞法分析器的輸入是 源程序字符串 ,輸出結構是 二元式(單詞種別,單詞自身的值) 。

    6.文法符號的屬性有兩種,一種稱為 繼承屬性 ,另一種稱為 綜合屬性 。

    7.四元式之間的聯系是通過 臨時變量 實現的。

    8.在屬性文法中,終結符只有____綜合 ? 屬性。

    9.編譯過程中,常見的中間語言形式有 ?逆波蘭式 、 抽象語法樹 、 ?三元式 、 ?四元式 。

    10.語法制導翻譯的方法就是為每個產生式配上一個 翻譯子程序(語義動作或語義子程序) ,并在語法分析的同時執行它們。

    11.目前較常見的語言語義的描述形式是__屬性文法______,并使用__語法制導翻譯 ? 方法完成對語法成分的翻譯。

    三、判斷題

    1.設r和s分別為正規式,則有L(r|s)= L(r) | L(s).。(× )

    2.一個文法的所有句型的集合形成該文法所能接受的語言。(× )

    3.語法分析之所以采用上下文無關文法是因為它的描述能力最強。(× )

    4.由于LR(0)分析表構造簡單,所以它的描述能力強,適用面寬;LR(1)分析表因構造復雜而描述能力弱,適用面窄。(× )

    5.逆波蘭表示法表示表達式時無需使用括號。(√ )

    6.自動機M和M’的狀態個數不同,則二者必不等價。(× )

    7.LL(1)文法一定不含左遞歸和二義性。(√ )

    8.所有LR分析器的總控程序都是一樣的,只是分析表各有不同。(√ )

    9.無論是三元式表示還是間接三元式表示的中間代碼,其三元式在三元式表中的位置一旦確定就很難改變。(√ )

    10.三地址語句類似于匯編語言代碼,可以看成中間代碼的一種抽象形式。(√ )

    11.最左推導也被稱為規范推導。(× ?)

    12.運算對象排列的先后順序在后綴式和中綴式中不同。(× ?)

    13.出現在移進-歸約分析器棧中的內容被稱為文法G的活前綴。(√ ?)

    14.LR方法可以分析含有左遞歸的文法。( √ )

    15.三元式的編號具有雙重含義,既代表此三元式,又代表三元式存放的結果。(√ ?)

    16.語義規則中的屬性有兩種:綜合屬性與繼承屬性。(√ ?)

    17.移進-歸約分析器的格局中棧的內容一般是文法符號與狀態。( √ )

    18.由于遞歸下降子程序方法較LL(1)方法簡單,因此它要求文法不必是LL(1)文法。(× ?)

    19.四元式的編號具有雙重含義,既代表此四元式,又代表四元式存放的結果。(× )

    20.用高級語言編寫的源程序必須經過編譯,產生目標程序后才能運行。( × ? )

    21.源程序到目標程序的變換是等價變換,即兩者結構不同,但語義是一致的。( √ ? )

    22.對于任何一個正規式e,都存在一個DFA A,使得L(e)=L(A)。( √ ? ? )

    23.最小化的DFA,它的狀態數最小。( ? √ ? ?)

    24.NFA的確定化算法具有消除ε邊的功能。( ? √ ? ?)

    25.每個非終結符產生的終結符號串都是該語言的子集。( ?× ? ?)

    26.一個語言的文法是不唯一的。( ?√ ? ?)

    27.語法錯誤校正的目的是為了把錯誤改正過來。( ? × ? )

    28.源程序和目標程序是等價關系。( ? √ ? )

    29.編譯程序中錯誤處理的任務是對檢查出的錯誤進行修改。( ?× ? )

    30.使用有限自動機可以實現單詞的識別。( ?√ ? ?)

    31.一個非確定的有限自動機NFA可以通過多條路徑識別同一個符號串。( ?√ ? ?)

    32.最小化的DFA所識別接受的正規集最小。( ? × ? )

    33.一個語言(如C語言)的句子是有窮的。( ? ?× )

    34.LL(1)方法又稱為預測分析方法。( √ ? ? )

    35.一個LL(1)文法是無二義和無回溯方法。( ?√ ? ?)

    36.語法分析器可以檢查出程序中的所有錯誤。( ?× ? ?)

    37.LR分析法是自上而下的語法分析方法。( ? × ? )

    三、多項選擇題

    1. 編譯器的各個階段的工作都涉及到(AE )

    A. 表格處理 ? ? ? ? ? ? ? ? ? ? ?B. 詞法分析

    C. 語法分析 ? ? ? ? ? ? ? ? ? ? ?D. 語義分析 ?

    E. 出錯處理

    2. 令S={a,b},則S上的符號串的全體可用下面的正規式表示。(ABE )

    A. (a|b)* ? ? ? ? ? ? ? ? ? ? ? ? ?B. (a*|b*)*

    C. (a|b)+ ? ? ? ? ? ? ? ? ? ? ? ? ?D. (ab)*

    E. (a*b*)*

    3. 自上而下的分析方法有:(AD )

    A. 遞歸下降分析法 ? ? ? ? ? ? ? ?B. LR(0)分析法

    C. LALR(1)分析法 ? ? ? ? ? ? ?D. LL(1)分析法

    E. SLR(1)分析法

    4. 文法G:G[S]:S→CD Ab→bA

      C→aCA Ba→aB

    ? ? ? ? C→bCB Bb→bB

      AD→aD C→ε

      BD→bD D→ε

      Aa→bD

    是(ABE )。

    A. 0型文法 ? ? ? ? ? ? ? ? ? ? ?B. 1型文法

    C. 2型文法 ? ? ? ? ? ? ? ? ? ? ?D.3型文法 ?

    E. 上下文有關文法

    5. 對LR分析表的構造,有可能存在的動作沖突有:(AD )

    A. 移進/歸約沖突 ? ? ? ? ? ? ? ?B. 移進/移進沖突

    C. 歸約沖突 ? ? ? ? ? ? ? ? ? ? D. 歸約/歸約沖突

    E. 移進沖突

    6. 一個編譯器可能有的階段為(ABCDE )

    A. 詞法分析 ? ? ? ? ? ? ? ? ? ? B. 語法分析

    C. 語義分析 ? ? ? ? ? ? ? ? ? ? D. 中間代碼生成

    E. 目標代碼生成

    7 令S={a,b},則S上的所有以b開頭,后跟若干個(可為0個)ab的符號串的全體可用下面的正規式表示。(AB )

    A.b (ab)* ? ? ? ? ? ? ? ? ? ? ? ? B. (ba)*b

    C. b(a|b)+ ? ? ? ? ? ? ? ? ? ? ? ? D. (ba)+b

    E. b (a|b)*

    8. 自下而上的分析方法有:(BCE )

    A. 遞歸下降分析法 ? ? ? ? ? ? B. LR(0)分析法

    C. LALR(1)分析法 ? ? ? ? ? ?D. LL(1)分析法

    E. SLR(1)分析法

    9. 一般來說,編譯器可分為前端和后端,下列編譯階段可被劃分為編譯的前端的有:(ABCDE )

    A. 詞法分析 ? ? B. 語法分析

    C. 語義分析 ? ? D. 中間代碼生成 ?E. 中間代碼優化

    10.令S={a,b},則S上的符號串的全體可用下面的正規式表示。(ABE )

    A. (a|b)* ? B. (a*|b*)*

    C. (a|b)+ ?D. (ab)* ? E. (a*b*)*

    11.下列符號串是符號集S={a,b}上的正規式的有:( ABCDE)

    A. ε ? B. a ?C. ab D. (ab|a)(ab|a)

    E. ab|ab

    12.正規式服從的代數規律有:(ABDE )

    A. “或”運算服從交換律 ?B. “或”運算服從結合律

    C. “連接”運算服從交換律D. “連接”運算服從結合律

    E. “連接”運算可對“或”運算進行分配

    13.令S={a,b},則S上的所有以b開頭,后跟若干個(可為0個)ab的符號串的全體可用下面的正規式表示。(AB )

    A.b (ab)* ?B. (ba)*b ? C. b(a|b)+

    D. (ba)+b ? E. b (a|b)*

    14.一個LR分析器包括:(ADE )

    A. 一個總控程序 B. 一個項目集

    C. 一個活前綴 ?D. 一個分析棧

    E. 一張分析表

    15.LR分析器的核心部分是一張分析表,該表包括(DE )等子表。

    A. LL(1)分析表 B. LR(1)分析表

    C. SLR(1)分析表D. Action表

    E. goto表

    16.Action表中的每一項Action[S,a]所表示的動作可能為:(ABCD )

    A. 移進 ?B. 接受 C. 歸約

    D. 出錯 ?E. 待約

    五.簡答題

    1.構造正規表達式a(aa)*bb(bb)*a(aa)*的NFA。

    解:

    2.構造正規表達式((a|b)*|aa)*b的NFA。

    解:

    2.令文法G[N]為 ? ? ? G[N]: N→D|ND

    D→0|1|2|3|4|5|6|7|8|9

    給出句子568的最左、最右推導。

    解:最左推導:NND NDD DDD 5DD 56D 568

    最右推導:NND N8 ?ND8N68 D68 568

    3.給出字母表Σ={a,b}上的同時只有奇數個a和奇數個b的所有串的集合的正規文法;

    解: G[S]:S→aA|bB

    A→aS|bC|b

    B→bS|aC|a

    C→bA|aB|ε

    4.給定文法:S→(L)| a

    ? ? ? ? ? ? L→L,S | S

    ?請書寫語義規則,求輸出句子中每一個a的括號嵌套深度。

    解:

    用繼承屬性depth表示嵌套深度,則

    S’→S S.depth = 0

    S →(L) L.depth = S.depth + 1

    S →a print(S.depth)

    L →L(1),S L(1).depth= L.depth; S.depth = L.depth

    L →S S.depth = L.depth

    5.表達式a*b-c-d$e$f-g-h*i中,運算符的優先級由高到低依次為-、*、$,且均為右結合,請寫出相應的后綴式。

    解: abcd- -*efgh- -i*$$ ?

    6.判斷文法G[S]:S → BA

    A ?→ BS | d

    B ?→ aA| bS | c

    是否為LL(1)文法.

    解:對于該文法求其FIRST集如下:

    FIRST(S) = {a, b, c}; FIRST(A) = {a,b, c, d}; FIRST(B) = {a, b, c}。

    求其FOLLOW集如下:

    FOLLOW(S) = {a, b, c, d, #};FOLLOW(A) = {a, b, c, d, #}; FOLLOW(B) = {a, b, c, d, #}。

    由A → BS | d 得:

    FIRST(BS) ∩ FIRST(‘d’)= {a, b, c} ∩ ozvdkddzhkzd = Φ

    由B → aA| bS | c 得

    FIRST(aA) ∩ FIRST(bS) ∩FIRST(c) = {a} ∩{b}∩ {c} =Φ

    由于文法G[S]不存在形如β→ε的產生式,故無需求解形如FIRST(α)∩ FOLLOW(A)的值,也即文法G[S]是一個LL(1)文法。

    7.對于文法G[E]:E→E+T | T

    T→T+P | P

    P→(E) | i

    寫出句型P+T+(E+i)的所有短語、直接短語、句柄。

    解:短語:P、P+T、i、E+i、(E+i)、P+T+(E+i);//T+(E+i)

    直接短語:P、i;

    句柄:P;

    8.已知文法G[A]:A→aABl|a

    B→Bb|d

    試給出與G[A]等價的LL(1)文法G[A′];

    解:G[A′]:A→aA′

    A′→ABl | ε

    B→dB′

    B′→bB′| ε

    9.將下面的語句翻譯成四元式序列:

    if (x>y) m= 1;

    else ?m=0;

    解:1(j>,x,y,3)

    2 (j,_,_,5)

    3 (=,1,_,m)

    4 (j,_,_,6)

    5 (=,0,_,m)

    6:

    10.將以下DFA最小化。(8分)

    解:

    11.設M=({x,y},{a,b}, f, x, {y})為一非確定的有限自動機,其中f定義如下:

    f(x,a)={x,y} ? ? ? f{x,b}={y}

    f(y,a)=Φ ? ? ? ? f{y,b}={x,y}

    試構造相應的確定有限自動機M′。(12分)

    解:對照自動機的定義M=(S,Σ,f,So,Z),由f的定義可知f(x,a)、f(y,b)均為多值函數,因此M是一非確定有限自動機。

    先畫出NFAM相應的狀態圖,如下圖所示。

    用子集法構造狀態轉換矩陣,如下表所示。

    將轉換矩陣中的所有子集重新命名,形成下表所示的狀態轉換矩陣,即得到

    M′=({0,1,2},{a,b},f,0,{1,2}),

    M′狀態轉換圖如下圖所示。

    (注意:本題由于集合的命名和先后順序不同,可能最終結果不同。)

    12.試構造下述文法的SLR(1)分析表。(13分)

    G[A]: A→aABl|a

    B→Bb|d

    解:拓廣文法

    (0)S→A

    (1)A→aABl

    (2)A→a

    (3)B→Bb

    (4)B→d

    First(A)={a}follow(A)={#,d}

    First(B)=ozvdkddzhkzdfollow(B)={l}

    SLR(1)分析表如下:

    a

    b

    d

    l

    #

    A

    B

    0

    S2

    1

    1

    ACC

    2

    S2

    R2

    R2

    3

    3

    S4

    5

    4

    R4

    5

    S7

    S6

    6

    R1

    R1

    7

    R3

    13.將下面的語句翻譯成四元式序列:(7分)

    if (x>y) m= 1;

    else ?m=x+y;

    解:1(j>,x,y,3)

    2 (j,_,_,5)

    3 (=,1,_,m)

    4 (j,_,_,7)

    5 (+,x,y,T1)

    6 (=, T1,_,m)

    7:

    14. 試構造下述文法的LL(1)分析表。(15分)

    G[S]: S→(L)|a

    L→L,S|S

    解:消除左遞歸:

    G(S): S ? (L) | a

    L ? SL’

    L’ ? , SL’| ε

    構造FIRST集,如下:

    (1)FIRST(S)= {(, a}

    (2)FIRST(L)= {(, a}

    (3)FIRST(L’)= {,, ε}

    構造FOLLOW集如下:

    (1)FOLLOW(S)= {#, ,, )}

    (2)FOLLOW(L)= {)}

    (3)FOLLOW(L’)= {)}

    LL(1)分析表

    (

    )

    a

    ,

    #

    S

    S ? (L)

    S ? a

    L

    L ? SL’

    L ? SL’

    L’

    L’ ? ε

    L’ ? ,SL’

    15.判斷文法G[S]:S → BA

    A ?→ BS | d

    B ?→ aA| bS | c

    是否為LL(1)文法.

    解:對于該文法求其FIRST集如下:

    FIRST(S) = {a, b, c}; FIRST(A) = {a,b, c, d}; FIRST(B) = {a, b, c}。

    求其FOLLOW集如下:

    FOLLOW(S) = {a, b, c, d, #};FOLLOW(A) = {a, b, c, d, #}; FOLLOW(B) = {a, b, c, d, #}。

    由A → BS | d 得:

    FIRST(BS) ∩ FIRST(‘d’)= {a, b, c} ∩ ozvdkddzhkzd = Φ

    由B → aA| bS | c 得

    FIRST(aA) ∩ FIRST(bS) ∩FIRST(c) = {a} ∩{b}∩ {c} =Φ

    由于文法G[S]不存在形如β→ε的產生式,故無需求解形如FIRST(α)∩ FOLLOW(A)的值,也即文法G[S]是一個LL(1)文法。

    16.對于文法G[E]:E→E+T | T

    T→T+P | P

    P→(E) | i

    寫出句型P+T+(E+i)的所有短語、直接短語、句柄。

    解:短語:P、i、E+i、(E+i)、T+(E+i)、P+T+(E+i);

    直接短語:P、i;

    句柄:P;

    17.已知文法G[S]:S→aSbS|bSaS|ε

    試證明G[S]是二義文法

    證明:該文法產生的語言是a的個數和b的個數相等的串的集合。該文法二義,例如句子abab有兩種不同的最左推導。

    SaSbSabSabaSbSababSabab

    SaSbSabSaSbSabaSbSababSabab

    18.將下面的語句翻譯成四元式序列:

    while(a

    if (c>d) x=y+z

    解:100(j

    101 (j,_,_,107)

    102 (j>,c,d,104)

    103 (j,_,_,106)

    104 (+,y ,z ,t)

    105 (=,t ,_ ,x)

    106 (j,_,_,100)

    107:

    19.構造正規表達式a(aa)*bb(bb)*a的最小化的確定有限自動機M′。

    解: 先畫出正規式相應的NFAM狀態圖,如下圖所示。

    用子集法構造狀態轉換矩陣,如下表所示。

    I

    Ia

    Ib

    {x}

    {1}

    -

    {1}

    {2}

    {3}

    {2}

    {1}

    -

    {3}

    -

    {4}

    {4}

    {Y}

    {5}

    {5}

    -

    {4}

    {Y}

    -

    -

    將狀態分為終態集{Y}和非終態集{X,1,2,3,4,5}

    因為{X,1,2,3,4,5}a={1,2,1,_,Y,_}

    所以非終態集分為{X,1,2},{3,5},{4}

    因為{X,1,2}b={_,3,_},所以分為

    最后得到集合{X,2},{1},{3,5},{4},{Y}重新命名為1,2,3,4,5得到最小化的DFAM′狀態轉換矩陣和狀態轉換圖如下圖所示。

    I

    Ia

    Ib

    1

    2

    _

    2

    1

    3

    3

    -

    4

    4

    5

    3

    5

    -

    _

    (注意:本題由于集合的命名和先后順序不同,可能最終結果不同。)

    20.試構造下述文法的SLR(1)分析表。

    G[A]: A→aABl|a

    B→Bb|d

    解:拓廣文法

    (0)S→A

    (1)A→aABl

    (2)A→a

    (3)B→Bb

    (4)B→d

    First(A)={a}follow(A)={#,d}

    First(B)=ozvdkddzhkzdfollow(B)={l}

    SLR(1)分析表如下:

    ACTION

    GOTO

    a

    b

    d

    l

    #

    A

    B

    0

    S2

    1

    1

    ACC

    2

    S2

    R2

    R2

    3

    3

    S4

    5

    4

    R4

    5

    S7

    S6

    6

    R1

    R1

    7

    R3

    21.畫出編譯程序的總體結構圖,簡述各部分的主要功能。

    解:編譯程序的總體框圖如下所示:

    (1)詞法分析器,又稱掃描器,它接受輸入的源程序,對源程序進行詞法分析,識別出一個個單詞符號,其輸出結果是二元式(單詞種別,單詞自身的值)流。

    (2)語法分析器,對單詞符號串進行語法分析(根據語法規則進行推導或歸約),識別出程序中的各類語法單位,最終判斷輸入串是否構成語法上正確的句子。

    (3)語義分析及中間代碼生成器,按照語義規則對語法分析器歸約出(或推導出)的語法單位進行語義分析并把它們翻譯成一定形式的中間代碼。編譯程序可以根據不同的需要選擇不同的中間代碼形式,有的編譯程序甚至沒有中間代碼形式,而直接生成目標代碼。

    (4)優化器對中間代碼進行優化處理。一般最初生成的中間代碼執行效率都比較低,因此要做中間代碼的優化,其過程實際上是對中間代碼進行等價替換,使程序在執行時能更快,并占用更小的空間。

    (5)目標代碼生成器,把中間代碼翻譯成目標程序。中間代碼一般是一種與機器無關的表示形式,只有把它再翻譯成與機器硬件直接相關的機器能識別的語言,即目標程序,才能在機器上運行。

    (6)表格管理模塊保持一系列的表格,登記源程序的各類信息和編譯各階段的進展狀況。編譯程序各個階段所產生的中間結果都記錄在表格中,所需要的信息也大多從表格中獲取,整個編譯過程都在不斷和表格打交道。

    (7)出錯處理程序對出現在源程序中的錯誤進行處理。如果源程序有錯誤,編譯程序應設法發現錯誤,把有關錯誤信息報告給用戶。編譯程序的各個階段都有可能發現錯誤,出錯處理程序要對發現的錯誤進行處理、記錄,并反映給用戶。

    22.對于文法G(S)

    S (L) | aS | a

    L L, S | S

    (1) 畫出句型(S,(a))的語法樹。

    (2) 寫出上述句型的所有短語、直接短語和句柄。

    解:

    (1) 句型(S,(a))的語法樹如下圖所示:

    (2) 從語法樹中可以找到(3分)短語:a; (a); ?S; ?S,(a); ?(S, (a))

    直接短語:a; ?S

    句柄:S

    23.構造一文法,使其描述的語言L= {ω |ω (a,b)*,且ω中含有相同個數的ab}

    解:

    S ε| aA|bB

    A b| bS| aAA

    B a| aS| bBB

    24.分別給出表達式(a*(b-c))+d的逆波蘭表示和四元式表示。

    解:(1)逆波蘭式:abc-*@d+ 其中使用@代表一目減運算 ?

    (2)四元式: ?

    (-, b, c, T1)

    (*, a, T1,T2)

    (@, T2, _, T3)

    (+, T3,d, T4)

    25.把下列語句翻譯為四元式序列:

    while (A > B)

    if (C > D)

    X = Y * Z

    else

    X = Y + Z

    解:

    (1) (j>, A, B, 3)

    (2) (j, _, _, 11)

    (3) (j>, C, D, 5)

    (4) (j, _, _, 8)

    (5) (*, Y, Z, T1)

    (6) (=, T1,_, X)

    (7) (j, _, _, 1)

    (8) (+, Y, Z, T2)

    (9) (=, T2,_, X)

    (10) (j, _, _, 1)

    (11)

    26構造一個DFA它接受Σ= {0,1}上所有滿足如下條件的字符串每個1后面都有0直接跟在右邊。

    :(1)0*(0|10)*0*或者(0|10)* ?

    (2)

    NFA ? (2分)

    子集法確定化

    • I

      I0

      I1

      {X, 0, 1, 3, Y}

      {0, 1, 3, Y}

      {2}

      {0, 1, 3, Y}

      {0, 1, 3, Y}

      {2}

      {2}

      {1, 3, Y}

      -

      {1, 3, Y}

      {1, 3, Y}

      {2}

    重新命名狀態,即得:

    • S

      0

      1

      1

      2

      3

      2

      2

      3

      3

      4

      -

      4

      4

      3

    最小化

    首先分為終態集和非終態集{3} {1, 2, 4} 因為10= 2 20 = 2 40 = 4狀態均屬于集合{1,2, 4},所以對于輸入符號0不能區分開124三個狀態;11= 3 21 = 3 41 =3狀態均屬于集合{3},所以對于輸入符號1也不能區分開124三個狀態;因此最終的狀態劃分即為:{3} {1, 2, 4},其對應的DFA如下圖所示:

    27已知文法G(S)

    SS*aP|aP| *aP

    P+aP|+a

    (1) 將文法G(S)改寫為LL(1)文法G(S)

    (2) 寫出文法G(S)的預測分析表。

    解:

    (1)消除左遞歸,文法變為: ?

    SaPS|*aPS

    S’→*aPS| ε

    P+aP|+a

    提取公共左因子文法變為G(S) ?

    SaPS|*aPS

    S’→*aPS|ε

    P+aP

    P’→P| ε

    (2)計算每個非終結符的FIRST集和FOLLOW

    FIRST(S) = {a, *} FOLLOW(S) = {#}

    FIRST(S) = {*, ε} FOLLOW(S)= {#}

    FIRST(P) = {+} FOLLOW(P) = {*, #}

    FIRST(P) = {+, ε} FOLLOW(P)= {*, #}

    構造該文法的預測分析表如下:(5分)

    • *

      +

      a

      #

      S

      S*aPS

      SaPS

      S

      S’→ *aP

      S’→ ε

      P

      P+aP

      P

      P’→ε

      P’→P

      P’→ε

    28.已知文法G(S)

    SaS | bS | a

    (1) 構造識別該文法所產生的活前綴的DFA

    (2) 判斷該文法是LR(0)還是SLR(1),并構造所屬文法的LR分析表。

    解:

    (1)將文法G(S)拓廣為G(S)

    (0) S’→S

    (1) SaS

    (2) SbS

    (3) Sa

    識別該文法所產生的活前綴的DFA

    (2)在狀態I2存在移近-歸約沖突,因此該文法不是LR(0)文法。

    計算SFOLLOW集合:

    FOLLOW(S)= {#}

    I2中的沖突用FOLLOW集合可以解決,所以該文法是SLR(1)文法。

    構造SLR(1)分析表如下:

        • 狀態

          ACTION

          GOTO

          a

          b

          #

          S

          0

          s2

          s3

          1

          1

          acc

          2

          s2

          s3

          r3

          4

          3

          s2

          s3

          5

          4

          r1

          5

          r2

    29.將下圖所示的非確定有限自動機(NFA)變換成等價的確定有限自動機(DFA)。其中,X為初態,Y為終態。

    【解】 用子集法將NFA確定化,如圖所示。

    確定化的DFA如下圖所示:

    30.對正規式(a|b)*abb構造其等價的NFA。

    【解】

    31.下面的文法產生0和1的串,即二進制的正整數,請給出決定每個二進制數的值(十進制形式)的語法制導定義。

    【解】定義值屬性為.val,翻譯方案如下:

    B ? B10 { B.val = B1.val ?2 }

    B ? B11 { B.val = B1.val ?2 + 1 }

    B ? 1 { B.val= 1 }

    B ? 0 { B.val= 0 }

    32.把算術表達式?(a+ b) ? (c + d)+ (e+ f) 翻譯成等價的四元式序列(序號從0開始)。

    【解】

    0(+,a,b ,T1)

    1(uminus,T1,-,T2)

    2(+,c,d , T3)

    3(*,T2,T3,T4)

    4(+,e,f,T5)

    5(+,T4,T5,T6)

    33.設有文法G[S]:

    S→a|(T)|?

    T→T,S|S

    試給出句子(a,a,a)的最左推導。

    【解】(1)(a,a,a)的最左推導

    S=>(T)=>(T,S)=>(T,S,S)=>(S,S,S)=>(a,S,S)=>(a,a,S)=>(a,a,a)

    34.已知文法G:

    S → ?( ?L ?| ?a

    L → ?S ?, ?L ?| ?)

    判斷是不是LL(1)文法,如果是請構造文法G 的預測分析表,如果不是請說明理由。

    【解】

    1)求各非終結符的FISRT 集和FOLLOW 集:

    = { (, a )

    FIRST(L) = { a }? FIRST(S) = {(, ), a }

    FOLLOW(S) = {, ?# }

    FOLLOW(L) = FOLLOW(S) ={ , ? # }

    FIRST(( ?L)∩{a}=Φ

    FIRST(S ?, ?L)∩{)}=Φ

    所以是LL(1)文法

    2)預測分析表:

    • (

      a

      ,

      }

      #

      S

      S→ ( L

      S→ a

      L

      L→ S , L

      L→ S , L

      L → )

    35.文法

    S ?A a | b A c | d c | b d a

    A ? d


    構造識別活前綴的DFA。請根據這個DFA來判斷該文法是不是SLR(1)文法并說明理由。

    【解】

    Follow(S)={#}

    Follow(A)={a,c}

    I4存在沖突且Follow(A)∩{c}={c}

    I7存在沖突且Follow(A)∩{a}={a}

    所以不是SLR(1)文法

    36.將下圖所示的確定有限自動機(DFA)最小化。其中,X為初態,Y為終態。

    【解】 先劃分為終態集{Y}和非終態集I={X,1,2,3}

    X面對輸入符號b時下一狀態屬于I,而1,2,3面對輸入符號b時下一狀態屬于{Y},故劃分為{X}、{1,2,3}

    非終態2和非終態3面對輸入符號a的下一狀態相同,而1不同,即最簡狀態{X}、{1}、{2,3}、{Y}。按順序重新命名為0、1、2、3,則得到最簡DFA,

    37.請畫出識別無符號十進制整數的狀態轉換圖

    【解】

    38.設有文法G[S]:

    S→S*S|S+S|(S)|i

    該文法是否為二義文法,并說明理由?

    【解】該文法是二義文法,因為該文法存在句子i*i+i,該句子有兩棵不同的語法樹如圖所示。

    39.程序的文法如下:

    P → D

    D → D;D| id : T | proc id; D; S

    寫一語法制導定義,打印該程序一共聲明了多少個id

    【解】 屬性num表示id個數

    P→D print(D.num)

    D→D(1);D(2) D.num= D(1).num + D(2).num

    D→id : T D.num = 1

    D→proc id; D(1); S D.num = D(1).num + 1

    例:procid; proc id; id : T; S; S(從語法樹分析入手)

    (注意:本例只是幫助學生理解題意,不是答案部分)

    40.把下列語句翻譯為四元式序列(四元式序號從1開始):

    ? ? ? while(A > B)

    if (C > D)

    X = Y * Z

    ? ? ? ? ? else

    X = Y + Z

    【解】(1)(j>, A, B, 3)

    ? (2)(j, _, _, 11)

    (3) (j>, C, D, 5)

    (4) (j, _, _, 8)

    (5) (*, Y, Z, T1)

    (6) (=, T1, _, X)

    (7) (j, _, _, 1)

    (8) (+, Y, Z, T2)

    (9) (=, T2, _, X)

    (10) (j, _, _, 1)

    (11)

    41.構造下面文法的LL(1)分析表。

    G[D]:D ?TL

    T?int | real

    L?id R

    R?, id R | ?

    【解】FIRST(T)={int real } FOLLOW(T)={id }

    FIRST(L)={ id } ? ? ? FOLLOW(L)={ #}

    FIRST(R)={ , ? ?} ? FOLLOW(R)={ #}

    FIRST(D)={ int real} FOLLOW(D)={#}

    因為FIRST(int)∩FIRST(real)=Φ

    FIRST(, idR)∩FOLLOW(R)=Φ

    所以是LL(1)文法,LL(1)分析表如下:

    int

    real

    id

    ,

    #

    D

    D ? TL

    D ? TL

    T

    T ? int

    T ? real

    L

    L ? id R

    R

    R ? , id R

    R ? ?

    42.給定文法S→aS|bS|a,下面是拓廣文法和識別該文法所產生的活前綴的DFA。判斷該文法是否是SLR(1)文法:如果是構造其SLR(1)分析表,如果不是請說明理由。

    (1)將文法G(S)拓廣為G(S’):

    (0)S’→S

    (1)S→aS

    (2)S→bS

    (3)S→a

    (2)識別該文法所產生的活前綴的DFA如圖1所示。

    【解】注意到狀態I1存在“移進-歸納”沖突,計算S的FOLLOW集合:

    FOLLOW(S)={#}

    {a}∩{b}∩FOLLOW(R)=Φ

    可以采用SLR沖突消解法,得到如下的SLR分析表。

    從分析表可以看出,表中沒有沖突項,所以該文法是SLR(1)文法。

    表1SLR分析表

    ACTION

    GOTO

    狀態

    a

    b

    #

    S

    0

    S1

    S2

    3

    1

    S1

    S2

    r3

    4

    2

    S1

    S2

    5

    3

    acc

    4

    r1

    5

    r2

    43.給出表達式-a*b+b*c+d/e的語法樹和三元式序列。

    答:語法樹 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 三元式

    44.證明下面文法S→AaAb|BbBa A→ε ? ?B→εLL(1)文法,但不是SLR(1)文法。

    證明:

    (1)first(AaAb)={a} ?first(BbBb)={b},有first(AaAb)first(BbBb)=Φ

    所以根據LL(1)文法的定義,該文法是LL(1)文法。(2分)

    (2)為了構造識別活前綴的DFA,初態集包含如下四個項目:S→.AaAb ?S→.BbBa ?A→. ? ?B→.

    但該項目中有兩個可歸約項目:A→. ? B→.,產生歸約-歸約沖突,而follow(A)={ab}follow(B)={ab},有follow(A)follow(B)Φ,所以使用向前看一個終結符的方法不能解決此沖突,所以該文法不是SLR(1)文法。(3分)

    45現有文法G[S]

    S→a|ε|(T)

    T→T,S|S

    請給出句子(a,(a,a))的最左、最右推導,并指出最右推導中每一個句型的句柄。

    答:最左推導:S=〉(T)=〉(T,S)=〉(S,S)=〉(a,S)=〉(a,(T))=〉(a,(T,S))=〉(a,(S,S))=〉(a,(a,S))=〉(a,(a,a)) ?

    最右推導:

    S=〉(T)=〉(T,S)=〉(T,(T))=〉(T,(T,S))=〉(T,(T,a))=〉(T,(S,a))=〉(T,(a,a))=〉(S,(a,a))=〉(a,(a,a))

    句型的句柄是為加下劃線的部分

    46.將下圖的DFA最小化。

    答:初始劃分:II={{0,1,2},{3,4}}(1分)

    (1)考查{0,1,2},1和2接受a,b后都轉向相同的狀態,且接受b后轉向終態,而0接受b后轉向非終態2,所以0與1,2可分,IInew={{0},{1,2},{3,4}}(1分)

    (2)考查{3,4},接受a,b后都轉向相同的狀態,所以3,4不可分。IInew={{0},{1,2},{3,4}}(1分)

    將1,2合并用1代表,3,4合并用3代表,最終的最小化DFA如下:

    47設有如下文法:P→D

    D→DD|idT|procidD

    T→real|integer

    給出一個語法制導定義,打印該程序一共聲明了多少個id

    答:

      • 文法

        語法制導定義

        P→D

        Print(D.num) ? ? ? ? ?

        D→D1D2

        D.num=D1.num+D2.num

        D→idT

        D.num=1

        D→proc idD1

        D.num=D1.num+1

        T→real

        T→integer

    48識別文法G的活前綴的DFA如下圖所示,補充完成狀態I2I5,然后根據該圖構造SLR(1)分析表。

    G(0) P'→P (1) PaPb (2) P→Q (3) Q→bQc

    (4) ?Q→bSc (5) S→Sa (6) Sa

    I2 :P→a.Pb

    P→.aPb

    P→.Q

    Q→.bQc

    Q→.bSc

    I5 :Q→b.Qc

    Q→b.Sc

    Q→.bQc

    Q→.bSc

    S→.Sa

    S→.a

    I2I5分別如下圖所示:

    Follow(P)={b$} 1

    Follow(Q)={bc$} 1

    Follow(S)={ca} ?1

    SLR(1)分析表:

    Action

    GOTO

    a

    b

    c

    $

    P

    Q

    S

    0

    S2

    S5

    1

    3

    1

    Acc

    2

    S2

    S5

    4

    3

    3

    R2

    R2

    4

    S7

    5

    S6

    S5

    9

    10

    6

    R6

    R6

    7

    R1

    R1

    8

    R3

    R3

    R3

    9

    S8

    10

    S12

    S11

    11

    R4

    R4

    R4

    12

    R5

    R5

    49.給出表達式(a+b)*(c+d/e)的語法樹和四元式序列。

    :語法樹如下: ? ? ? ? ? ? ? ? ? ? ? ? ?四元式序列:

    ? ? ? ?

    50.構造文法S→AaAb|BbBa A→ε ? ?B→ε,的預測分析表

    答:first(S)={ab},First(AaAb)={a}First(BbBa)={b}

    Follow(A)={ab}

    Follow(B)={ab} ?

      • a

        b

        $

        S

        S→AaAb

        S→BbBa

        A

        A→ε

        A→ε

        B

        B→ε

        B→ε

    51.寫出C語言標識符集(字母或下劃線開頭的由字母、數字、下劃線構成的串)的正規式。

    解答:用D表示數字0-9,用L表示字母a-z|A-Z,則C語言標識符的正規式為:

    (L|_)(L|D|_)*

    52.有一語法制導定義如下,其中+表示符號連接運算:

    S→B ? ? ? ?print ?B.vers

    B→a ? ? ? ? B.vers=a

    B→b ? ? ? ? ?B.vers=b

    B→Ba ? ? ? B.vers=a+B.vers

    B→Bb ? ? ? ? B.vers=b+B.vers

    若輸入序列為abab,且采用自底向上的分析方法,則輸出序列為(__________baba_________)。

    用分析樹表示求解過程。 ?

    53.假設第一個四元式的序號是100,寫出布爾表達式a<b∨c∧d>e的四元式序列。

    100 (j)

    101 (j, _, _ , 102)

    102 (jnz,c, _ ,104)

    103 (j_,_ ,q)

    104 (j>d,e, 106)

    105 (j_, _ , q ?)

    T:106

    ……

    F:q

    …….

    54設有如下文法

    G[E]E→EWT|T

    T→T/F|F

    F→(E)|a|b|c

    W→+|-

    證明符號串a/(b-c)是句子。

    解答:有推導E?T?T/F?F/F?a/F?a/(E)?a/(EWT)?a/(TWT)?a/(FWT)?a/(bWT)?a/(b-T)?a/(b-c),即從文法開始符號E能夠推導出a/(b-c),所以a/(b-c)是文法G[E]的句子。

    55.對于下列文法

    G[S]S→Sb|bA

    A→aA|a

    (1)構造一個與G等價的LL(1)文法G′

    (2)對于文法G′,構造相應的LL(1)分析表。

    解:

    (1)(5分)G′S→bAS′

    S′→b S′|ε

    A→aA′

    A′→A|ε ?

    (2)(1分)FIRST(S)={b }

    FIRST(S)={ bε}

    FIRST(A)={a}

    FIRST(A)={aε}

    FOLLOW(S)={#}

    FOLLOW(S′)={#}

    FOLLOW(A)={b#}

    FOLLOW(A)=(b#)

    LL(1)分析表:

      • a

        b

        #

        S

        S→bAS′

        S′

        S′→b S′

        S′→ε

        A

        A→aA′

        A

        A′→A

        A′→ε

        A′→ε

    56.構造下述文法的SLR(1)分析表。

    G[S]S→(A)

    A→ABB|B

    B→b

    解:拓廣文法:(1分)

    S′→S ? ?(0)

    S→(A) (1)

    A→ABB ? ?(2)

    A→B ? ? ?(3)

    B→b ? ? ?(4)

    識別活前綴的DFA:(4分)

    FIRST集和follow集:(1分)

    First(S)={(,c} ? ? ? ? follow( S)={#}

    First(A)={b} ? ? ? ? ? ? follow(A)={b,)}

    First(B)={b} ? ? ? ? ? ? follow(B)={b,)}

    SLR(1)分析表:(4分)

    ACTION

    GOTO

    (

    )

    b

    #

    S

    A

    B

    0

    S2

    1

    1

    Acc

    2

    S4

    3

    5

    3

    S6

    S4

    7

    4

    R4

    R4

    5

    R3

    R3

    6

    R1

    7

    S4

    8

    8

    R2

    R2

    57有一語法制導定義如下:

    S→bAb ? ? ? ?print ?“1”

    A→(B ? ? ? print ?“2”

    A→a ? ? ? ? ?print ?“3”

    B→aA) ? ? ? print ?“4”

    若輸入序列為b(a(a(aa)))b,且采用自下而上的分析方法,則輸出序列為(__34242421____)。

    58.寫出賦值語句X=-(a+b)/(c-d)-(a+b*c)的逆波蘭表示。

    Xab+-cd-/abc*+-=

    59為文法

    G[S]S→(L)|a

    L→LS|S

    寫一語法制導定義,它輸出句子中括號嵌套的最大層次數。

    解:使用num屬性描述括號的嵌套最大層次數

    S?→S ? ? ? ? ? ? print(S.num)

    S→(L) ? ? ? ? S.num=L.num+1

    S→a ? ? ? ? ? ? ?S.num=0

    L→L(1)S ? ? ? ? L.num=if L(1).num>S.numthen ?L(1).numelse ?S.num

    L→S ? ? ? ? ? ? ? L.num= S.num

    每個式子1分。

    60設有文法G[S]:

    S→aAcB|Bd

    A→AaB|c

    B→bScA|b

    該文法句型aAcbBdcc的句柄是_______Bd_____________

    612.已知文法G[S]如下:構造該文法的LR(0)分析表。

    G[S]S→BB

    B→aB|b

    解:拓廣文法:(1分)

    (0)S?→S

    (1)S→BB

    (2)B→aB

    (3)B→b

    識別活前綴的DFA如下:

    LR(0)分析表如下:

    狀態

    Action

    Goto

    a

    b

    #

    S

    B

    0

    S3

    S4

    1

    2

    1

    acc

    2

    S3

    S4

    5

    3

    S3

    S4

    6

    4

    R3

    R3

    R3

    5

    R1

    R1

    R1

    6

    R2

    R2

    R2

    43/ 43

    總結

    以上是生活随笔為你收集整理的编译原理什么是移进规约冲突_编译原理复习题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。