2.4 正规表达式到有限自动机的构造

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

结论
– 接受L的最小状态有穷自动机,若不计同构
则是唯一的。

另一种等价的构造方法:填表算法,参考本节 最后的附加ppt。
2014-9-28
28
2.4.4
正规式到有限自动机构造示例
S 0 1 a 1 1 b 1 1
2014-9-28
30
于是得到DFA 如下: a a 1 0 b b 化简: 因{0,1}a={1}, 故不划分。 因{0,1}b={1}, 故不划分。 因此, 最简DFA如下: a 0 b
2014-9-28 31
(2) (a*b*)*对应的NFA如图2-20所示, 用子集法将NFA确定化得下述转换表:
例2.10 试用DFA的等价性证明正规式 (a|b)*与(a*b*)*等价。 解: (1)正规式(a|b)*对应的NFA如下: a
X e 1 b
2014-9-28 29
e
Y 2
用子集法确定化得如下转换表:
I {X,1,Y} Ia {1,Y} Ib {1,Y}
{1,Y}
{1,Y}
{1,Y}
重命名转换表得:
X c c 1 ε
(3)考察{0,2}b:因{0,2}b={2,4},不属于已划分 出的某个子集, 故{0,2}划分为{0}和{2}。 (4)考察{3,4,5,6}a: {3,4,5,6}a={3,6},属于{3,4,5,6},故不划分。 (5)考察{3,4,5,6}b: {3,4,5,6}b={4,5},属于{3,4,5,6},故不划分。 (6)按顺序把状态子集{0},{1},{2},{3,4,5,6} 重命名为0,1,2,3, 得到化简后的DFA M'':
2014-9-28 11
例2.8 正规式(a|b)*(aa|bb)(a|b)*的NFA M如下: 试将其确定化为DFA M'。
a X e 1 b e 2 b
a
3
a
5 e
a 6 b e Y 2
4
b
2014-9-28
12
解: 用子集法将上述NFA M 确定化为
I {X,1,2} {1,2,3} {1,2,4} {1,2,3,5,6,Y} {1,2,4,5,6,Y} {1,2,4,6,Y} {1,2,3,6,Y}
2014-9-28 10
用子集法对NFA确定化的方法: (1)构造一张转换表, 该表的第1列为状态 子集I, 不同输入符a 对应表中一列Ia。 (2)表的首行首列为e_CLOSURE(s0)。 (3)根据首行首列中的状态集, 为每个输 入符a求其Ia并记入相应的Ia列中。 若此Ia不同于第1列已存在的所有状态 子集, 则将其顺序列入空行中的第1列。 (4)重复(3)直至对每个I及a均已求得Ia, 且 无新的状态子集Ia加入第1列为止。 (5)重命名第1列的每个状态集, 所得状态 转换矩阵即为与NFA M等价的DFA M'。
编 译 原 理 Principle of Compiling
郭 一 晶
厦门大学嘉庚学院
2014-9-28 1
2.4 正规表达式到有限自动机的构造

2.4.1由正规式构造等价的NFA M 2.4.2 NFA M的确定化


2.4.3 DFA M的化简
2.4.4 正规式到有限自动机构造示例

2.4.5 从NFA M到正规表达式的转换
2.4.1 由正规式构造等价的NFA M 由正规式构造等价的NFA M的方法 (Thompson构造法): (1) 将正规式R表示为拓广转换图。
X R Y 2
2014-9-28
4
(2) 采用下述三条转换规则构造NFA
1. s i 2. s i
3. s i r1| r2 r1r2 r1* r1 sj

DFA的一个状态是NFA的一个状态集合。 读了输入a1a2…an后,NFA能到达的所有状 态:s1, s2, …, sk,则DFA到达状态{s1, s2, …, sk}。
16
2014-9-28

