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

第二章复习题

单选

  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.文法 G G G

N → D ∣ N D N\to D|ND NDND D → 0 ∣ 1 ∣ 2 ∣ 3 ∣ 4 ∣ 5 ∣ 6 ∣ 7 ∣ 8 ∣ 9 D\to 0|1|2|3|4|5|6|7|8|9 D0123456789
(1) G G G的语言是什么?

  • G G G的语言是:0~9的数字组成的任意非空串
    L ( G ) = { x ∣ x ∈ { 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\}^{+}\} L(G)={xx{0,1,2,3,4,5,6,7,8,9}+}

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

  • 以句子0127为例
    最左推导:

N ⇒ N D N\Rightarrow ND NND ⇒ N D D \Rightarrow NDD NDD ⇒ N D D D \Rightarrow NDDD NDDD ⇒ D D D D \Rightarrow DDDD DDDD ⇒ 0 D D D \Rightarrow 0DDD 0DDD ⇒ 01 D D \Rightarrow 01DD 01DD ⇒ 012 D \Rightarrow 012D 012D ⇒ 0127 \Rightarrow 0127 0127

理解: N ⇒ N D N\Rightarrow ND NND是对 N N N中的最左非终结符 N N N进行了替换,替换成了 N D ND ND
N D ⇒ N D D ND\Rightarrow NDD NDNDD是对 N D ND ND中的最左非终结符 N N N进行了替换,替换成了 N D ND ND
后面的同理。

最右推导:
N ⇒ N D N\Rightarrow ND NND ⇒ N 7 \Rightarrow N7 N7 ⇒ N D 7 \Rightarrow ND7 ND7 ⇒ N 27 \Rightarrow N27 N27 ⇒ N D 27 \Rightarrow ND27 ND27 ⇒ N 127 \Rightarrow N127 N127 ⇒ D 127 \Rightarrow D127 D127 ⇒ 0127 \Rightarrow 0127 0127

理解: N ⇒ N D N\Rightarrow ND NND是对 N N N中的最右非终结符 N N N进行了替换,替换成了 N D ND ND
N D ⇒ N 7 ND\Rightarrow N7 NDN7是对 N D ND ND中的最右非终结符 D D D进行了替换,替换成了 7 7 7
后面的同理。

3.写一文法,使其语言是奇数集。要求:不以0打头。

  • 只有一位数的情况: D → 1 ∣ 3 ∣ 5 ∣ 7 ∣ 9 D\to 1|3|5|7|9 D13579
  • 复杂的情况:分三部分
    末尾:以1|3|5|7|9结尾, D → 1 ∣ 3 ∣ 5 ∣ 7 ∣ 9 D\to 1|3|5|7|9 D13579
    开头:除了0的任意数字, B → 2 ∣ 4 ∣ 6 ∣ 8 ∣ D B\to 2|4|6|8|D B2468D
    中间:空或者任意数字串, C → C A ∣ ε C\to CA|\varepsilon CCAε
  • 最终答案:文法 G ( N ) G(N) G(N)为: N → B C D ∣ D N\to BCD|D NBCDD D → 1 ∣ 3 ∣ 5 ∣ 7 ∣ 9 D\to 1|3|5|7|9 D13579 B → 2 ∣ 4 ∣ 6 ∣ 8 ∣ D B\to 2|4|6|8|D B2468D C → C A ∣ ε C\to CA|\varepsilon CCAε A → 0 ∣ B A\to 0|B A0B

4.证明文法: S → i S e S ∣ i S ∣ i S\to iSeS|iS|i SiSeSiSi是二义的2

首先:找到此文法对应的一个句子 i i i e i iiiei iiiei
然后:构造与之对应的两颗语法树

5.给出下面语言的相应文法

  • L 1 = { a n b n c i ∣ n ≥ 1 , i ≥ 0 } L_{1}=\{a^{n}b^{n}c^{i}|n\ge1,i\ge0\} L1={anbncin1,i0}
    n n n i i i的不同区直来把 L 1 L_{1} L1分成两部分:

    • 前半部分是 a n b n a^{n}b^{n} anbn A → a A b ∣ a b A\to aAb|ab AaAbab
    • 后半部分是 c i c^{i} ci B → B c ∣ ε B\to Bc|\varepsilon BBcε
      G 1 [ S ] G_{1}[S] G1[S]可以写为: S → A B S\to AB SAB A → a A b ∣ a b A\to aAb|ab AaAbab B → c B ∣ ε B\to cB|\varepsilon BcBε
  • L 2 = { a i b n c n ∣ n ≥ 1 , i ≥ 0 } L_{2}=\{a^{i}b^{n}c^{n}|n\ge1,i\ge0\} L2={aibncnn1,i0}
    G 2 [ S ] : G_{2}[S]: G2[S]: S → A B S\to AB SAB A → a A ∣ ε A\to aA|\varepsilon AaAε B → b B c ∣ b c B\to bBc|bc BbBcbc

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

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

    • 中间部分是 0 m 1 m 0^{m}1^{m} 0m1m A → 0 A 1 ∣ ε A\to 0A1|\varepsilon A0A1ε
    • 剩下两边的部分是: S → 1 S 0 ∣ A S\to 1S0|A S1S0A
      G 4 [ S ] : G_{4}[S]: G4[S]: S → 1 S 0 ∣ A S\to 1S0|A S1S0A A → 0 A 1 ∣ ε A\to 0A1|\varepsilon A0A1ε

  1. 最左推导是指:任何一步 α ⇒ β \alpha\Rightarrow\beta αβ都是对 α \alpha α中的最左非终结符进行替换的。 ↩︎

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

你可能感兴趣的:(编译原理)