第05讲词法分析IVdfa化简lex习题资料.

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• (a|b)*ab
b
• 转换过程
开始
a
0
m(0,abab)
= m(m(0,a),bab) = m(1,bab)
= m(m(1,b),ab) = m(2,ab)
b
b
1
2
a a
状态序列:0 1 2
25
词法分析过程
• 一个串被DFA匹配的过程
• (a|b)*ab
b
b
• 转换过程
开始
a
b
0
1
2
m(0,abab)
14
DFA的化简 • 判断依据:状态的可区分性
• 状态的可区分性
• 存在串w,使得从状态s开始,对w进行状态 转换,最终停在某个接受状态;而对于从t开 始对w进行状态转换后,却停在某个非接受状 态
15
2.3 有 限 自 动 机
可区别的状态
A和B是可区别的状态 A和C是不可区别的状态
b
b
开始
a
A
C ab
开始
0
1
a
b
6
7
8
9
b
4
5
12
本讲纲要 • 子集构造法 • DFA化简 • Lex • 习题
13
2.3 有 限 自 动 机 • 2.3.4 DFA的化简
– 通过算法构造的NFA,而后经过子集构造法得来 的DFA通常不是最简的
– 如何判定一个DFA是不是最简,that’s a question
0
m(0,abab)
b
b
1
2
a a
状态序列:0
21
词法分析过程
• 一个串被DFA匹配的过程
• (a|b)*ab
b
b
• 转换过程
开始
a
b
0
1
2
m(0,abab)
a a
= m(m(0,a),bab)
22
词法分析过程
• 一个串被DFA匹配的过程
• (a|b)*ab
b
b
• 转换过程
开始
a
b
0
1
2
m(0,abab)
温故而知新
正规式
状态转换图
用正规式语法结构来指导构造过程
等价
计算机 实现
等价
不确定有 限自动机
子集构造法
确定有限
合并不可区别状态
最简确定
自动机
有限自动

状态列举法
语言
确定有限 自动机
1
DFA
• 确定的有限自动机(简称DFA)
• 数学形式定义
–DFA是这样一个数学模型,包括
• 状态集合S
• 输入字母表
死状态
左图无须加死状态,右图加入死状态E。
b
a, b
b
开始
a
A
C ab
Bb a
a
b
D 开始
a
A
b
C
E
a
b
Bb D
a
a
18
2.3 有 限 自 动 机
方法
b
1. {A, B, C}, {D}
开始
a
0
move({A, B, C}, a} = {B}
move({A, B, C}, b} = {C, D}
2. {A, C}, {B}, {D}
5
NFA=>DFA
• 子集构造法
– DFA的一个状态是NFA的一个状态集合
–读了输入a1 a2 … an后, NFA能到达的所有状态:s1, s2, …, sk, 则DFA到达状态{s1, s2, …, sk}
识别语言
(a|b)*ab 的DFA
a
开始
a
b
0
1
2
b
6
NFA=>DFA
• 子集构造法
– DFA的一个状态是NFA的一个状态集合
缺点:1、输入字 符包括
2、一个状态对于 某个字符,可能
有多条输出边
3
NFA=>DFA • 理论依据
– 根据有限自动机理论,设L为一个有不确定的有 限自动机接受的集合,则存在一个接受L的确定 的有限自动机
• 怎样进行NFA到DFA的转化
– 子集构造法
4
本讲纲要 • 子集构造法 • DFA化简 • Lex • 习题
开始 0
a 2
1 b
4
状态
3
6 5
A B C D
7
输入符号 ab BC BD BC BC
a
b
8
9
8
2.3 有 限 自 动 机
状态 输入符号
ab
b
ABC BBD CBC DBC
C
b
a
开始
A
a
B
开始 0
a 2
1 b
4
3
6 5
a
a
7
8
b bD a
b 9
9
状态
A B C D
2.3 有 限 自 动 机
a a
= m(m(0,a),bab) = m(1,bab)
= m(m(1,b),ab) = m(2,ab)
= m(m(2,a),b)
26
词法分析过程
• 一个串被DFA匹配的过程
• (a|b)*ab
b
• 转换过程
输入符号
ab
BC
BD BC BC
b
开始
a
A
b
C ab Bb D
a a
10
2.3 有 限 自 动 机
状态 输入符号 ab
ABC
b
BBD
CBA
DBC
wk.baidu.com
11
2.3 有 限 自 动 机
识别语言
b
b
(a|b)*ab 的自动机
开始 0
a
b
1
2
b
a
开始
a
0
b 1
a
a
b
2
开始 A
a
C ab
Bb D
b
a
2
3
a a
Bb D a
a
16
DFA的化简 • DFA化简的途径
– 根据状态是否可以区分,将状态划分成若干个集 合,每个集合内的状态之间都不可区分,而任意 两个集合中的元素都是可以互相区分的
– 依据原始的DFA,在合并后的状态基础上,建立 新的状态转换关系
17
2.3 有 限 自 动 机
化简时,DFA的状态转换函数必须是一个 全函数
–读了输入a1 a2 … an后, NFA能到达的所有状态:s1, s2, …, sk, 则DFA到达状态{s1, s2, …, sk}
a
a
{0}
{0, 1}
b
bb a
{0, 2}
a
开始
a
b
0
1
2
b
7
2.3 有 限 自 动 机
A = {0, 1, 2, 4, 7} B = {1, 2, 3, 4, 6, 7, 8} C = {1, 2, 4, 5, 6, 7} D = {1, 2, 4, 5, 6, 7, 9}
• 转换函数 move: S S • 唯一的初态s S
a
0
1
• 终态集合F S
2
NFA
• 不确定的有限自动机(简称NFA)
• 数学形式定义
–DFA是这样一个数学模型,包括
• 状态集合S
• 输入字母表
• 转换函数 move: S ({}) P(S)
• 唯一的初态s S • 终态集合F S
a a
状态序列:0 1
= m(m(0,a),bab) = m(1,bab)
23
词法分析过程
• 一个串被DFA匹配的过程
• (a|b)*ab
b
b
• 转换过程
开始
a
b
0
1
2
m(0,abab)
a a
= m(m(0,a),bab) = m(1,bab)
= m(m(1,b),ab)
24
词法分析过程
• 一个串被DFA匹配的过程
move({A, C}, a} = {B}
move({A, C}, b} = {C}
b
开始
a
A
b
b
1
2
a a
b
C ab
Bb D a
a
19
本讲纲要 • 子集构造法 • DFA化简 • 补充 • Lex • 习题
20
词法模式识别过程
• 一个串被DFA匹配的过程
• (a|b)*ab
b
• 转换过程
开始
a
相关文档
最新文档