算法描述:
– 1 开始,假定所构造的子集族为C,令e-
closure(K0)为C中唯一成员,并且它是未被标 记的。 – 2 while (C中存在尚未被标记的子集T)do { 标记T; for 每个输入字母a do { U:= e-closure(move(T,a)); if U不在C中 then 将U作为未标记的子集加在C中 } }
2014-9-28 18
两个状态相互等价是指: 对于给定的 DFA M, 假定状态s1,s2∈S且s1≠s2, 若从s1 出发能识别字符串而停于终态 , 从s2出 发也能识别而停于终态; 反之, 若从s2出 发能识别 而停于终态 , 从 s1 出发也能识 别而停于终态, 则称s1和s2等价, 否则称 s1和s2是可区分的。 假定状态s1,s2∈S且s1≠s2, 若s1和s2 通过同一字符(串)到达了可区分的状态, 则s1和s2也是可区分的。
2014-9-28 23
划分结束后, 子集个数不再增加, 从每 个子集中选一个状态形成新的DFA。
例如, I(i)={s1, s2, s3} 若挑选s1作为I(i)的代表,则原来指向s2 和s3的有向边均改为指向新DFA中的s1。 若I(i)中含原来的初态,则s1为新初态;
若I(i)中含原来的终态,则s1为新终态。
I {X,1,2,3,Y } {2,3,1,Y} Ia {2,3,1,Y } {2,3,1,Y} Ib {2,3,1,Y} {2,3,1,Y}
重命名得状态转换矩阵: S 0 1
a 1 1
b 1 1
由于(a|b)*和(a*b*)*对应的状态转换矩阵 相同, 故二者等价。
2014-9-28 32
例2.11 C语言可接受的合法文件名为 device: name.extension 其中device:和.extension可省。假定device, name和extension都是字母串, 长度不限但至 少为1, 试画出识别文件名的DFA M。 解: 所求正规式为(cc*:|e)cc*(.cc*|e) 相应的NFA M如下图所示:
2014-9-28 21
s1 s2
a a
s
3 s 4
s 1 s2
a
s 3
a s 4
(a)无需划分
(b)需划分
2014-9-28
22
如何进行子集的划分呢?
假定当前子集I(i)={s1,s2,…},其中s1和s2经 过有向边a分别到达状态t1和t2, 而t1和t2分属于 当前已划出的两个不同子集I(j)和I(k),则应将I(i) 分为两部分: I(i1)= {s | s∈I(i)且s经有向边a到达t1} I(i2)= I(i) −I(i1) (由于t1和t2是可区分的, 因此I(i1)中的状态与I(i2)中的状态可区分)
2014-9-28 6
X
b*(d|ad)(b|ab)(b|ab)* 2 b|ab 3
Y
X Xε
b* 1 d|ad b
4 b ε 1 ad
(b|ab)*
Y
d
2
b
3 ab b 2
b|ab ε 5 ε b 3 ε Y
X
ε
4 ε
d 1
a
6
d a
7
b
5 ε a b 8
Y
2014-9-28
7
Thompson方法构造的NFA有下列性质: 只有一个开始状态和一个接受状态,接 受状态没有向外的转换。
2014-9-28 9
例2.7 对下图,取 I=e_CLOSURE{1}={1,2}, 求从状态I出发经一条有向边a所能 到达的状态集J和e_CLOSURE(J)。
a 5 e e a e 6
1
e
a
2 4
3 7
e
8
J={5, 3, 4} e_CLOSURE(J)={5, 6, 2, 3, 8, 4, 7}
2014-9-28
2
有限自动机和正规表达式的等价性:

1.对于∑上的一个NFA M,可以构造一 个∑上的正规式R,使得L(R)=L(M)。 2.对于∑上的一个正规式R,可以构造一 个∑上的NFA M,使得L(M)=L(R)。


注意:与某一NFA等价的DFA不一定唯 一。
3
2014-9-28
2.4 正规式到有限自动机的构造


