第7章 LR分析new.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分析new.ppt

第7章 LR 分 析 自下而上分析方法是一种移进-规约过程,当分析的栈顶符号串形成句柄时就采取规约动作,因而自下而上分析方法的关键问题是在分析过程中如何确定句柄。 LR(k)分析方法是1965年knuth提出的,其中L表示自左向右逐个读取输入符号,R表示最右推导的逆过程(即,最左规约),k表示向右查看输入串符号的个数。 LR(k)分析方法给出了一种能根据当前分析栈中的符号串和向右查看输入串的k个符号就可确定分析器的动作是移进还是规约和用哪个产生式规约,因而也就唯一地确定句柄。 LR(k)分析方法对文法的限制较少,对大多数用无二义性上下文无关文法描述的语言都可以用相应的LR分析器进行识别。该方法分析速度快,能准确、及时地指出出错位置;但构造LR分析器较麻烦。 第7章 LR 分 析 7.1 LR分析概述 7.2 LR(0)分析 7.3 SLR(1)分析 7.4 LR(1)分析 7.5 LALR(1)分析 7.6 二义性文法在LR分析中应用 7.1 LR分析概述 LR分析器的构造 7.2 LR(0)分析 可归前缀和活前缀 LR(0)项目的概念及分类 LR(0)项目集规范族的构造 LR(0)文法 LR(0)分析表的构造 LR(0)分析过程 7.2 LR(0)分析 例:文法G[S] S→aAcBe A→b A→Ab B→d 7.2 LR(0)分析 例:文法G[S]: S → aAcBe A → b A → Ab B → d 7.2 LR(0)分析 活前缀(Viable Prefixes)定义: S’?*R ?A??R ???是文法G’[S’]中的一个规范推导,如果符号串?是??的前缀,则称?是G的一个活前缀。 其中:S’,A?VN,? ?,??V*,??VT*。 注:在文法G[S]中引入产生式S’?S得到拓广文法G’[S’]。以确保拓广文法的开始符号S’不会出现在任何产生式的右部。 在LR分析过程中,实际上是把??的前缀列出放在符号栈中,一旦在栈中出现??,即句柄已经形成,则用产生式A??进行规约。 7.2 LR(0)分析 识别活前缀的DFA的构造方法 项目 项目类型 LR(0)项目集规范族(即识别文法活前缀的DFA) 7.2 LR(0)分析 项目(item):在每个产生式的右部适当位置添加一个圆点构成项目。项目圆点的左部表示分析过程的某个时刻欲用该产生式归约时句柄已识别的部分,圆点的右部表示待识别的部分。 例如: 产生式S → aAcBe对应有6个项目 [0] S → ? aAcBe [1] S → a ? AcBe [2] S → aA ? cBe [3] S → aAc ? Be [4] S → aAcB ? e [5] S → aAcBe ? 对空产生式 A?? 仅有项目 A?? 7.2 LR(0)分析 项目类型分为如下四种: 移进项目 A→??a? 待约项目 A→??B? 归约项目 A→?? 接受项目 S’→S? 其中:?,??V*, a?VT, S,S’,A,B?VN。 7.2 LR(0)分析 LR(0)项目集规范族的构造 构成识别一个文法活前缀的DFA(确定有限自动机)项目集(状态)的全体称为项目集规范族。 两个函数:CLOSURE(I)和GO(I,X)。 使用闭包函数(CLOSURE)和转换函数(GO(I,X))构造文法G’的LR(0)的项目集规范族。 7.2 LR(0)分析 两个函数:CLOSURE(I)和GO(I,X) 文法G’的一个项目集I的闭包CLOSURE(I)的构造: I的项目都在CLOSURE(I)中 若A→? ? B?属于CLOSURE(I),则每一形如B→? ?的项目也属于CLOSURE(I) 重复b)直到CLOSURE(I)不再扩大 转换函数GO(I,X) =CLOSURE(J),其中: I为包含某一项目集的状态, X为一文法符号 J={ 任何形如A→?X ? ?的项目| A→? ? X ?属于I }。J中的项目称为核。 7.2 LR(0)分析 使用闭包函数(CLOSURE)和转换函数(GO(I,X))构造文法G’的LR(0)的项目集规范族的步骤: 置项目S’→ ? S为初态项目集的核,然后对核求闭包CLOSURE({S’→ ? S})得到初态的项目集。 对初态项目集或其它所构造的项目集应用转换函数GO(I,X)= CLOSURE(J)求出新状态J的项目集。 重复b)直到不出现新的项目集为止。 7.2 LR(0)分析 I0: S’??S S →?aAcBe 7.2 LR(0)分析 文法G’[S’]: (0)S’?S (1)S → aAcBe (2)A → b (3)A → Ab (4)B → d 7.2 LR(0)分析 LR(0)

文档评论(0)

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

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

版权声明书
用户编号:5311233133000002

1亿VIP精品文档

相关文档