chap04-语法分析4--自底向上LR分析法.pptxVIP

  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.2.4 LR分析方法一、LR分析器的模型及工作过程二、LR(0)分析表的构造三、SLR(1)分析表的构造四、LR(1)分析表的构造五、LALR(1)分析表的构造六、Yacc:一个LALR(1)分析程序的生成器一、LR分析器的模型及工作过程 LR分析法是一种有效的自底向上的语法分析技术,一般叫LR(k)分析技术,其中的“L”是指从左至右扫描输入符号串,“R”是指构造一个最右推导的逆过程,“k”是指为了作出分析决定而向前看的输入符号的个数。 LR分析方法是当前最广义的无回溯的“移进- 归约”方法。根据栈中的符号串和向右查看输入串的k(k?0)个符号,就能唯一确定分析器的动作是移进还是归约,以及用哪个产生式进行归约。LR分析法的优缺点: 1) 适合文法类足够大,适用于绝大多数上下文无 关文法 2) 分析效率高 3) 报错及时 4) 可以自动生成 5) 手工实现工作量大a1a2…aiai+1…an#spSm...S1S0Xm...X1#输出总控程序动作表状态转换表分析表(一)LR分析器的逻辑结构1.整体结构:(1)在总控程序的控制下,从左到右扫描输入串,根据分析栈和输入符号的情况,查分析表确定分析动作;栈顶状态符号概括了在栈中位于它下边的全部信息,即从分析开始直到某一归约阶段的全部历史和展望(2) 分析表是LR分析器的核心,它跟文法有关,它包括动作表(Action)和状态转换表(Goto)两部分,总控程序据分析表确定分析动作;(3) 分析栈包括文法符号栈X[i]和相应的状态栈S[i]两部分(状态是指能识别活前缀的自动机状态),LR分析器通过判断栈顶元素和输入符号查分析表确定下步分析动作。输入#id*id+id输出smXmsm-1Xm-1…gotoactions0分析表栈 LR 驱动程序2.分析表的组成分析表 分析表由两部分组成,分析动作表和状态转换表。gotoaction(1) 分析动作表以一个二维数组表示,行代表分析栈栈顶状态,列代表当前的输入符号,数组元素表示当前栈顶为状态为Si,而输入符号为aj时,所执行的分析动作Action[Si,aj]。执行移进动作元素为产生式或产生式编号表示用它进行归约共有4种动作:移进:新状态Si进状态栈,输入符号a进符号栈 输入符号状态a1…an#S0SiS1r5…Smacc元素为acc表示接受元素为空白表示出错归约:用相应的产生式进行归约rj;接受:当文法符号归约到只剩下开始符号,且输入串结束时(当前输入为#),分析成功;…报警:当状态栈顶为某一状态下,出现了不该出现的文法符号时,报错。(2) 状态转换表也用一个二维数组表示,行代表分析栈栈顶状态,列代表文法符号,数组元素表示当前栈顶为状态为Si面对文法符号为Xj时,应转去的新状态Goto[Si,Xj]=Sk。此处文法符号只是非终结符号 输入符号 状态X1X2…XpS0S3S1S2S5Sm(二)LR分析过程1.LR分析算法:(1) 将初始状态S0和输入串的左边界(#) 分别进分析栈;(2) 根据状态栈栈顶和当前输入符号查动作表进行如下工作:移进:若动作表中对应“移进”,那么当前输入符号移入符号栈,并将所对应的新的状态进状态栈,继续扫描,即下一个输入符号变成当前的输入符号;输入$a1…ai…ansi LR 驱动程序ai输出sm动作(action)表action[sm,ai]当前状态sm面临当前输入符号ai时应采取什么动作:移进(shift)、归约(reduce)、接受(accept)、出错(error)。Xmsm-1Xm-1 状 态actiongoto ai … ……sm… …si …… ……s0栈归约:若动作表中对应“归约”,则按指定产生式进行归约,若产生式右部的符号串长度为n,则符号栈栈顶的n个符号为句柄,所以符号栈栈顶n个符号出栈,同时,状态栈顶的n个元素也出栈,归约后的文法符号(非终结符)进符号栈,并根据状态转换表查归约后的文法符号所对应的新状态进状态栈;输入$a1…ai…an LR 驱动程序输出smXm动作(action)表action[sm,ai]当前状态sm面临当前输入符号ai时应采取什么动作:归约(reduce) 。sm-1sXm-1A 状 态actiongoto … ai …… A……sm…sm-2 … reduce ……… …… s …sm-2…s0A ? Xm-1 Xm栈接受:若动作表中对应“acc”,则分析成功;出错:若动作表中对应空白,则报告错误信息。(3) 重复以上(2)的工作直到接受或出错为止。2.举例,有文法G[L](1)L?E , L (2)L?E (3)E?a (4)E?bstate Action表Goto表a b , #E L0S3S42

文档评论(0)

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

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

1亿VIP精品文档

相关文档