NFA转DFA的算法在编译原理的课本上都有,只不过课本上的算法太拗口,不好记!我在这里边说的都很通俗,只要看得懂字的都会懂。在本篇文章里用一个例子来说明怎么实现NFA转DFA与DFA简化,NFA转DFA会讲的比较细,DFA简化只是大概带过。

有一个NFA,如图:

要是想把NFA转成DFA,首先需要构造一张表(最主要的就是这张表),如图:

上图没有给出全部的转换关系,当然,大家这么聪明,在看了构造表的算法之后就会自己构造转换表了。构造转换表的算法如下(表中的第一列是给为化简的DFA状态取的名字,第二列也是DFA中的状态,第三列和第四列是DFA在某一状态在读取a、b时跳转到的状态):

  1. 首先把NFA转换为上图所示的模样。
  2. 从NFA的初始状态开始,把从初始状态跳空能到的状态以及该状态跳空能到的状态填在第二列第二行中,直到没有新的状态能够由已得到的状态跳空得到为止,就如{X,1,2}。
  3. 第二列的状态分别对应NFA图来分别跳a,跳a后的状态填在Ia列以及跳a行对应的单元中,得到的状态再跳空,如果NFA对应的状态有跳空则把跳空后的状态也填入同一个单元格中,如上表的{1,3,2}。
  4. 跳b的情况也与跳a的情况类似,把第三步的跳a改成跳b即可。
  5. 经过3、4步得到的状态再把他们分别填在第二列中,用2-4的步骤来生成经他们读a、b能到的状态。
  6. 重复3-5。
  7. 当表中的所有状态都出现在第一列时说明表的构造已经完成了。

在构造了表之后就可以通过这个表来构造相应的DFA了(有X的是初态,有Y的是终态),在这里不再赘述怎么用表来构造DFA。

在构造了DFA之后就需要来化简它了,化简DFA的算法如下:

  1. 先分成非终态和终态两个大的状态。
  2. 再在这两个状态里边找跳a、b后所到的状态不在其所在集合里边的状态,把它单独作为一个状态分出去(即需要区分状态内部是否识别a、b)。
  3. 得到的新状态再分别使用步骤2的方法,直到没有新的状态产生为止(即所有的状态内部都能够识别a和b)。

上述所说的方法结合例子来看就更容易理解了!

NFA转DFA与DFA简化相关推荐

  1. 【C++实现】编译原理 免考小队 NFA转换为等价的DFA

    背景 期末考试免考,冲! 实验名称 对任意给定的NFA M进行确定化操作 实验时间 2020年5月21日 到 2020年5月24日 院系 信息科学与工程学院 组员姓名 Chocolate.kry202 ...

  2. 【计算理论】计算理论总结 ( 非确定性有限自动机 NFA 转为确定性有限自动机 DFA | 示例 ) ★★

    文章目录 一.NFA 转 DFA 示例 1 二.NFA 转 DFA 示例 2 三.NFA 转 DFA 示例 3 一.NFA 转 DFA 示例 1 将下图的 非确定性有限自动机 NFA 转为确定性有限自 ...

  3. NFA、DFA模拟、正则表达式转NFA、NFA转DFA、DFA转正则、DFA最小化的python实现项目

    各类自动机模拟实现 项目地址: https://github.com/HuiyuanYan/automaton_simulation 注:这个github链接必须复制重新在浏览器打开,不能通过CSDN ...

  4. dfa算法(dfa算法)

    dfa和nfa的基本概念及其区别? 基本概念: 1. 确定有限自动机(Deterministic Finite Automaton) 简称DFA.dfa是匹配速度,是确定的. 2. 非确定有限自动机( ...

  5. 编译原理——正规式、NFA转换构造DFA、DFA的化简

    一.DFA和NFA的区别 NFA:非确定有限自动机 DFA:确定有限自动机 NFA在同一状态,可以有多条出边,DFA在同一状态,只能有一条出边: NFA的初态可以具有多个,DFA的初态是唯一的: 比如 ...

  6. NFA到DFA的转换及DFA的简化

    还不太了解有穷自动机或是NFA的同学可以先看我的上一篇文章:正则到NFA的转换 tips:评论区之前提到状态1得到6是由于之前的图有瑕疵,现在图已更正 确定型有穷自动机 确定型有穷自动机是不确定有穷自 ...

  7. java 实现nfa的化简_DFA与NFA的等价性,DFA化简

    等价性 对于每个NFA M存在一个DFA M',使得L(M)=L(M')--------等价性证明,NFA的确定化 假定NFA M=,我们对M的状态转换图进行以下改造: 解决初始状态唯一性:引进新的初 ...

  8. [转]NFA/DFA算法

    作者:陈梓瀚  (http://www.cppblog.com/vczh/) 1.问题概述 随着计算机语言的结构越来越复杂,为了开发优秀的编译器,人们已经渐渐感到将词 法分析独立出来做研究的重要性.不 ...

  9. 词法分析(NFA与DFA)

    词法分析(1)---词法分析的有关概念以及转换图 词法分析是编译的第一个阶段,前面简介中也谈到过词法分析器的任务就是: 字符流------>词法记号流 这里词法分析和语法分析会交错进行,也就是说 ...

最新文章

  1. 词频统计-------------web版本
  2. Eclipse和MyEclipse自动提示设置
  3. python之解析最简单的xml
  4. 第七章 假设检验(3)
  5. (需求实战_进阶_07)SSM集成RabbitMQ 订阅模式 关键代码讲解、开发、测试
  6. Python打印某范围内的素数
  7. Retrofit网络请求框架使用简析——Android网络请求框架(四)
  8. 非线性优化库Ceres问题记录
  9. 【GitHub】知识蒸馏从入门到精通
  10. Linux配置静态IP 详细截图
  11. AnkhSvn推出1.02支持vs2008
  12. 同时删除多个 Excel 文档空白行
  13. python社交网络图
  14. 计算机网络的地址三类,计算机网络中有几种地址格式
  15. Python获取指定月份的所有天数
  16. R语言入门——猜数游戏
  17. 王者荣耀微信转qq服务器,王者荣耀转区qq转微信可以吗 qq转区微信可以吗
  18. AV/EDR 免杀逃避技术汇总
  19. [渝粤教育] 西南科技大学 投资项目评估 在线考试复习资料
  20. PHP汉字转拼音函数

热门文章

  1. js实现玫瑰动画效果
  2. ubuntu 安装thinkphp-swoole
  3. 实验九.MATLAB数值积分
  4. 【一级考试专题-1】整数和均值
  5. 计算机efs恢复工具,重装系统后如何恢复对EFS加密文件的访问
  6. 解决(‘You must install pydot (`pip install pydot`) and install graphviz (see...) ‘, ‘for plot_model..
  7. ZIP entry size is too large
  8. 机器学习-各类学习器评价指标
  9. mac笔记本当做服务器记录
  10. 数据库基本知识-总结