正规式、NFA、DFA、最简DFA的转换

在编译原理中,正规式、NFA(非确定有穷自动机)、DFA、最简DFA的转换在词法分析中是十分重要的一个环节。

  • 一般来说:我们经常碰到的问题类型都是如下类型的:
    正规式->NFA->DFA->最简DFA。
  • 对于这类问题我们可以经过以下三个步骤进行解决:
    (1)正规式->NFA(三个替换规则);
    (2)NFA->DFA (子集构造法);
    (3)DFA->最简DFA(分割法)。

知识点储备

三个替换规则

(正规式R到NFA的转化)

子集构造法

  • 预备知识
    (1 )状态集的ε-闭包:状态集I中的==任何状态s经任意条ε弧能到达的所有状态的集合,定义为状态集I的ε -闭包,表示为ε -closure()。

(2)状态集的a弧转换: 状态集I中的任何状态s经过一条a弧而能到达的所有状态的集合,定义为状态集I的a弧转换,表示为move(l,a)。

(3)状态集的a弧转换的闭包: la= ε-closure(move(l,a))。

  • 子集构造法求DFA的步骤

对于输入字符集合∑={a1,a2…ak},我们构造一张k+1列的表格(行数未做限制)。一般来来讲,步骤如下:
(1)表格的第一行第一列的位置写的是从NFA的起始节点经过任意个ε所能到达的结点集合S0的ε-closure(S0)。
(2)接着填写该行剩余位置的信息,做法是在对应的位置上填写la= ε-closure(move(l,a))。Ia表示从该集合开始经过一个a所能到达的集合,经过一个a的意思是可以略过前后的ε。
(3)检查该行上的所有状态子集,如果未在第一列出现,则将该状态子集写到第一列。
(4)重复(2)(3)的步骤,直到所有状态子集均在第一列上出现即可。
(5)然后给状态子集重新编号,需要注意的是,包含原来终态的状态子集为新的终态,按照对应的转换函数f,构造对应的DFA即可。

分割法

  • 预备知识
    (1)无关状态
    ①多余状态:对于一个状态Si ,若从开始状态出发,不可能到达该状态Si,则Si为多余(无用)状态。
    ②死状态:对于一个状态Si,对任意输入符号a,若转到它本身后,不可能从它到达终止状态,则称为Si为死状态。S2为死状态。多余状态和死状态又称为无关状态。
    (2)等价状态:若Si为自动机的一个状态,我们把从Si出发能导出的所有符号串集合记为L(Si)。设有两个状态Si和Sj,若有L(Si)=L(Sj),则称Si和Sj是等价状态。

    (3)可区别状态:Si,Sj不是等价状态即为可区别状态。一般有两种情况:
    ①终止状态和非终止状态是可区别状态。
    ②状态Si,Sj对于∀a∈∑,必须转到等价的状态里面,否则称其实可区别的。

  • 分割法求最简DFA的步骤

(1)首先将DFA的状态集进行初始划分,分成π=(S-Z,Z)。【其中Z为终态集合,S-Z为非终态,终态对于非终态是可以区分的】
(2)用下面的过程对π构造新的划分π new, 对π中每个组G,满足以下条件:
① 任意两个状态Si和Sj在同一组中
② move(Si, a) 和move(Sj, a) 是到不同的组中
则说明Si和Sj是可区别的,可进行划分,在π new中用刚完成的对G的划分代替原来的G, 否则不可以进行划分。
(3)重复执行(2)的操作,直到π中每个状态集都不能再进一步划分为止。
(4)合并等价状态,在每个G中,取任意状态作为代表,删去其它状态。将删去的状态关系全部转到代表状态。
(5)删去无关状态,包括从其它状态到无关状态的转换弧都都删掉。

例题



