编译原理课后作业集#
第一章 引论#
题 1#
什么是编译程序?
题 2#
计算机执行用高级语言编写的程序有哪些方式?它们之间的主要区别是什么?
题 3#
编译过程通常分为哪几个阶段?请给出编译程序总框图。
第二章 高级程序设计语言的语法描述#
题 2#
令文法 G(N) 为:
ND→D∣ND→0∣1∣2∣3∣4∣5∣6∣7∣8∣9
(1) G(N) 的语言 L(G(N)) 是什么?
(2) 给出句子 0731 和 863 的最左推导和最右推导。
题 4#
写一个文法,使其语言是偶数集,且每个偶数不以 0 开头。
题 5#
给出下面语言的相应文法:
- L1={anbnci∣n≥1,i≥0}
- L2={aibncn∣n≥1,i≥0}
- L3={anbnambm∣n,m≥0}
- L4={1n0m1m0n∣n,m≥0}
题 7#
令文法 G(E) 为:
ETF→T∣E+T∣E−T→F∣T∗F∣T/F→(E)∣i
(1) 给出 i+i∗i、i∗(i+i) 的最左推导和最右推导。
(2) 给出 i+i+i、i+i∗i 和 i−i−i 的语法树。
题 10#
证明下面的文法是二义的:
S→iSeS∣iS∣i
第三章 词法分析#
题 6#
令 A、B 和 C 是任意正规式,证明以下关系成立:
(1) A∣A=A
(2) (A∗)∗=A∗
(3) A∗=ε∣AA∗
(4) (AB)∗A=A(BA)∗
(5) A=b∣aA 当且仅当 A=a∗b
题 7#
构造下列正规式相应的 DFA:
(1) 1(0∣1)∗101
(2) 0∗10∗10∗10∗
题 8#
给出下面正规表达式:
(1) 以 01 结尾的二进制数串。
(2) 能被 5 整除的十进制整数。
(3) 包含奇数个 1 或奇数个 0 的二进制数串。
题 9#
对下面情况给出 DFA 及正规表达式:
(1) {0,1} 上含子串 010 的所有串。
题 12#
将下面的有限自动机分别确定化和最小化。
(a) 需确定化的有限自动机:
- 初始状态/接受状态:0
- 状态转移:
- 状态 0:接收 a 转移到 0;接收 a,b 转移到 1。
- 状态 1:接收 a 转移到 0。
(b) 需最小化的有限自动机:
- 初始状态:0
- 接受状态:0,1
- 状态转移:
- 状态 0:接收 a 转移到 1;接收 b 转移到 2。
- 状态 1:接收 a 转移到 1;接收 b 转移到 4。
- 状态 2:接收 a 转移到 1;接收 b 转移到 3。
- 状态 3:接收 a 转移到 3;接收 b 转移到 2。
- 状态 4:接收 a 转移到 0;接收 b 转移到 5。
- 状态 5:接收 a 转移到 5;接收 b 转移到 4。
第四章 语法分析#
题 5#
考虑下面文法 G1:
ST→a∣∧∣(T)→T,S∣S
(1) 消去 G1 的左递归。然后,对每个非终结符,写出不带回溯的递归子程序。
(2) 经改写后的文法是否是 LL(1) 的?给出它的预测分析表。
题 6#
对下面的文法 G:
EE′TT′FF′P→TE′→+E∣ε→FT′→T∣ε→PF′→∗F′∣ε→(E)∣a∣b∣∧
(1) 构造这个文法的每个非终结符的 FIRST 和 FOLLOW 集合。
(2) 证明这个文法是 LL(1) 的。
(3) 构造它的预测分析表。
(4) 构造它的递归下降分析程序。
题 7#
对下面文法:
ExprExprTailVarVarTail→−Expr∣(Expr)∣Var ExprTail→−Expr∣ε→id VarTail→(Expr)∣ε
(1) 构造 LL(1) 分析表。
(2) 给出对句子 id−−id((id)) 的分析过程。
题 12#
考虑下面文法 G1:
ETF→E+T∣T→T∗F∣F→(E)∣i
证明 E+T∗F 是它的一个句型,指出这个句型的所有短语、直接短语和句柄。
题 13#
考虑下面的表格结构文法 G2:
ST→a∣∧∣(T)→T,S∣S
(1) 给出 (a,(a,a)) 和 (((a,a),∧,(a)),a) 的最左和最右推导。
(2) 指出 (((a,a),∧,(a)),a) 的规范归约及每一步的句柄。根据这个规范归约,给出“移进-归约”的过程,并给出它的语法树自下而上的构造过程。
题 15#
考虑文法:
SA→AS∣b→SA∣a
(1) 列出这个文法的所有 LR(0) 项目。
(2) 构造这个文法的 LR(0) 项目集规范族及识别活前缀的 DFA。
(3) 这个文法是 SLR 的吗?若是,构造出它的 SLR 分析表。
(4) 这个文法是 LALR 或 LR(1) 的吗?
题 17#
证明下面文法是 SLR(1) 的但不是 LR(0) 的。
SAB→A→Ab∣bBa→aAc∣a∣aAb