編譯原理 第二章複習題 上下文無關文法和形式語言

第二章複習題

單選

  1. 對於文法G[Z],已知u是句型,則判斷(D)是正確的。
    A 只要使用規範推導,無論如何一定可以從Z推導出u
    B 只要依據產生式進行規範歸約,則u一定可以歸約成Z
    C 上面的A和B都是對的
    D 上面的A和B都是錯的

  2. 由“非終結符–>符號串”這種產生式構成的文法是(C)。
    A 0型語法
    B 1型文法
    C 2型文法
    D 3型文法

  3. 二義文法是指(D)。
    A 對應於兩棵不同語法樹的文法
    B 對應於兩種不同推導的文法
    C 文法中任何一個非終結符,都存在以它爲左部的兩個不同產生式
    D A、B、C都是錯的

  4. 文法G[Z]和語言L(G[Z])存在如下關係:(C)。
    A 一一對應,一個文法對應唯一的語言,並且,一個語言對應唯一的文法
    B 一個語言對應唯一的文法,反之則不然
    C 一個文法對應唯一的語言,反之則不然
    D 若爲非二義文法,則C正確;若爲二義文法,則一個文法不對應唯一的語言

  5. 關於短語和句柄,正確的論述是(B)。
    A 短語就是句柄
    B 直接短語纔可能是句柄
    C 最左短語一定是句柄
    D 最右短語一定是句柄

  6. 若一個文法是遞歸的,則它產生的句子個數是(A)。
    A 無窮個
    B 可能有限個,可能無窮個
    C 有限個

  7. 正則文法(A)二義性的。
    A 可以是
    B 一定不是
    C 一定是

  8. 一個語言的文法是(B)。
    A 唯一的
    B 不唯一的
    C 個數有限的
    D 無數個

  9. 文法識別符號經過人一步推導得到的結果是(A)。
    A 句型
    B 句柄
    C 句子
    D 短語

  10. 文法分爲四種類型:0型文法、1型文法、2型文法、3型文法,其中3型文法是(B)。
    A 短語文法
    B 正規文法
    C 上下文有關文法
    D 上下文無關文法

  11. 在編譯中產生語法樹是爲了(A)。
    A 語法分析
    B 語義分析
    C 詞法分析
    D 目標代碼生成

  12. 一個上下文無關文法包含四個部分,一組非終結符,一組終結符,一個開始符號以及一組(C)。
    A 句子
    B 句型
    C 產生式
    D 單詞

  13. 自下而上的語法分析中,應從(C)開始分析。
    A 開始符號
    B 句柄
    C 句子
    D 句型

多選

  1. 如果一個文法是二義文法,必然有(ABCD)的現象存在。
    A 文法的某一個句子存在兩顆或兩棵以上的語法樹
    B 對於文法的某一個句子,存在兩種或兩種以上的最左(最右)推導
    C 對於文法的某一個句子,存在兩種或兩種以上的最左(最右)規約
    D 在進行規約時,文法的某些規範句柄不唯一

  2. 給定語法A–>bAcc|ε,下面的符號串中爲該文法的句子是(AE)。
    A bcc
    B bcbc
    C bcbcc
    D bccbcc
    E bbccc

簡答

1.寫出C語言和Java語言的輸入字母表。

  • C語言:0~9數字,大小寫英文字母,鍵盤上可見的字符
  • Java語言:Unicode可以包括的所有字符

2.文法GG

NDNDN\to D|ND D0123456789D\to 0|1|2|3|4|5|6|7|8|9
(1)GG的語言是什麼?

  • GG的語言是:0~9的數字組成的任意非空串
    L(G)={xx{0,1,2,3,4,5,6,7,8,9}+}L(G)=\{x|x\in \{0,1,2,3,4,5,6,7,8,9\}^{+}\}

(2)給出句子0127、34、568的最左推導1和最右推導。

  • 以句子0127爲例
    最左推導:

NNDN\Rightarrow ND NDD\Rightarrow NDD NDDD\Rightarrow NDDD DDDD\Rightarrow DDDD 0DDD\Rightarrow 0DDD 01DD\Rightarrow 01DD 012D\Rightarrow 012D 0127\Rightarrow 0127

理解:NNDN\Rightarrow ND是對NN中的最左非終結符NN進行了替換,替換成了NDND
NDNDDND\Rightarrow NDD是對NDND中的最左非終結符NN進行了替換,替換成了NDND
後面的同理。

最右推導:
NNDN\Rightarrow ND N7\Rightarrow N7 ND7\Rightarrow ND7 N27\Rightarrow N27 ND27\Rightarrow ND27 N127\Rightarrow N127 D127\Rightarrow D127 0127\Rightarrow 0127

理解:NNDN\Rightarrow ND是對NN中的最右非終結符NN進行了替換,替換成了NDND
NDN7ND\Rightarrow N7是對NDND中的最右非終結符DD進行了替換,替換成了77
後面的同理。

3.寫一文法,使其語言是奇數集。要求:不以0打頭。

  • 只有一位數的情況:D13579D\to 1|3|5|7|9
  • 複雜的情況:分三部分
    末尾:以1|3|5|7|9結尾,D13579D\to 1|3|5|7|9
    開頭:除了0的任意數字,B2468DB\to 2|4|6|8|D
    中間:空或者任意數字串,CCAεC\to CA|\varepsilon
  • 最終答案:文法G(N)G(N)爲:NBCDDN\to BCD|D D13579D\to 1|3|5|7|9 B2468DB\to 2|4|6|8|D CCAεC\to CA|\varepsilon A0BA\to 0|B

4.證明文法:SiSeSiSiS\to iSeS|iS|i是二義的2

首先:找到此文法對應的一個句子iiieiiiiei
然後:構造與之對應的兩顆語法樹

5.給出下面語言的相應文法

  • L1={anbncin1,i0}L_{1}=\{a^{n}b^{n}c^{i}|n\ge1,i\ge0\}
    nnii的不同區直來把L1L_{1}分成兩部分:

    • 前半部分是anbna^{n}b^{n}AaAbabA\to aAb|ab
    • 後半部分是cic^{i}BBcεB\to Bc|\varepsilon
      G1[S]G_{1}[S]可以寫爲:SABS\to AB AaAbabA\to aAb|ab BcBεB\to cB|\varepsilon
  • L2={aibncnn1,i0}L_{2}=\{a^{i}b^{n}c^{n}|n\ge1,i\ge0\}
    G2[S]:G_{2}[S]: SABS\to AB AaAεA\to aA|\varepsilon BbBcbcB\to bBc|bc

  • L3={anbnambmm,n0}L_{3}=\{a^{n}b^{n}a^{m}b^{m}|m,n\ge0\}
    G3[S]:G_{3}[S]: AABA\to AB AaAbεA\to aAb|\varepsilon BaBbεB\to aBb|\varepsilon

  • L4={1n0m1m0nn,m0}L_{4}=\{1^{n}0^{m}1^{m}0^{n}|n,m\ge0\}
    可以看成是兩部分:

    • 中間部分是0m1m0^{m}1^{m}A0A1εA\to 0A1|\varepsilon
    • 剩下兩邊的部分是:S1S0AS\to 1S0|A
      G4[S]:G_{4}[S]: S1S0AS\to 1S0|A A0A1εA\to 0A1|\varepsilon

  1. 最左推導是指:任何一步αβ\alpha\Rightarrow\beta都是對α\alpha中的最左非終結符進行替換的。 ↩︎

  2. 如果文法存在某個句子對應兩顆以上不同的語法樹,或者兩種以上不同的最左/右推導,則稱這個文法是二義的↩︎

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