编译技术:正规式、NFA、DFA、最简DFA的转换相关推荐

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

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

  2. 编译原理 | 由正规式构造确定的有穷自动机DFA

    词法分析: 由正规式构造确定的有穷自动机DFA 解题方法 1. 先由正规式构造转换系统 规则见下图: 2. 再由转换系统构造确定有穷自动机DFA (1) 求 Ia 假定 I 是转换图状态集 K 一个子 ...

  3. 编译原理——正规式转DFA算法概述

    一.概念概述 给定一个单词,判断该单词是否满足我们给定的单词描述规则,需要用到编译原理中词法分析的相关知识,其中涉及到的两个很重要的概念就是正规式(Regular Expression)和有穷自动机( ...

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

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

  5. 编译原理 —— 正规式、正规集和正则定义

    正规式的定义和运算定律 正规式和正则表达式都是通过一定的语法规则来描述文法,但不是同一个概念. 正规式是一种用来描述正则语言的更紧凑的表示方法 正规式可以由较小的正规式按照特定规则递归地构建.每个正规 ...

  6. 编译原理:正规式转变成DFA算法

    //将正规式转变成NFApackage hjzgg.formal_ceremony_to_dfa;import java.util.ArrayList;class Edge{public int u, ...

  7. 正规式生成NFA和DFA

    问题描述 给定正规式,自动生成NFA和DFA,并以表得形式输出NFA和DFA. 算法设计 整行读入正规式后,逐字遍历,生成item数组,item数组第一个元素是空转移,用e表示.然后重新遍历正规式,每 ...

  8. 正规式到nfa dfa java_正规式与正规集,DFA与NFA

    词法分析器的设计 词法分析器的功能:输入源程序.输出单词符号 词法分析器的设计:给出程序设计语言的单词规范--单词表, 对照单词表设计识别该语言所有单词的状态转换图, 根据状态转换图编写词法分析程序 ...

  9. 编译原理实验报告_任意给定一个正规式 r (包括连接、或、闭包运算),根据 Thompson算法设计一个程序,生成与该正规式等价的 NFA N 。

    任意给定一个正规式 r (包括连接.或.闭包运算),根据 Thompson算法设计一个程序,生成与该正规式等价的 NFA N . 百度网盘下载 传送门 提取码:bzjn

最新文章

  1. 太阳能板如何串联_还在犹豫用不用太阳能灯?这些分析让你少花钱,更省钱。...
  2. Spring boot + Redis
  3. java win10 写入c盘_win10 1709 安装后很多软件没有权限向C盘写入文件
  4. python随机生成车牌_使用Python自动化获取全国每个城市的车牌代码
  5. UGUI组件之Canvas 组件简单笔记
  6. VS Code运行C和C++程序
  7. 通过 nginx-proxy 实现自动反向代理和 HTTPS
  8. Python3 爬虫学习笔记 C04 【自动化测试工具 Selenium】
  9. c#获取文件夹路径(转载)
  10. idea 报错is already defined as class
  11. CsharpVB教程下载
  12. 传输线理论  特征阻抗
  13. 一、阿里矢量图标(字体图标)
  14. 一生从未打过败仗的“杀神”白起是怎么死的?
  15. vs2019运行程序提示 程序无法正常启动(0xc000007b)解决方案
  16. 《失控》之五--共同进化
  17. 计算机考研真题及答案(含选择题解析)
  18. 西汉姆VS利物浦,铁锤『拳』出击,打回原『菱』形
  19. 失物招领小程序_上线了!| 失物招领平台全新上线!
  20. java接入短信平台源码

热门文章

  1. nmcli-3种网卡绑定方式
  2. How Distance Transform Maps Boost Segmentation CNNs: An Empirical Study
  3. 三菱R系列ST、RD77MS定位以及三菱触摸屏配方功能,此案例还提供两个触摸屏实现异地操作,使操作更加方便快捷
  4. 深拷贝和浅拷贝的理解-----------【Java基础】
  5. 非静压模型NHWAVE学习(10)——海底滑坡引体发涌浪的模拟算例(Three-dimensional rigid submarine slide)
  6. Java求圆面积自定义异常类
  7. VI设计有四大重要的组成部分
  8. 基于ThinkPHP6的极速后台开发框架
  9. Non-local Neural Network
  10. Windows11忘记开机密码怎么办