r1*
的转换规则可不可以改为?
e r1 e sj
si
例:(11+)*
2014-9-28
8
2.4.2 NFA M的确定化 --子集构造法(Subset Construction) 首先 定义FA M的任一状态子集 I 的 e_CLOSURE(I): (1)若si∈I, 则si∈e_CLOSURE(I); (2)若si∈I, 则从 si 出发经过e所能到达的 状态 sj 属于e_CLOSURE(I)。 其次 定义Ia: 对FA M的任一状态子集 I , 若a是Σ中的 一个字符,则定义 Ia=e_CLOSURE(J), 其中 J 是从 I 中某一状态出发经过a所能 到达的所有状态的集合。 J=move(I,a)
M。
si
si
r2
r1 e
sj sk
r2
sj
sj
sj
sj
si
sk e r1
2014-9-28
5
对于正规式R,首先将其表示为拓广 转换图,其中X为初态,Y为终态,然后逐步 运用三条转换规则不断加入新结点,直至 每条有向边上仅标识Σ的一个字母或ε为 止,至此 NFA M构造完成。 例2.6 构造 b*(d|ad)(b|ab)+对应的NFA。 解: 首先用R+=RR*把正规式改造为 b*(d|ad) (b|ab) (b|ab)* 然后构造其NFA M,如下图所示:
2014-9-28 17
2.4.3 DFA M的化简 (DFA Minimization) NFA确定化所得的DFA可能含有多余 的状态, 需化简。所谓DFA M的化简,是 指寻找一个状态数比M少的DFA M',使得 L(M) = L(M')。 化简后的DFA M' 满足下述条件: (1) 无多余状态 (死状态); (2) 状态集中无相互等价(不可区别) 的状态。
DFA M的化简方法 (Hopcroft算法) : (1)首先将DFA M的状态集S中的终态与非终 态分开,形成两个子集,得到基本划分。 (2) 对当前已划分出的 I(1),I(2),…,I(m) 子集, 看每 个 I 是 否 能 进 一 步 划 分 。 对 某 个 I(i)= {s1,s2,…,sk}, 若存在输入字符a∈Σ使得Ia(i)不 全包含在当前划分的某个子集 I(j) 中 , 即跨 越两个子集, 则将I(i)一分为二(下页)。 (3)重复(2), 直到每个子集均不能再分。 不能再分是指子集要么仅有一个状态,要 么有多个状态但这些状态不可区分。
13
重命名为: S 0 1 2 3 4 5 6
2014-9-28
a 1 3 1 3 6 6 3
b 2 2 4 5 4 4 5
14
于是得到对应的DFA如下:
a a b b
a 0 b b
1
3 2
5 2 aபைடு நூலகம்a
a
2 b 4 2 b a
b
6 2
2014-9-28
15

注意:如果DFA的某个状态至少包含NFA的 一个接受状态,那么,这个状态是DFA的一 个接受状态。
2014-9-28
Ia {1,2,3} {1,2,3,5,6,Y} {1,2,3} {1,2,3,5,6,Y} {1,2,3,6,Y} {1,2,3,6,Y} {1,2,3,5,6,Y}
Ib {1,2,4} {1,2,4} {1,2,4,5,6,Y} {1,2,4,6,Y} {1,2,4,5,6,Y} {1,2,4,5,6,Y} {1,2,4,6,Y}
2014-9-28 19
DFA M的状态最小化过程: 将 M 的状态集分割成一些不相交的 子集,使得任意两个不同子集的状态是 可区分的,而同一子集中的任意两个状 态都是等价的。 最后 , 从每个子集中选出一种状态, 同时消去其它等价状态,就得到最简的 DFA M'且L(M) = L(M')。
2014-9-28 20
2014-9-28 24
例2.9 化简由例2.8得到的DFA。
a 0 b 1 a 2 b b 4 2 a a a 3 2 b b a a 6 2 5 2 b
b
解: (1)先将状态集S={0,1,2,3,4,5,6}划分为 终态集{3,4,5,6}和非终态集{0,1,2}。 (2)考察{0,1,2}a:因{0,2,1}a={1,3}不属于 {3,4,5,6}和{0,1,2},故将{0,1,2}划分为 {0,2}和{1}。 2014-9-28 25
相关文档
最新文档