《编译与反编译技术》—第2章2.4正规式和有穷自动机的等价性

本节书摘来自华章出版社《编译与反编译技术》一书中的第2章,第2.4节正规式和有穷自动机的等价性,作者庞建民,陶红伟,刘晓楠,岳峰,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.4 正规式和有穷自动机的等价性
正规式和有穷自动机的等价性可以从下面两个方面来说明:
1)对∑上任何NFA M,都存在∑上一个正规式r,使得L(r)=L(M)。
2)对∑上任何正规式r,都存在∑上一个NFA M,使得L(M)=L(r)。
首先介绍如何将∑上的NFA M,转为∑上一个等价的正规式r。在未给出具体的转化算法之前先对状态转换图概念进行拓广,令每条弧可用一个正规式作标记。由有穷自动机构造等价的正规式的算法见算法2.7。
算法2.7 由有穷自动机构造等价的正规式
输入:一个NFA M=(Q,∑,δ,q0,F)
输出:与NFA M等价的∑上一个正规式r
步骤:
1.在M的转换图上加进两个新状态X和Y,从X用ε弧连接到M的初态结点,从M的所有终态结点用ε弧连接到Y,从而形成一个新的NFA,记为M',它只有一个初态X和一个终态Y,显然L(M)=L(M')。
2.反复使用如图2-18所示的合并规则,逐步消去M'的所有结点,直到只剩下X和Y为止。
3.最后,X到Y的弧上标记的正规式即为所构造的正规式r。
例2.26 已知一个NFA M所对应的状态转换图如图2-19所示,试利用算法2.7构造与该自动机等价的正规式。
解:由算法2.7的第1步,在M的转换图上加进两个新状态X和Y,并分别用ε弧将X与M的初态结点,将M的所有终态结点与Y连接,从而形成一个新的NFA,其状态转化图如图2-20所示。
360_20170524100536257
360_20170524100621456
360_20170524100642192

    
图2-19 例2.26中有穷自动机    图2-20 利用算法2.7第1步计算后的结果
所对应的状态转换图

利用算法2.7第2步中的第2条合并规则对图2-20中的转换图进行合并,可以得到如图2-21所示结果。

360_20170524100811783
360_20170524100818270
再反复利用算法2.7第2步中的第1条合并规则对图2-21中的转换图进行合并,可以得到如图2-22所示结果。

    
图2-21 利用算法2.7第2步中的    图2-22 利用算法2.7第2步的
第2条合并规则后的结果    第1条合并规则后的结果

由算法2.7的第3步可知,(letter|_)(letter|_|digit)*即为最终所求的正规式。
下面介绍将正规式转换为等价的有限自动机的算法,具体见算法2.8。
360_20170524100942269

算法2.8 由正规式构造等价的有穷自动机
输入:∑上的一个正规式r
输出:与r等价的NFA M
步骤:
1.首先,将正规式r表示成如图2-23所示的拓广转换图。
2.按照图2-24所示的分裂规则对正规式r进行分裂。
3.重复步骤2直到每条弧只标记为∑上的一个字符或ε,此时得到转换图所对应的
NFA M即为所求。
例2.27 设有正规表达式(letter|_)(letter|_|digit)*,试利用算法2.8构造与之等价的NFA。
解:由算法2.8的第1步,为正规式(letter|_)(letter|_|digit)*构造拓广转换图,如图2-25所示。
利用算法2.8第2步中的第1条分裂规则对图2-25中的转换图进行分裂,可以得到如
图2-26所示结果。
利用算法2.8第2步中的第2条和第3条分裂规则对图2-26中的转换图进行分裂,可以得到如图2-27所示结果。
再利用算法2.8第2步中的第2条分裂规则对图2-27中的转换图进行分裂,可以得到如图2-28所示结果。由算法2.8的第3步可知,图2-28所对应的NFA即为所求。

图2-24 分裂规则

    
图2-25 (letter|_)(letter|_|digit)*的拓广转换图    图2-26 利用算法2.8第2步
    的第1条分裂规则后的结果
    
图2-27 利用算法2.8第2步的第2条和    图2-28 与(letter|_)(letter|_|digit)*
第3条分裂规则后的结果    等价的NFA所对应的状态图

360_20170524101031783
360_20170524101045205
360_20170524101053030
360_20170524101059008
360_20170524101108742

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值