[第5章 自下而上的语法分析.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文档。上传文档
查看更多
[第5章 自下而上的语法分析

第5章 自下而上的语法分析 5.1 自下而上的语法分析概述 5.2 LR分析法的基本原理 5.3 项目集规范族的构造 5.4 有效项目(略) 5.5 LR(0)分析表的构造 5.6 SLR(1)分析表的构造 5.7 LR语法分析器的控制程序 5.8 二义文法在LR分析法中的应用 5.9 应用举例(略) 5.10 LR分析法在词法分析器自动构造中的应用(略) 5.2 LR分析法的基本原理 5.3项目集规范族的构造 5.5 LR(0)分析表的构造 5.6 SLR(1)分析表的构造 ㈠SLR(1)分析法的引出 5.7 LR语法分析器的控制程序 5.8 二义文法在LR分析法中的应用 ㈠数据结构 ①LR分析表 ②状态栈 在归约时,控制程序应按原路径折回,故在分析过程中需将所经历的状态记录下来,以便获得折回点。设置状态栈,用于记录分析过程中所经历的状态,即路径。 ③符号栈 用于记录路径的符号,它和状态栈等高。符号栈的设置是为了便于说明,实际语法分析器无符号栈。 ④产生式右部符号串长度 因每个状态仅识别一个符号,退回的状态数和构成句柄的字符数相等,故需存储产生式右部符号串长度。 ⑤产生式左部符号 归约后,根据左部符号进入下一状态。 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. step 状态栈 符号栈 输入串 动作 0) 0 # i*i+i# 初始 1) 05 #i *i+i# 移进 2) 03 #F *i+i# 归约 3) 02 #T *i+i# 归约 4) 027 #T* i+i# 移进 5) 0275 #T*i +i# 移进 6) 02710 #T*F +i# 归约 7) 02 #T +i# 归约 8) 01 #E +i# 归约 9) 016 #E+ i# 移进 10) 0165 #E+i # 移进 11) 0163 #E+F # 归约 12) 0169 #E+T # 归约 13) 01 #E # 归约 Acc 接受 上述每一步动作都是根据栈顶状态和当前输入符号进行。在分析过程中,栈中元素始终构成规范句型的活前缀,加上输入串的余下部分,恰好就是活前缀所属的规范句型。一旦在栈顶出现句柄,马上被归约成产生式左部符号。 ㈡手工模拟控制程序计算 假设源程序为:a*b+c。经词法分析,用单词种别表示为:i*i+i#。栈的内容采用水平方式表示,分析过程如下(分析表见5.6节): Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. ㈢算法描述 分析表用二维数组M存储,栈顶状态用Stop表示,当前输入符号用t.code表示,控制程序的算法归纳如下: ①移进 若M[Stop][t.code]=sj,说明句柄尚未形成,应执行移进操作。s表示移进,j为状态号,将j移入状态栈,将t.code移入符号栈,j成为新的栈顶状态Stop。读下一个单词。 ②归约 若M[Stop][t.code]=rk,说明句柄已出现在栈顶,应该用编号为k的产生式A→β进行归约。假设,LEN(β)=r,M[Stop-r][A]=j。首先将栈顶r个元素出栈,然后将j和A分别移入状态栈和符号栈,j成为新的栈顶状态Stop。当前处理单词不变。 ③接受 M[Stop][t.code]=Acc,表示输入串是一个合法句子,程序终止运行。 ④出错 M[Stop][t.code]=空白,表示出错,最简单处理为程序终止运行。 上述算法可用伪代码描述如下图所示: Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. * Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 从叶结点出发,步步向上归约。若

文档评论(0)

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

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

1亿VIP精品文档

相关文档