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