教材《编译原理》(龙书)第2版
关于这部分,教材在P94页有说明,但是我觉得不容易理解,下面通过两个例题来理解一下。
目录
例题一:
这一题比较简单,我们直接从答案找解题方法
第一步:要根据NFA画出这个表格,可能有些模糊,表头分别为I,Ia,Ib,状态(是对I这一列自定义的状态名称)
下面我们来说一下第一行的三项如何得出:(S就是开始状态)
先以S开始,经过任意个ε得到的结点就是第一个I,这道题就是{X, 1,2},
然后将{X,1,2}中的每一个字符经过a (中间可以有ε)后得到的结点加起来,
X的Ia={1,2}, 1的Ia={1,2}, 2的Ia是空集,所以这一行的Ia={1,2}。
后面的Ib也是一样,只不过是经过b后得到的结点的集合.
也就是说I的第一行第一列{X, 1,2},是从开始符号经过ε得到的集合,而Ia,Ib是集合中每个结点分别经过a,b得到的集合的并集。
第二行的第一列I,是第一行的Ia,如果仔细观察,就可以发现:第一列都是将前面的Ia和Ib作为I计算新的Ia和Ib。
当然要注意重复的状态集合,就没有必要再作为I写一次了。
直到把所有的新状态都作为I写一遍,这个表就完成了。
第二步:根据表格画出DFA
将这些集合依次标号