南开大学编译原理第三章PPT课件.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
南开大学编译原理第三章PPT课件

语法树表示正规式(续) start A B 1 C D 2 E 3 4 5 F e e e e e e e e a a b b b 6 # (a|b)*abb#对应的NFA 3.9.2 正规式直接转换为DFA 扩充正规式(r)#,构造语法树T nullable, firstpos, lastpos, followpos 函数nullable, firstpos, lastpos定义在T的结点上 followpos函数定义在position集上,其计算依赖上面三个函数 最后,利用followpos构造DFA followpos 符号只在标有该符号的position处匹配 position的相邻关系,e-closure(d(…)) followpos——表示位置间的相邻关系 i:一个position followpos(i):一个position集合,其中的每个position j满足: 存在一个输入串…cd… c在i处匹配,d在j处匹配(i,j相邻) j跟随(follow)i 例3.21 (a|b)*abb#:followpos(1)={1, 2, 3} B 1 C D 2 E 3 e e e e e e a b 1 1 2 2 1 3 4 5 a a b b a a b b followpos的计算 对子正规式,其首尾符号的对应位置之间存在跟随关系 rs,s的首位置跟随r的尾位置 r*,r的首位置跟随其尾位置 firstpos(n):对以n为根的子正规式,可匹配其首符号的位置的集合 lastpos(n):可匹配尾符号的位置的集合 前例: firstpos(n) = {1, 2, 3}, lastpos(n) = {6} nullable(n):可匹配空串 计算firstpos, lastpos, nullable 结点n firstpos(n) n是标记为e的叶结点 n是标记为 位置i的叶结点 nullable(n) true false ? {i} nullable(c1) or nullable(c2) firstpos(c1) ∪ firstpos(c2) 计算firstpos, lastpos, nullable 结点n firstpos(n) nullable(n) true nullable(c1) and nullable(c2) if nullable(c1) then firstpos(c1) ∪ firstpos(c2) else firstpos(c1) firstpos(c1) 计算followpos lastpos计算同firstpos,c1、c2交换即可 followpos的计算 n——·结点,左孩子c1,右孩子c2, i∈lastpos(c1),c1的尾位置? 对所有j∈firstpos(c2) ,j∈followpos(i) n——*结点, i∈lastpos(n),n的尾位置? 对所有j∈firstpos(n) , j∈followpos(i) 例3.22 位置 1 2 3 4 5 6 followpos {1,2,3} {1,2,3} {4} {5} {6} - 例3.22(续) 有向图 位置——状态,j∈followpos(i)——边i?j a a b b a a b b b 例3.22(续) 看作NFA firstpos(root)中的位置均为初态 边(i, j)标记为位置i的符号 #对应位置为唯一终态 a a b b a a b b b 算法3.5 正规式直接构造DFA 输入:一个正规式r 输出:一个DFA D,L(D)=L(r) 方法: 构造扩充正规式(r)#对应的语法树T 深度优先搜索T,计算函数nullable, firstpos, lastpos和followpos 构造D的状态集Dstates和状态转换表Dtran,算法如下所示。状态——位置集,firstpos(root) 为初态,#对应位置为终态。 算法3.5 (续) 构造Dstates和Dtrans算法 初始,Dstates中唯一状态为firstpos(root),设为未标记,其中root为(r)#对应语法树的根; while (Dstates中有未标记状态T) { 标记T; for (每个符号a) { U=∪followpos(p) (p∈T, 且位置p处符号为a); if (U不空且不在Dstates中) { 将U加入Dstates,设为未标记; } Dtran[T, a] = U; } } 例3.23 A=firstpos(root)={1, 2, 3} Dtrans[A, a]=followpos(1)∪followpos(3)={1,2,3,4}=B Dtrans[A, b

文档评论(0)

feixiang2017 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档