编译原理与技术 词法分析 (2)(2)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2024/7/1
《编译原理与技术》讲义
20
正规式与有限自动机
✓ R= R1 | R2
Si
S0 Sj
(3)
fi
f0
fj
引入新的终态f0和 (fi,)=f0和(fj,)=f0
2024/7/1
《编译原理与技术》讲义
21
正规式与有限自动机
✓ R= R1 ·R2
(1)
Si
fi
Sj
fj
R1对应的 NFA,Si为初 态,fi为终态
…
2024/7/1
《编译原理与技术》讲义
5
有限自动机的表示
e.g.7 NFA Mn =(, S, S0,F,),其中:
= { 0,1 } , S = {S0, S1 , S2 , S3 , S4 },F={S2 , S4}
(S0,0)= {S0, S3 } (S0,1)= {S0, S1 }
(S1,0)= ∅
有限自动机
有限自动机(Finite Automata-FA)是种更 一般化的状态转换图。分为NFA和DFA。
词法分析器自动生成:
正规式
NFA
DFA
词法程序
非确定有限 自动机
确定的有限 自动机
2024/7/1
《编译原理与技术》讲义
1
非确定有限自动机-NFA
NFA Mn 是一个五元组 Mn =(, S, S0,F,), 其中:
2024/7/1
《编译原理与技术》讲义
15
比较 DFA 和 NFA(2)
DFA
NFA
容易实现-当输入串结束 由于面临同样输入符号存 时(或不存在相应状态转 在多重状态转换或存在转 换)时,若当前状态为终 换的选择,实现较为复杂。 态即为接受“已读入”的串, 一般地,NFA接受串如果
否则拒绝。
它在读完串后“能够”到达
• (0 | 1)*
0
1
2024/7/1
《编译原理与技术》讲义
33
e.g.12 构造(0|1)*01的对应的FA。(3)
• (0 | 1)* 0
2024/7/1
0
1
《编译原理与技术》讲义
0
34
e.g.12 构造(0|1)*01的对应的FA。(4)
• (0 | 1)* 0 1
0
1
0 1
2024/7/1
Si
fi
R1对应的NFA,它也 是(R1)对应的NFA
《编译原理与技术》讲义
31
e.g.12 构造(0|1)*01的对应的FA。(1)
•0
0
•1
1
•0|1
0
1
2024/7/1
《编译原理与技术》讲义
32
e.g.12 构造(0|1)*01的对应的FA。(2)
• (0 | 1) 同 0 | 1
R2对应的NFA,Sj为 初态,fj为终态
2024/7/1
《编译原理与技术》讲义
22
正规式与有限自动机
✓ R= R1 ·R2
(2)
S0
Si
fi
Sj
fj
引入新的初态 S0和(S0,)=Si
2024/7/1
《编译原理与技术》讲义
23
正规式与有限自动机
✓ R= R1 ·R2
(3)
ቤተ መጻሕፍቲ ባይዱ
S0
Si
fi
Sj
fj
2024/7/1
《编译原理与技术》讲义
7
有限自动机的表示
e.g.7 中NFA的状态转换矩阵(表)如下:
* 状态(集)
S0 S1 S2 S3 S4
0
{S0, S3 } ∅ {S2} {S4} {S4}
1
{S0, S1 } {S2} {S2} ∅ {S4}
2024/7/1
《编译原理与技术》讲义
8
有限自动机识别的语言
e.g.9 下面DFA M识别的语言L(M)是什么?
S
1
1
S0
S1
1
00 0
00
1
S2
1
S3
2024/7/1
《编译原理与技术》讲义
10
有限自动机识别的语言
e.g.9 L(M) = {含偶数个0和偶数个1的0,1串}
1 S0
1 00
1
S2
1
S1 00
S3
S0 偶数个“0”与偶数个“1”的 0,1串
S1 偶数个“0”与奇数个“1”的 0,1串
S2 奇数个“0”与偶数个“1”的 0,1串
S3 奇数个“0”与奇数个“1”的 0,1串
2024/7/1
《编译原理与技术》讲义
11
有限自动机识别的语言
e.g.10 下面DFA M识别的语言L(M)是什么?
0
1
S0
1
0 S1
S2
1
0
2024/7/1
《编译原理与技术》讲义
2024/7/1
《编译原理与技术》讲义
41
NFA的确定化(转换到DFA)
子集构造法
➢ DFA状态转换函数d : Sd1 a Sd2 , Sd2 = { t,u | s a t , s∈Sd1 , t * u } = -closure( { t | s a t , s∈Sd1 } )
➢ DFA的终态F-{ 含有原NFA终态的Sd }
2024/7/1
《编译原理与技术》讲义
40
NFA的确定化(转换到DFA)
子集构造法
➢ DFA的“状态”Sd是NFA的非空状态子集, Sd2S
➢ D能F到A的达初的态所S有d0状-态包,括即原NFA初态S0及其经转换 Sd0 = { S0,u | S0 * u }= -closure({S0})
-closure(T) = { 从状态集合T的每一个状态t出发, 经过若干空转换( 转换)所能到达的所有状态}
状态Sd Sd0={ x,3,1}
{3,4,1}
a d : Sd1 a Sd2
{3,4,1}
b d : Sd1 b Sd2
{3,5,1}
{3,2,4,1,6,y}
{3,5,1}
{3,5,1}
{3,4,1}
{3,2,5,1,6,y}
{3,2,4,1,6,y} {3,2,5,1,6,y}
{3,2,4,6,1,y} {3,4,6,1,y}
:S x S , 为一单值映射函数。
2024/7/1
《编译原理与技术》讲义
3
有限自动机的表示
1)状态转换图
开始状态
一般状态
终态
a
s
t
(s,a)=t
s
t
(s,)=t
2024/7/1
《编译原理与技术》讲义
4
有限自动机的表示
2)状态转换矩阵(表)
*
状态(集)
a
Si
{Sj}
Sj
…
b
…
… (Si,a) = {Sj}
{3,5,6,1,y} {3,2,5,6,1,y}
某终态。
识别相同正规集的DFA和NFA: DFA的规模(在状态 数和状态转换上)一般比相应的NFA复杂(可以达到 指数级)
2024/7/1
《编译原理与技术》讲义
16
比较 DFA 和 NFA(3)
e.g.11 识别正规式(0|1)*01的DFA和NFA
0
NFA :
S0
0
S1
1
S2
DFA :
1
1
0
S0
if U 不在 Dstates中 则将其加入Dstates且未加 标记;
记下DFA状态转换函数d(T,a)= U ; }
}
2024/7/1
《编译原理与技术》讲义
43
NFA的确定化
e.g.14 确定化以下NFA M。
a
a
4
a
a
X
3
1
2
6
y
b
b
5
b
b
2024/7/1
《编译原理与技术》讲义
44
e.g.14 确定化以下NFA M。(续1)
0
S1
1
S2
0
1
2024/7/1
《编译原理与技术》讲义
17
正规式与有限自动机
对于上正规式R,存在一个NFA M,使得
L(M) = L(R) ,反之亦然。
Thopmson 方法:
✓ R=
S0
只引入初态S0和 终态S1,他们之
间无状态转换
✓ R=∅
S0
S1
✓ R=a∈
S0 a
S1
2024/7/1
《编译原理与技术》讲义
e.g.8 下面FA识别(接受)的串是什么?
S0
0
S1
1
S2
FA识别(接受)串∈* , 如果存在一个从 FA的初态到某个终态的(状态)转换路径, 该路径上所有标记的字符依次连接为。
FA M 所识别的语言 L(M)
L(M) = { | M 识别 ∈* }
2024/7/1
《编译原理与技术》讲义
9
有限自动机识别的语言
28
正规式与有限自动机
✓ R= R1*
(4)
引入新的状态转 换(fi,)=Si
S0
Si
fi
f0
2024/7/1
《编译原理与技术》讲义
29
正规式与有限自动机
✓ R= R1*
(5)
S0
Si
fi
f0
2024/7/1
引入新的状态转 换(S0,)=f0
《编译原理与技术》讲义
30
正规式与有限自动机
✓ R= (R1)
(S1,1)= {S2}
(S2,0)= {S2}
(S2,1)= {S2}
(S3,0)= {S4}
(S3,1)= ∅
(S4,0)= {S4}
(S4,1)= {S4}
2024/7/1
《编译原理与技术》讲义
6
有限自动机的表示
e.g.7 中NFA的状态转换图如下:
0,1
0,1
0
0
S0
S3
S4
1
S1 1
S2 0,1
2024/7/1
《编译原理与技术》讲义
35
e.g.12 构造(0|1)*01的对应的FA。(5)
R5 R4
( R3 )
R1
| R2
R9
R7
·
R8
· R6
1
*
0
0
1
2024/7/1
《编译原理与技术》讲义
36
Thompson方法所构造的NFA的状态数和转换较多。 可以采用下面方法减少之:
•R • R = R1 | R2 • R = R1 R2
4)
0
1
0|1
1
5)
0
1
0
2024/7/1
《编译原理与技术》讲义
39
NFA的确定化(转换到DFA)
子集构造法
对NFA进行模拟。NFA的转换表中每个条目是状态 子集,而在DFA中则为单一的状态。NFA到DFA的 转换的一般想法是,让DFA中的每个状态代表NFA 中的状态子集。DFA用它的状态去记住NFA在读入 每个输入符号后能到达的所有状态的集合,即在 DFA在读了符号a1a2…an后到达代表NFA状态子集T 的状态,而这个子集T是从NFA开始状态沿着标记 有a1a2…an的路径所能到达的所有状态的集合。
12
有限自动机识别的语言
e.g.10 L(M) = { 能被“3”整除的二进制数(串) }
0
1
S0
1
S1
0
S2
1
0
S0 能被3整除 S1 被3整除…余1 S2 被3整除…余2
2024/7/1
《编译原理与技术》讲义
13
有限自动机识别的语言
e.g.10 L(M) = { 能被“3”整除的二进制数(串) } 二进制串 10010 , 即十进制18的识别过程:
0
S0
1
0 S1
S2
1
0
输入串 1 0 0 1 0
2024/7/1
《编译原理与技术》讲义
14
比较 DFA 和 NFA(1)
DFA :S x S
NFA :S x 2S
没有 转换
有 转换
对∈*,DFA的“识别” 对∈*的“识别”路径可 路径唯一且完全由确定 能存在多条不同的路径
对于正规式R,均有DFA Md和NFA Mn,使得L(Md) = L(Mn)=L(R),即两者识别正规语言能力相同(等价)
18
正规式与有限自动机
✓ R= R1 | R2
(1)
Si
fi
R1对应的 NFA,Si为初 态,fi为终态
2024/7/1
Sj
fj
R2对应的NFA,Sj为 初态,fj为终态
《编译原理与技术》讲义
19
正规式与有限自动机
✓ R= R1 | R2
(2)
Si
fi
S0
Sj
fj
引入新的初态S0和 (S0,)=Si和 (S0,)=Sj
R R1
R2
R1
R2
R1
R1
• R = R1*
2024/7/1
《编译原理与技术》讲义
37
e.g.13 构造(0|1)*01的对应的FA-简化版
(0|1)* 0 1
1)
2)
(0|1)* 0
1
3)
(0|1)*
0
1
4)
2024/7/1
0
0|1
《编译原理与技术》讲义
1
38
e.g.13 构造(0|1)*01的对应的FA-简化版
引入新的状态 转换(fi,)=Sj
2024/7/1
《编译原理与技术》讲义
24
正规式与有限自动机
✓ R= R1 ·R2
(4)
S0
Si
fi
Sj
fj
f0
2024/7/1
引入新的终态f0和 状态转换(fj,)=f0
《编译原理与技术》讲义
25
正规式与有限自动机
✓ R= R1*
(1)
Si
fi
R1对应的NFA,Si为 初态,fi为终态
-有限字母表(输入符号集) S-有限状态集 S0-非空初态集合,S0S F-终态集合,F S
-状态转换函数,S x * 2S
2024/7/1
《编译原理与技术》讲义
2
确定的有限自动机-DFA
DFA Md 是一个五元组 Md =(, S, S0,F,), 其中:
, S, S0,F 同NFA中的定义,而定义如下:
2024/7/1
《编译原理与技术》讲义
42
初始时,DFA的状态集合Dstates中只有初态Sd0且未 标记。
while ( Dstates中有未标记的状态 T ) do
{ 标记 T;
for 每个输入符号 a do
{ U = -closure( { s | NFA状态转换函数 (t,a)=s, tT} )
2024/7/1
《编译原理与技术》讲义
26
正规式与有限自动机
✓ R= R1*
(2)
S0
Si
fi
引入新的初态 S0和(S0,)=Si