- 1、本文档共78页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理陈火旺版第三章概要
显然 : DFA是NFA的特例,但是对于每个NFA M存在一个DFA M〃, 使得 L(M)=L(M〃) 证明: ⑴假定NFA M=S,∑,δ,S0,F,对于M的状态转换图进行以下改造: ①引入新的初态结点X和终态结点Y; X,Y?S, 从X至S0中任意初态结点连一条ε有向弧,从F中任意终态结点连一条ε有向弧到Y。 ②对M的状态转换图使用图3.7所示的替换规则进行替换,其中k是最新引入状态。 重复上述替换,直到每条弧的标记或为ε或为∑中单个字母,即可得到NFA M′,显然L(M′)=L(M)。 ⑵ 将M′变换成DFA,方法如下: ①假定 I 是M′状态集的子集,定义I 的ε闭包 ε_closure(I)为: (a) 若q∈I,则q∈ε_closure(I) (b) 若q∈I,则从q出发经过任意条ε弧而能到达的任何状态q′∈ε_closure(I) i j AB 代之以 i j k A B i 代之以 代之以 i j A|B j A B A i j k ε ε i j A* 图3.7 替换规则 ②假定I是M′状态集的子集,a∈∑,定义 Ia=ε_closure(J) 其中J是那些可从 I 中的某一状态结点出发经过一条a弧而到达的状态结点的全体。 ③假定∑={a1,……,ak},构造表(即状态转换表)(k+1)列,首行首列为ε_closure(x),如果某一行第一列的状态子集已经确定,例如记为I,那么置该行的i+1列为Iai(i=1,……,k),然后检查该行上的所有状态子集,看它们是否已在表的第一列中出现,将未曾出现者填入到后面空行的第一列。重复上述过程直至出现在第i+1列(i=1,……,k)上所有的状态子集均已在第一列上出现。因为M′的状态子集个数是有限的,故必定在有限步内终止。 视该表为状态转换表,将其中每个状态子集视为新的状态,显然,该表唯一地刻划了一个DFA M〃,初态是首行首列的那个状态,终态是那些含有原终态的状态子集。 根据上述构造方法,显然有:L(M〃)= L(M′)= L(M) 上述把NFA确定为DFA的方法为子集法。 例3.3 正规式(a|b)*(aa|bb)(a|b)*对应的NFA如图3.6所示,其中X为初态,Y为终态。按照上述证明过程构造出来的状态转换矩阵见表3.3。 Y X 5 3 4 1 2 6 a ε b ε a a b b ε a b ε 图3.6 非确定有限自动机 表3.3 对应于例3.3中正规式的状态转换矩阵 {5,4,1,6,Y} {5,3,1,2,6,Y} {5,3,1,6,Y} {5,4,1,2,6,Y} {5,3,1,6,Y} {5,4,1,2,6,Y} {5,4,1,2,6,Y} {5,3,1,6,Y} {5,4,1,6,Y} {5,4,1,6,Y} {5,3,1,2,6,Y} {5,3,1,2,6,Y} {5,4,1,2,6,Y} {5,3,1} {5,4,1} {5,4,1} {5,3,1,2,6,Y} {5,3,1} {5,4,1} {5,3,1} {X,5,1} Ib Ia I 对表3.3中所有状态子集重新命名,得到表3.4所列的状态转换矩阵。 表3.4 对表3.3中状态子集重新命名后的状态转换矩阵 4 3 6 5 6 5 5 6 4 4 3 3 5 1 2 2 3 1 2 1 0 b a 状态 与表3.4相对应的状态转换图如图3.8所示。其中0为初态,3,4,5,6为终态。 ⑤ ③ ④ ⑥ 2 1 0 b b b a b b b b a a a a a a 图3.8 未化简的DFA a,b a 4 3 0 1 2 ε b ε 例:将下面的NFA确定化为DFA a(a|b)*b 3.3.4 正规文法与有限自动机(FA)的等价性 对于正规文法G和有限自动机M,如果L(G)= L(M),则称G和M是等价的。关于正规文法与有限自动机的等价性,有以下结论: 1 对于每一个右线性正规文法或左线性正规文法G,都存在一个FA M,使L(M)= L(G)。 2 对于每一个FA M,都存在一个右线性正规文法GR和一个左线性正规文法GL,使L(M)= L(GR)= L(GL)。 证明1: (1)给定右线性正规文法G=(VT,VN,S,ρ),设f? VN ,令M=(Q,VT,?,S,F), 其中,F= ?f?,Q= VN∪?f?。 状态转换函数 ? 定义如下: (a) 产生式 A ? a, 则令 ?(A,a)=f (b) 产生式 A ? aA1?aA2 ?...?aAn 则令 ?(A,a)= ?A1,
文档评论(0)