编译原理3.3.3-2 NFA确定化.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第三章 词法分析 3.1 对于词法分析器的要求 3.2 词法分析器的设计 3.3 正规表达式和自动机 3.4 词法分析器的自动产生 3.3.3 非确定有限自动机 1. NFA 的定义 2. NFA的表示方式 3. NFA如何作为识别机制 4. 一个NFA所定义的语言 L(M) 5. 有穷自动机等价的定义 6. NFA的确定化 6. NFA的确定化 DFA和NFA的区别 初态是否唯一 转换函数是否为单值映射 DFA是NFA的特例 定理 设L为一个由NFA接受的集合,则存在一个接受L的DFA 。 对于每个NFA M存在一个DFA M′, 使 L(M) = L(M′) 。 p49 NFA的确定化 – 子集法 定义对状态集合I的几个有关运算 1) 状态集合I的ε-闭包 2) 状态集合I的a弧转换 1). 状态集合I的ε-闭包 ε-closure(I) 若q∈I,则 q∈ε_CLOSURE(I); 若q∈I,则 从q出发经任意条ε弧而能到达的任何状态q′都属于ε_CLOSURE(I); 补充例 : 补充例 2).状态集合I的a弧转换 Ia I={s1, s2,…, sj} move(I,a) = δ(s1, a)? δ(s2, a)?…? δ (sj, a) Ia =ε_CLOSURE(move(I,a)) 补充例: 状态集合I的a弧转换 Ia Ia子集是从子集I出发,经过一条a弧(前后可以跳过任意条?弧)而到达的状态的集合。 NFA的确定化算法 步骤一: 假定NFA N={S, ∑,δ,S0, F}, 对N的状态转换图进行改造得到N′ 步骤二: 将NFA N′确定化为DFA M (子集法) 步骤一 : 假定NFA N={S, ∑,δ,S0, F}, 对N的状态转换图进行以下改造 ① 引入新的初态结点X和终态结点Y 从X到S0中任意状态结点连一条ε箭弧, 从F中任意状态结点连一条ε箭弧到Y. 将NFA转换成具有唯一初态和唯一终态的NFA ② 对N的状态转换图施行替换得到N′ 使状态转换图中的每条箭弧上的标记 或为ε, 或为∑中的单个字母. 步骤二 : 将NFA N′确定化为DFA M NFA N′={S,∑,δ,S0, F}, 构造一个 DFA M=(SM,∑M,δM,S0M,FM), 使得L(M)=L(N′) (1)M的状态集SM 由S的一些子集组成 用 [S1 S2... Sj] 表示SM的元素, 其中 S1, S2,,... Sj是S的状态。 (SM 是一个子集族) (2)M的输入字母表∑M 和N′是相同的, 即∑M = ∑ (3)转换函数δM δM([S1 S2... Sj], a) =ε-closure(move([S1, S2,... Sj],a)) 即集合[S1 S2... Sj]的a弧转换 (4)M的初态 S0M = ε-closure(S0), 从N的初态S0出发, 经过任意条ε弧所能到达的状态所组成的集合 (5)M的终态集合FM FM ={[Sj Sk... Se], 其中[Sj Sk... Se]∈SM 且 {Sj , Sk,,... Se}∩F≠φ }, 即构造的子集族中凡是含有原NFA终态的子集都是DFA的终态。 将NFA N′确定化为DFA M 的步骤: S0M = ε-closure(S0) 对每个a?∑, 将S0M的a弧转换作为下一状态置于SM中。 即: 把从S0出发经过一条标记为a的弧所能到达的状态(其前其后可经过若干条ε矢线)所组成的集合作为下一个状态置于SM中. 如此反复, 直到没有新的状态出现为止. 补充例: NFA的确定化 – 子集法 上例 确定化结果 * 补充: 子集法的算法 假定所构造的子集族为C,C = (T1, T2,... Ti), T1,... Ti为状态S的子集。 ① 令e-closure(X)为C中唯一成员, 且它是未被标记的 ② while ( C中存在尚未被标记的子集T) do { 标记T; for 每个输入字母a do { U:= Ta; if U不在C中 then    将U作为未标记的子集加在C中 } } I={1}, ε-closure(I)={1, 2} I={5}, ε-closure(I)={5, 6, 2} I={1, 5}, ε-closure(I)={1, 2, 5, 6} ε-closure({0}) = {0, 1 , 2 , 4 , 7 } ε-closure({3,8}) = {3, 6 , 1 , 2 , 4 , 7 , 8} I = {1,2} Ia =ε

文档评论(0)

xuefei111 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档