正规表达式与有限自动机(3)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
代之为 代之为
V1 i
V2
i j
j k
V1 18
逐步把这个图转变为每条弧只标记为上的 一个字符或,最后得到一个NFA M’,显 然L(M’)=L(V)
19
(a|b)*(aa|bb)(a|b)*
(a|b)*(aa|bb)(a|b)*
X
Y
a
a
a3a
X
5
1
2 6 Y
b4 b b
b
20
a
X
5
b
I
有终态结点用弧连接到Y,从而形成一个新的
NFA,记为M’,它只有一个初态X和一个终
态Y,显然L(M)=L(M’)。
a
a
aa
5
1
2 6
b
bb
b
6
证明:
1 对上任一NFA M,构造一个上的正规 式r,使得L(r)=L(M)。
首先,在M的转换图上加进两个状态X和Y,
从X用弧连接到M的所有初态结点,从M的所 有终态结点用弧连接到Y,从而形成一个新的 NFA,记为M’,它只有一个初态X和一个终
易于人工设计
23
q1 M1 f1
至此,结论2获证。
q0
f0
16
上述证明过程实质上是一个将正规 表达式转换为有限自动机的算法
1) 构造上的NFA M’ 使得 L(V)=L(M’) 首先,把V表示成
XV Y
17
按下面的三条规则对V进行分裂
i V1V2 k 代之为 i V1 j V2 k
i V1|V2 j
i V1*
k
编译原理
第三章 词法分析
1
第三章 词法分析
对于词法分析器的要求 词法分析器的设计 正规表达式与有限自动机 词法分析器的自动产生--LEX
2
第三章 词法分析
对于词法分析器的要求 词法分析器的设计 正规表达式与有限自动机 词法分析器的自动产生--LEX
3
curState = 初态
GetChar(); while( stateTrans[curState][ch]有定义){
…
}
curState= stateTrans[curState][ch]; if cur_state是终态 then 返回strToken中的单词
GetChar( );
FA
正规集
DFA
3.3.1
DIM
3.3.2 3.3.3
IF
3.3.5
DO STOP
正规式
NFA
END
letter(letter|digit)* digit(digit)*
W2
5
V1(U1|U2)*W1
1
4
V1(U1|U2)*W2 V2(U1|U2)*W1
2
5
V2(U1|U2)*W2
10
最后,X到Y的弧上标记的正规式即为所构 造的正规式r
显然L(r)=L(M)=L(M’)
1. 对任何FA M,都存在一个正规式r,使得 L(r)=L(M)。 2. 对任何正规式r,都存在一个FA M,使得 L(M)=L(r)。
r=r1|r2
M的状态转换如右图所示。
L(M)=L(M1)∪L(M2)
q1 M1 f1
=L(r1)∪L(r2)=L(r)
q0
f0
q2 M2 f2
14
情形2:r=r1r2, 设Mi同情形1(i=1,2)。 令M=<S1∪S2, 1∪2, , q1, {f2}>,其中 定义如下:
(a) (q,a)= 1(q,a), 当qS1-{f1}, a1∪{}
(b) (q,a)= 2(q,a), 当qS2, a2∪{}
(c) (f1,)={q2}
r=r1r2
M的状态转换如右图所示。
L(M)=L(M1)L(M2) =L(r1)L(r2)=L(r)。
q1 M1 f1
q2 M2 f2
15
情形3:r=r1*。设M1同情形1。
令M=<S1∪{q0, f0}, 1, , q0, {f0}>,其中q0, f0S1,定义如下:
{X,5,1} {5,3,1} {5,4,1} {5,2,3,1,6,Y} {5,2,4,1,6,Y} {5,4,6,1,Y} {5,3,6,1,Y}
a3a
1
2
b4 b
Ia {5,3,1} {5,2,3,1,6,Y} {5,3,1} {5,2,3,1,6,Y} {5,3,6,1,Y} {5,3,6,1,Y}
{5,2,3,1,6,Y}
a
6 Y
b
Ib {5,4,1} {5,4,1} {5,2,4,1,6,Y} {5,4,6,1,Y} {5,2,4,1,6,Y} {5,2,4,1,6,Y} {5,4,6,1,Y}
21
I
a
b
0
1
2
1
3
2
2
1
4
3
3
来自百度文库
5
4
6
4
5
6
4
6
3
5
a
a
1a
0
ab
3b a b
5 ba
b2
b
4a
然后,反复使用下面的一条规则,逐步消去的 所有结点,直到只剩下X和Y为止;
8
i r1 j r2 k 代之为 i r1r2 k
r1
i
j
r2
代之为
i r1 j r3 k 代之为
i r1|r2 j i r1r2*r3 k
r2
9
1 V1
V2 2
U1
4
W1 3
W2
U2
5
1 V1
V2 2
U1|U2
4
W1 3
6
b
22
curState = 初态
GetChar(); while( stateTrans[curState][ch]有定义){
小结
//存在后继状态,读入、拼接
Concat(); //转换入下一状态,读入下一字符
DIM,IF, DO,STOP,END
number, name, age
125, 2169
12
(2) 假设结论对于少于k(k1)个运算符的正规 式成立。 当r中含有k个运算符时,r有三种情形:
情形1:r=r1|r2,r1和r2中运算符个数少于k。 从而,由归纳假设,对ri存在Mi=<Si, i, i, qi, {fi}>,使得L(Mi)=L(ri),并且Mi没有从终 态出发的箭弧(i=1,2)。不妨设S1∩S2=, 在S1 ∪S2中加入两个新状态q0,f0。
13
令M=<S1∪S2∪{q0,f0}, 1∪2, , q0, {f0}>, 其中定义如下:
(a) (q0, )={q1,q2}
(b) (q,a)= 1(q,a), 当qS1-{f1}, a1∪{}
(c) (q,a)= 2(q,a), 当qS2-{f2}, a2∪{}
(d) (f1,)=(f2,)={f0}。
得L(r)=L(M)。 2. 对任何正规式r,都存在一个FA M,使
得L(M)=L(r)。
对转换图概念拓广,令每条弧可用一个 正规式作标记。(对一类输入符号)
5
证明:
1 对上任一NFA M,构造一个上的正规 式r,使得L(r)=L(M)。
首先,在M的转换图上加进两个状态X和Y,
从X用弧连接到M的所有初态结点,从M的所
态Y,显然L(M)=L(M’)。
a
a
aa
X
5
1
2 6 Y
b
bb
b
7
证明: 1 对上任一NFA M,构造一个上的正规
式r,使得L(r)=L(M)。
首先,在M的转换图上加进两个状态X和Y, 从X用弧连接到M的所有初态结点,从M的所 有终态结点用弧连接到Y,从而形成一个新的 NFA,记为M’,它只有一个初态X和一个终 态Y,显然L(M)=L(M’)。
11
证明2: 对于上的正规式r,构造一个NFA M,使L(M)=L(r),并且M只有一个终态, 而且没有从该终态出发的箭弧。
下面使用关于r中运算符数目的归纳法证 明上述结论。
(1) 若r具有零个运算符,则r=或r=或r=a,其 中a。此时下图所示的三个有限自动机显然 符合上述要求。
q0
q0
qf
q0 a qf
关系图
//存在后继状态,读入、拼接
Concat(); //转换入下一状态,读入下一字符
DIM,IF, DO,STOP,END
number, name, age
125, 2169,
…
}
curState= stateTrans[curState][ch]; if cur_state是终态 then 返回strToken中的单词
(a) (q0,)=(f1,)={q1, f0}
1. 对任(b)何(FqA,a)M= ,1(q都, a存),在当一q个S1正-{f1规}, 式ar,1∪使{得}。
L(r)=L(M)。 2M. 对的任状何态正转规换式如r右,图都所存示在。一个FA
Mr,=r使1* 得
L(ML(M)=)L=(rL)。(M1)* = L(r1)* = L(r)
GetChar( );
FA
正规集
DFA
3.3.1
DIM
3.3.2 3.3.3
IF
3.3.5
DO STOP
正规式
NFA
END
letter(letter|digit)* digit(digit)*
易于人工设计
4
3.3.5 正规式与有限自动机的等价性
定理: 1. 对任何FA M,都存在一个正规式r,使