7-LR分析.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文档。上传文档
查看更多
7-LR分析

第七章 LR分析 引言 自底向上分析方法是一种移进-归约过程,方法的关键是如何确定栈顶符号串形成句柄。在第6章中介绍了优先分析法,但缺乏广泛的实用性。 本章介绍另一种自底向上分析方法: ---LR(K)分析法。 优点:适用于大多数无二义性上下文无关文法;而且分析速度快;能准确、即时地指出出错位置。 缺点:对于一个实用语言文法的分析器的构造工作量相当大;而且“K”愈大构造愈复杂。 引言 LR(K)的符号意义: L:表示从左向右扫描输入串。 R:表示使用最右推导(规范推导)的逆过程,也就是规范归约过程。 K:表示向右查看输入串符号的个数。 比如,本章介绍的LR(0)、LR(1)分析法分别表示向右查看0个、1个字符。 本章知识结构 LR分析器的构成 一个LR分析器由3个部分组成: (1) 总控程序:也可以称为驱动程序。 (2) 分析表(分析函数):可分为动作表(ACTION)和状态转换(GOTO)表两个部分,都可用二维数组表示。 LR分析器的机理 LR分析器的机理 LR分析器的机理(续) [4] 归约:如果Action表表格中标记为“ri”,表示,在符号栈栈顶形成了句柄β,则用产生式i归约为某个非终结符A 。假设句柄长度为r,则执行步骤为:  ① 从状态栈和符号栈中去掉r个符号,即栈指针SP减去r。状态栈的当前栈顶不再是S*,已回退到Si, ② 把A移入符号栈 ③ 查GOTO表,第Si 行的第A列,将表格中所记的状态Sj移入状态栈。该操作记为:Sj = GOTO[Si,A] 。 例如:表7.2中的步(3):当前状态栈栈顶为4,输入为b,查Action表为“r2”,即用产生式2归约。SP=SP-1,把A移入符号栈,这时,状态栈为2,符号栈为A,则查GOTO表得状态3,则将3移入符号栈。 记为:3=GOTO[2 , A] LR(0)分析举例 下面以文法G[S]为例,说明LR(0)分析的一般过程:   (1) S→aAcBe  (2) A→b  (3) A→Ab  (4) B→d 对输入串abbcde#用自底向上归约的方法进行分析。 LR(0)分析举例(续1) G[S] : (1) S→aAcBe  (2) A→b  (3) A→Ab  (4) B→d LR(0)分析举例(续2) G[S] : (1) S→aAcBe  (2) A→b  (3) A→Ab  (4) B→d LR(0)分析举例(续3) G[S] : (1) S→aAcBe  (2) A→b  (3) A→Ab  (4) B→d 7.2.1 可归前缀和活前缀 给产生式添加标号[ i ] 。例如,6.1的文法: (1) S→aAcBe[1] (2) A→b[2]  (3) A→Ab[3] (4) B→d[4] 标号[ i ]便于观察推导过程。现在分析abbcde: S ? aAcBe[1] ? aAcd[4]e[1] ? aAb[3]cd[4]e[1] ? ab[2]b[3]cd[4]e[1] 可看出,采用用哪个产生式归约仅取决于当前句型的前部,上例中每次归约前句型的前部依次为:   ab[2]  aAb[3]   aAcd[4]  aAcBe[1] 可归前缀和活前缀的定义 规范句型:归约后得到的部分和原串的剩余部分合起来的字符串。 可归前缀:规范句型的可归约的前部。 例如对于规约过程: ab[2]b[3]cd[4]e[1] ? aAb[3]cd[4]e[1] ? aAcd[4]e[1] ? aAcBe[1] ? S 得到的可归前缀是:ab[2] aAb[3] aAcd[4] aAcBe[1] 活前缀:形成可归前缀之前、包括可归前缀在内所有规范句型的前缀。例如: ε, a, ab 活前缀的形式定义 活前缀[形式定义]:设 是文法G’中的一个规范推导,符号串γ是??的前缀,则称γ是G’的一个活前缀。 实际上γ是规范句型???的前缀,但它的右端不超过该句型的句柄末端(其中A→β是一产生式,ω∈VT*) 在LR分析过程中,实际上是把??的前缀放在符号栈中,通过不断移进和规约,直至在栈中出现??,即句柄已形成,则用A→β归约。 例如在上例中:aAcd[4]e[1]是一个规范句型,当栈中出现“aAcd”时,即用B→d规约。 LR分析法的机理: 通过识别句子的: 活前缀???可归前缀(内含句柄) 解决两大问题: 什么时候出现句柄 出现什么样的句柄 这样,问题转化为:如何识别活前缀? 拓广文法 拓广文法:若原文法G的开始符号为S,在G中加产生式S’→S后得

文档评论(0)

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

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

1亿VIP精品文档

相关文档