编译原理第二章习题解答
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
长度为4:0011, 1100,
? 0101, 0110, 1001, 1010
b) 前4个串: 由00和11组成的串 正规式B*, B= 00 | 11
A = (B*|C*)* = (00 | 11|01|10)*
c) 后4个串: 由01和10组成的串
正规式C*, C= 01|10
考虑:0001
d) 修改正规式C为D:
1. 根据模式写出正规式
习题2.4 (4) 块注释 /* … */ 。其中 … 中不含有 子串 */ 。
思路:简单例子,观察规律。 关键:注释中若出现 *:若紧跟的是/则结束注释,
否则仍然是注释。
① 注释为空:
/* ε */
② 考虑没有 * 的注释: /* [^*]* */
③ 考虑含 * 的注释: /* (*[^/])* */
© 西安电子科技大学 ·软件学院
13
其它
习题2.9 构造 10*1 的最小DFA
解: 活用 Thompson 算法
(1) 分解为三部分:1,0*,1;
(2) 画出三者的状态转换图:
1
0
1
0 2
1
3
4
(3) 连接运算:子图首尾相连
1
0 1
0
11
4
这已经是最小的DFA
© 西安电子科技大学 ·软件学院
14
D = (01|10) (00|11)* (01|10)
最终A = (B|D)* = ( (00|11) | (01|10) (00|11)* (01|10) )*
© 西安电子科技大学 ·软件学院
4
1. 根据模式写出正规式
习题2.4 (2) 所有不含有子串 011 的01串
思路1:简单例子,观察规律 (1) 最简单的串: 0 , 1, 11, 00, 10, 01, 010, … (2) 上述各串重复: (0 | 00 | 01 | 010 )* = (01 | 0)* (3) 再考虑:仅由1组成的串,或 若干1打头的串。
© 西安电子科技大学 ·软件学院
12
其它
关于:正规式 -> NFA -> DFA -> DFA最小化:
说明:(一般)逐步计算 NFA->DFA(子集法):关键点:
(1) ε_闭包({NFA初态}), 即DFA的初态; (2) 计算 DFA的状态转移(同时得到DFA的其它状态);
** 借助状态转换矩阵登记:DFA状态、状态转移。 (3) DFA终态:包含NFA终态的状态集。 DFA最小化:关键点: (1) 初始划分:终态组,非终态组; (2) 结合状态转换矩阵,分裂每个状态组; (3) 选代表:修改状态转换矩阵,删除重复的行; (4) 结合新的状态转换矩阵,画状态图,删死/不可达状态.
描述
识别
正规式
有限自动机
正规式、FA是从两个不同的侧面表示一个集合(即正 规集)。所以,根本的方法是以正规集为桥梁,
- 先分析清楚 FA 识别的集合之结构特征, - 然后再设计此集合的正规式。
© 西安电子科技大学 ·软件学院
8
2.依据NFA/DFA,给出正规式
思路2:根据FA直接写出对应的正规式。其考查重点、步骤: 考查“FA之状态图的结构与正规式运算的关系”
他们的最小DFA:
10*1
(0|1)*011(0|1)*
说明:所谓用自然语言描述就是解释字符串的特点。 注意:绝对不允许用正规式表示,因为正规式是已知条件. 解:
10*1:首尾是1、中间有零或若干个0的01串。 (0|1)*011(0|1)* :至少含一个011的01串。
© 西安电子科技大学 ·软件学院
以上情况 进行或运算,可得:/* ( [^*] | *[^*/]/])*)**/*/
④ 考虑:中间可有若干连续 *,可得最终正规式:
"/*" ([^*]|**[^*/])* ** "*/"
© 西安电子科技大学 ·软件学院
7
2.依据NFA/DFA,给出正规式
思路1: 回顾“正规式 与 FA的关系”
正规集
最终的正规式: 1* | 1*(01|0)* = 1*(01|0)*
© 西安电子科技大学 ·软件学院
5
1. 根据模式写出正规式
习题2.4 (2) 所有不含有子串 011 的01串
思路2:考虑包含 011 的串,然后构造没有011的串 ① 含有 子串 011 的最简单的串:
0* 0 0* 1 0*0 1 0*
编译原理 第二章
部分习题解答
© 西安电子科技大学 ·软件学院
难点
第2章习题
1. 根据模式,写出正规式 2. 依据 NFA/DFA,写出正规式
计算量大
3. 正规式NFA 4. NFADFA: ε_闭包,smove 5. DFA最小化
© 西安电子科技大学 ·软件学院
2
1. 根据模式写出正规式
一般思路:(1)分析题意 (2)列举一些最简单的例子 (3)寻找统一规律*,考虑所有可能情况**
A1A | A0A1A0A
** 关键:如何构造正规式 A ?
© 西安电子科技大学 ·软件学院
3
1. 根据模式写出正规式
(1) 分析题意
习题2.4 (1) 由偶数个0和奇数个1构((23成))列 寻的举 找0一 规1些 律串最,考简虑单所的有例可子能情况
③ 构造正规式 A(偶数个0/偶数个1)
a) 长度为2: 00, 11
a 0
a,c 1
b,c b
a 2
b,c
该DFA从初态到终态有三条路径:0b2,0c2,0a1b2 用正规式表示为: b | c | a(a|c)*b,
而且是这三条路径均至少重复一次, 故最终的正规式为:(b|c|a(a|c)*b)+
© 西安电子科技大学 ·软件学院
10
其它
习题2.9 用自然语言给出下述正规式所描述的语言,并构造
习题2.4 (1) 由偶数个0和奇数个1构成的01串
解:① 最简单的串有 0个0和1个1组成的串: 1 2个0和1个1组成的串:010 ,001,100
② 在上述串的中间、两头添加偶数个0和/或偶数个1,即可 得到满足题意的其他串。
设偶数个0/偶数个1组成的串,可用正规式 A 表示,则最 终正规式:
11
其它Fra Baidu bibliotek
关于:正规式 -> NFA -> DFA -> DFA最小化: 说明:(一般)逐步计算 正规式->NFA: (1)呆板Thompson算法:
自上而下分解正规式—— 语法树, 自下而上构造NFA —— 后续遍历; 特点:每个运算对应一次构造,繁琐! (2)活用Thompson算法: 分解正规式:得到若干规模适中的子正规式; 为每个子正规式:画出其最简的状态转换图(子图); 按Thompson算法,将子图组合,得到完整的图。
(1) 从同一状态出发的 多条边/路径:
(2) 同一个状态的入边 和 出边:
a|b ab
(3) 环:
重复0次或多次: *,至少重复1次: +
然后据上,考查每条从初态到终态的路径,综合正规式即可。
© 西安电子科技大学 ·软件学院
9
2.依据NFA/DFA,给出正规式
习题2.10 (2) 用正规式描述 DFA 所接受的语言;
② 其中插入若干个0 (注意11之间应至少插入1个0), 即可不出现“011”, 正规式为: (0+1) (0+1) 0*
即:每个1前面至少1个0,正规式化简为: (01 | 0)* ③ 再考虑:仅由1组成的串,或 若干1打头的串。
最终的正规式: 1*(01|0)*
© 西安电子科技大学 ·软件学院
6