编译原理 第二章复习题 上下文无关文法和形式语言

第二章复习题

单选

  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. 如果文法存在某个句子对应两颗以上不同的语法树,或者两种以上不同的最左/右推导,则称这个文法是二义的↩︎

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