编译原理与编译构造 由NFA变为DFA
来源:互联网 发布:摄影测量info软件 编辑:程序博客网 时间:2024/05/16 11:08
本文主要来源于上课笔记
单词构造的两种方法:
- 正规文法
形如
缺点是不直观
- 正规表达式
采用模板,好处是直观
1)
2)
例:
词法分析:
FA: 状态数目有限,是一个有始有终的过程模型
FA的组成:
其中,
若
由NFA变为DFA
- 存在
ϵ− 边 - 有多个后继状态
1.
第3张图是一个
2.
此时是一个子集构造
此时迭代完成,知
我们规定初始状态是
由于
最终所有的状态都应该由上面
结论1: 最多情况下由
结论2:核相同,则
对DFA进行优化
总的思想是,减少状态数。使用的方法是,等价类划分,使用聚类的思想。
Division:
- clustering(聚类)——自下而上
- classifying(分类)——自上而下
在这里我们需要将
- 发出的边数相同
- 对应的标记相同(就是箭头上面的标记)
- 对应的后继状态等价
易见这是一个递归定义。
若两个状态相同,则两个状态等价(强等价)。
若后继状态相同,则两个状态等价(强等价)。
若后继状态属于同一个已存在的叶节点,则弱等价。
由一开始的初始态和终态,得出上图。
由于
此时可见
同理,由b得到上图。
在每个叶节点中选一个节点,在最右边的叶节点中选
此时整个图已经变成了这样。这也叫做
注意,需要用到
如下例子:
过程略一下。
RE转NFA的方法
方法1:
一些RE转NFA的规则(人喜欢的方法,也是考试时用的方法):
方法2:
方法2是龙书上的算法,笔记上有,由于考试不考,实验要用,因此现在先不管。以后再说。
一个词法分析程序分析所有单词。
- 编译原理与编译构造 由NFA变为DFA
- NFA转DFA 《编译原理》
- 编译原理NFA到DFA
- 【编译原理】:NFA转变为DFA的子集构造法
- 【编译原理】:NFA转变为DFA的子集构造法
- <编译原理>NFA转化DFA 及 DFA的化简
- 编译原理实验——将NFA转化为DFA
- 编译原理中的正则表达式、NFA和DFA
- 编译原理中的正则表达式、NFA和DFA
- 个人学习笔记——编译原理:NFA DFA
- 编译原理 —— 正则->NFA->DFA->MFA (Web)
- 编译原理与编译构造 由语言构造文法1
- 编译原理与编译构造 由语言构造文法2
- 编译原理(二) NFA的确定化及DFA的最小化的算法及C++实现
- 编译原理(二) NFA的确定化及DFA的最小化的算法及C++实现
- 编译原理(二) NFA的确定化及DFA的最小化
- DFA与NFA
- DFA与NFA
- 艺龙面试的...
- Oracle Database中DBA常用的表和视图
- linux nginx 301 跳转
- Django 1.10中文文档-聚合
- IntelliJ IDEA 2016.3.4(64)激活码
- 编译原理与编译构造 由NFA变为DFA
- HDU 5971 Wrestling Match(dfs)2016 icpc 大连 A题
- OpenGL 数据格式 像素格式 数据包格式 详解
- 单链表的逆序
- Java NIO
- Who Gets the Most Candies?(线段树+单点更新)
- 关于搭建cordova和ionic环境过程中遇到的坑总结
- BUG集
- Java day5