编译原理与编译构造 由NFA变为DFA
本文主要来源于上课笔记
单词构造的两种方法:
- 正规文法
形如
缺点是不直观
- 正规表达式
采用模板,好处是直观
1)
2)
例:
词法分析:
FA: 状态数目有限,是一个有始有终的过程模型
FA的组成:
其中,
若
由NFA变为DFA
- 存在
ϵ− 边 - 有多个后继状态
1.
第3张图是一个
2.
此时是一个子集构造
此时迭代完成,知
我们规定初始状态是
由于
最终所有的状态都应该由上面
结论1: 最多情况下由
结论2:核相同,则
对DFA进行优化
总的思想是,减少状态数。使用的方法是,等价类划分,使用聚类的思想。
Division:
- clustering(聚类)——自下而上
- classifying(分类)——自上而下
在这里我们需要将
- 发出的边数相同
- 对应的标记相同(就是箭头上面的标记)
- 对应的后继状态等价
易见这是一个递归定义。
若两个状态相同,则两个状态等价(强等价)。
若后继状态相同,则两个状态等价(强等价)。
若后继状态属于同一个已存在的叶节点,则弱等价。
由一开始的初始态和终态,得出上图。
由于
此时可见
同理,由b得到上图。
在每个叶节点中选一个节点,在最右边的叶节点中选
此时整个图已经变成了这样。这也叫做
注意,需要用到
如下例子:
过程略一下。
RE转NFA的方法
方法1:
一些RE转NFA的规则(人喜欢的方法,也是考试时用的方法):
方法2:
方法2是龙书上的算法,笔记上有,由于考试不考,实验要用,因此现在先不管。以后再说。
一个词法分析程序分析所有单词。