自下而上的L(k)分析方法.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文档。上传文档
查看更多
自下而上的L(k)分析方法

第七章 自下而上的LR(k)分析方法 LR(K)的含义 L:自左向右扫描输入串;R:采用最右推导的逆过程分析句子,K:在分析的过程中至多查看K个符号 给定文法G,S是其开始符号。考虑该文法中一个终结符串w的一个规范推导S?w1?w2? … ?w 假定uAv?uxv是上述推导中的一个推导步。A?x是用于该推导步的产生式;u和v∈(VN∪VT)﹡。 对上述这样的一步推导,仅通过扫描ux和(至多)查看v中开始的k个符号就能唯一确定选用产生式A?x去进行推导,我们就称G为LR(k)文法。 LR(k)分析器是按从左至右方式扫描输入串,并按自下而上方式进行规范归约的分析程序。 一个LR(k)分析器主要由两部分组成:一个总控程序和一个分析表。一般说来,所有LR分析器的总控程序基本上是大同小异的,只是分析表各不相同。 本章主要介绍LR(0) 分析表的构造算法及相关知识。 7.1 LR分析器的工作原理和过程 1. LR 分析法概述 LR分析是一种规范归约。规范归约的关键是分析过程中如何确定分析栈的栈顶的符号串是否形成句柄。 LR分析确定句柄的基本思想是在规范归约分析过程中,根据分析栈中记录的已移进和归约出的整个符号串(即历史)和根据使用的规则推测未来可能遇到的输入符号(即展望),以及现实读到的输入符号这三个方面的信息来确定分析栈的栈顶符号串是否形成句柄. 2. LR(k)分析器的逻辑结构 LR分析器是一个确定的下推自动机 LR(k)分析方法的主要思想: 1.严格地进行最左归约(识别句柄并归约它)。 2.将识别句柄的过程划分为由若干状态控制,每个状态控制识别出句柄的一个符号。 3.分析栈:存放已识别的文法符号和状态,描述的是分析过程中的历史和展望信息; 4.由一个总控程序来控制整个识别过程。 LR分析器的工作过程 总控程序在分析的每一步,都是按照栈顶状态q和当前输入符号a,查阅LR分析表,并执行其中ACTION[q,a]和GOTO部分规定的操作。 LR分析器的分析表由分析动作表(ACTION表)和 状态转换表(goto函数表)两部分组成,它们都是用二维数组表示的。 ACTION表指明了分析程序采取的动作 移进(Si):句柄尚未形成,需要继续把符号移进栈以形成句柄 归约( rj):句柄已经形成,用对应的产生式进行归约。 接收(acc):表示整个分析工作完毕,输入串合法。 报错(空白):出错处理。 ACTION [Si,am] 动作表 S1,S2…Sn为分析器的各个状态; a1,a2…am为文法的全部符号 ACTION[Si,a]:规定了当前状态为Si,面临输入符号a时应执行的动作(移进、归约、接受、报错) GOTO[Sm,xi]状态转换表 X1,X2…Xn为文法字汇表中的全部文法符号 GOTO[Si,X]规定了当前状态为Si,栈顶为文法符号X时,转移到的下一个状态. LR分析器的工作过程 LR分析器的一个构形由两部分构成:栈中符号串和尚待扫描的输入串 (S0X1S1X2S2…XmSm,aiai+1…an$) 分析器的工作过程就是从一种构形到另一种构形的转换过程. (S0,a1a2…an$)为初始构形 (S0AZ,$),其中A是文法开始号,ACTION[Z,$]= 接收 分析器的下一次移动是由栈顶状态Sm和当前输入符号ai去查看ACTION表并执行ACTION[Sm,ai]规定的动作并根据GOTO[Sm,ai]表去确定栈顶状态 (1)若ACTION[Sm,ai]=移进S,则分析器执行一个移进动作,进入构形 (S0X1S1X2S2…XmSmaiS,ai+1…an$),此时ai进栈,栈顶状态S=GOTO[Sm,ai] (2)若ACTION[Sm,ai]=归约A→β,则分析器执行一个归约动作(按产生式A→β进行归约),进入构形 (S0X1S1X2S2…Xm-rSm-rAS,aiai+1…an$),其中 S=GOTO[Sm-r,A],r是产生式A→β的长度,栈顶符号串Xm-r+1…Xm和A的右部β匹配,即为当前句型的句柄。 (3)若ACTION[Sm,ai]= 接收, 分析成功 (4)若ACTION[Sm,ai]=ERROR,输入串有语法错误,分析器停止工作,进行错误处理。 输入串abbcde$的分析过程 输入串abbcde$的分析过程 7.2 LR(0)分析表的构造 LR分析法的基本原理 例如,对文法G[A]: A→aBcDe B→b B→Bb D→d 分析符号串abbcde。 句柄的识别是一个符号一个符号得到的,若

文档评论(0)

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

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

版权声明书
用户编号:6153235235000003

1亿VIP精品文档

相关文档