博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《编译与反编译技术》—第2章2.4正规式和有穷自动机的等价性
阅读量:6682 次
发布时间:2019-06-25

本文共 1652 字,大约阅读时间需要 5 分钟。

本节书摘来自华章出版社《编译与反编译技术》一书中的第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

转载地址:http://vboao.baihongyu.com/

你可能感兴趣的文章
IE 的浏览器模式和文本模式(一)
查看>>
StaticFilesServer静态文件服务器
查看>>
对SpringAop的思考之基于jdk的动态代理
查看>>
openstack学习笔记五 多节点部署之 rabbitmq信息中枢与元数据
查看>>
count(*),count(1)和count(主键)的区别
查看>>
揭秘设计模式:适配器模式(Adapter)
查看>>
centos救援模式修改root密码
查看>>
sysprep重置windows,封装系统
查看>>
我的友情链接
查看>>
冒泡排序
查看>>
sed学习笔记-2
查看>>
Linux系统的启动和修复模式
查看>>
Citrix ICA协议简要介绍
查看>>
软件发布版本区别介绍
查看>>
python操作selenium的基本操作
查看>>
kvm虚拟机迁移
查看>>
Docker 修改docker容器内部时间
查看>>
解决windows下redis狂占C盘内存
查看>>
yii2高级模板添加新增模块
查看>>
【推荐】(SqlServer)不公开存储过程sp_Msforeachtable与sp_Msforeachdb详解
查看>>