美文网首页
《编译原理》NFA的确定化及DFA的最小化

《编译原理》NFA的确定化及DFA的最小化

作者: 地球上的新新人 | 来源:发表于2019-10-01 23:11 被阅读0次

教材:姜淑娟,张辰,刘兵.编译原理及应用[M],北京:清华大学出版社,2016.
时间:2019年9月
实现语言:c++
联系邮箱:luxiwen@cumt.edu.cn

- NFA的确定化,Github代码地址
- DFA的最小化,Github代码地址

上课第二周左右,谢红侠老师布置了第一次加平时分作业,期间积极性并不高,虽然一直挂念着,最后还是拖到了9月底才完成。不过全部算法和内容皆是自己思考所得,还是感觉非常兴奋的!

【NFA的确定化】
思路:

  1. 存储NFA图结构使用状态邻接表,矩阵行列均为状态,对应元素为转移字符;
  2. 计算每个节点的e-closure时,使用一个队列维护,进行广度优先搜索(优先遍历相邻状态)
  3. 使用set容器存储状态集合、e闭包(方便插入去重)
  4. 迭代时,使用可变长数组vector。随着计算,不断扩充,直至指针指向末尾(无新集合加入),跳出循环

【运行结果】

NFA的确定化_运行图.jpg

【DFA的最小化】
思路:

  1. (关键)找到需要更新子集号的行,从该行往下的所有子集号加一,即可完成一次更新
  2. 使用数组v存储一遍搜寻时,是否有行需要更新子集(find(1)不返回末尾指针)
  3. 初始存储矩阵时需要存储初始子集状态
    注:最小化中1处思路关键,代码中以注释形式保留了编写时对于程序运行的cout输出观察,删去61行注释符号,即可看到。

【运行结果】

DFA的最小化_运行图.jpg

如果删去61行的注释再运行,可以分析出,程序是怎样执行了循环,最终找到需要开始往下更新子集号的行。话说。。。期间每一步调试都是用的加cout输出来分析。。调试过错并不愉悦。

相关文章

  • 《编译原理》NFA的确定化及DFA的最小化

    教材:姜淑娟,张辰,刘兵.编译原理及应用[M],北京:清华大学出版社,2016.时间:2019年9月实现语言:c+...

  • 编译原理一

    编译原理 正规式或NFA到DFA最小化 四元式DAG图的优化,根据要求写出优化结果翻译到目标代码 给你文法,给你句...

  • NFA-->DFA-->最小化DFA

    心得:按照步骤来走,不会走就别跑,搞得纠结半天为什么简化不了,原来是自己拿着NFA在简化。 题目: 考虑正则表达式...

  • NLP复习笔记-FA

    DFA和NFA的区别 1.DFA没有epsilon transaction (必须读入字符) 2.对每一个确定的状...

  • DFA确定化和最小化

    从正规式开始 一、先将正规式转换成NFA 通过下面的对应法则将正规式转换成NFA 例如: 二、再将NFA转成DFA...

  • 编译原理系列之三 词法分析

    词法分析 NFA与DFA的等价性:对于每个NFA M ′都一定存在一个DFA M,使L(M′)=L(M)。 NFA...

  • NFA到DFA的转换及DFA的简化

    还不太了解有穷自动机或是NFA的同学可以先看我的上一篇文章:正则到NFA的转换 确定型有穷自动机 确定型有穷自动机...

  • NFA转DFA(附代码)

    每一台NFA都有一台等价的DFA 设是识别语言A的NFA,要构造一套DFA M 识别A。再给出完整的构造之前,先考...

  • DFA的最小化算法

    Hopcroft算法 首先划分终态集和非终态集,之后不断进行划分,直到不再发生变化。每轮划分对所有子集进行。对一个...

  • 用 Java 实现一个正则表达式引擎

    实现一个正则表达式需要几步? 就三步: 分析正则表达式并构建出NFA 根据NFA得出DFA 根据DFA匹配字符串当...

网友评论

      本文标题:《编译原理》NFA的确定化及DFA的最小化

      本文链接:https://www.haomeiwen.com/subject/nkgnnqtx.html