天津科技大学编译原理 第4章LR分析法.pptVIP

天津科技大学编译原理 第4章LR分析法.ppt

  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文档。上传文档
查看更多
天津科技大学编译原理 第4章LR分析法

4.5.1 LR分析器工作原理和过程 1.LR分析法 基本思想:在规范规约分析过程中,根据分析栈中记录的已移进和规约出的整个符号串(即历史)和根据使用的规则推测未来可能遇到的输入符号(即展望),以及现实读到的输入符号,这三个方面的信息来确定句柄的形成。 即根据分析栈形成的历史和展望(常以状态表示)向右顺序查看输入串的K个(K=0)符号就可唯一地确定句柄。 2.LR分析器的组成 总控程序:所有LR分析器总控程序相同。 分析栈:记录了已分析的内容及当前的状态,包括状态栈S和文法符号栈X。 分析表是LR分析器的核心 ACTION[Si,a] (a?VT)当栈顶状态Si面临输入符号a时,应采取分析动作. GOTO[Si,X](X?VTorVN)指明当分析栈移进一个输入符号或按某产生式进行归约后所要转移到的下一状态。 在分析的每一步,总控程序从左到右扫描输入符号串,并根据状态栈栈顶状态和当前输入符号a查LR分析表,并执行表中规定的操作完成每一步的分析工作。 5.总控程序的算法 4.5.2 LR(0) 分析法 使用LR(0)分析表的LR分析器称为LR(0)分析器。 LR(0)分析在分析每一步,只需根据当前栈顶状态而不必向前查看输入符号就能确定采取的动作。 LR(0)分析法对文法的限制较大,对绝大多数高级语言的语法分析器不适用。 构造LR(0)分析表的思想和方法是构造其他LR分析表的基础。 1.规范句型的活前缀 前缀:是指字符串的任意首部。 例:abc的前缀有ε,a,ab,abc。 活前缀:是指规范句型的前缀,此前缀不包含句柄右边的任何符号。 注意:活前缀可以是一个或若干个规范句型的前缀。 活前缀在LR分析中的作用 在LR分析过程中,任何时刻栈中文法符号总是某一规范句型的活前缀。一旦在栈中出现句型的句柄,就用相应的产生式进行归约, 在分析的过程中,只要符号栈中的符号串是一个活前缀,就可保证已被分析过的部分是该文法规范句型的正确部分。 LR分析过程实际上就是一个逐步产生(识别)活前缀的过程。 (2)在文法G中每个产生式的右部适当位置添加一个圆点构成LR(0)项目。 例:产生式 U→XYZ 对应有4个项目 [0] U→ ? XYZ [1] U→X ? YZ [2] U→XY ? Z [3] U→XYZ ? 产生式A→ε只有一个项目A→? (3)LR(0)项目分类 根据圆点所在的位置和圆点后是终结符还是非终结符 把项目分为以下几种: 移进项目: 形如A→α?аβ的项目,其中а∈VT, α,β ∈V*。 则有待于移进一个VT符号X到栈中,因此称为移进项目。 待约项目: 形如A→α?Bβ的项目,其中B∈VN, α,β ∈V* 。 即圆点后面为非终结符的项目。 表明用产生式A的右部归约时,首先要将B的产生式右部归约为B,对A的右部才能继续进行分析。也就是期待着继续分析过程中首先能归约得到B。 归约项目: 形如A→α?的项目,α∈V*,α= ε对应的项目为A- ? 即圆点在最右端的项目。 表明该产生式的右部已分析完,句柄已形成,可以把α归约为A。 接受项目: 当归约项目为S’→S?,其中S‘是文法开始符号 即对文法开始符的归约项目。 表明输入串可归约为文法开始符,分析结束。 3.构造以LR(0)项目集为状态的识别活前缀的DFA LR(0)项目集:识别文法规范句型活前缀的DFA的每个状态都是由若干LR(0)项目组成的集合。 LR(0)项目集规范族:LR(0)项目集(状态)的全体。 识别活前缀的DFA的构造 如何构造DFA的一个状态(项目集) 如何由DFA的一个状态求其他状态 如果I是拓广文法G’的一个LR(0)项目集,定义和构造I的闭包CLOSURE(I)如下: I的项目均在CLOSURE(I)中; b) A→??X??CLOSURE(I),X?VN, 则任何X-产生式X→??P, X????CLOSURE(I); 重复b)直到CLOSURE(I)不再增大为止。 说明:圆点后为终结符或在一个产生式的最后,求闭包时不会增加新的项目 作用:由DFA的一个状态求其他状态 设I为拓广文法G‘的某一项目集(状态),X∈(VN∪VT),则 GO(I, X) = CLOSURE(J) 其中J = {A→αX?β│A→α? Xβ∈I } 称J为“核” (3) 构造以LR(0)项目集为状态的DFA 构造初始状态I0=CLOSURE({S’→?S}),并且它是未被标记的。 从已经构造的DFA部分图中选择一个未被标记的状态Ii,标记Ii,若项目集Ii中含有项目 U-x?Ry(R∈V,x,y为任一符号串),且GO(Ii,R)=Ij,若Ij不在

文档评论(0)

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

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

1亿VIP精品文档

相关文档