编译原理第6章-自底向上语法分析汇编.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
; 移进?归约分析;自底向上分析思想; 从所要分析的终结符串开始进行归约; 每一步归约是在当前串中找到与某个产生式 的右部相匹配的子串,然后将该子串用这一 产生式的左部非终结符进行替换;如果找不 到这样的子串,则回退到上一步归约前的状 态,选择不同的子串或不同的产生式重试; 重复上一步骤,直到归约至文法开始符号; 如果不存在任何一个这样的归约,则表明该 终结符串存在语法错误; 自底向上分析举例; 在每一步归约中,选择哪一个产生式以及匹配 哪一个位置上的子串都可能是非确定的 这些非确定性导致分析过程会有很高的复杂性; 改进的方法; 举例:短语; 直接短语; 举例:直接短语; 句柄; 举例:句柄; 举例:句柄不一定唯一; 举例: 最右推导与最左归约; 自底向上分析的实现技术; 与自顶向下技术相比; 借助一个下推栈(分析栈??和一个基于有限状态控制的 分析引擎 分析引擎根据当前状态、下推栈当前状态/内容、剩余输 入单词序列来确定如下动作之一,然后进入新状态: Reduce: 依确定的方式对位于栈顶的短语进行归约 Shift: 从输入序列移进一个单词 Error: 发现语法错误,进行错误处理/恢复 Accept:分析成功; 移进?归约分析 的一个例子; 对应一个最右推导 将分析栈中的符号 串和余留输入串并 置,若逆向观察从 步骤(14)至步骤 (1)的每一个归约 步骤,则对应一个 最右推导,也称为 规范推导(canonical derivation) 此为LR分析过程 句柄作为“可归约串”; 移进?归约分析 的另一个例子; 移进?归约(shift-reduce)冲突 到达一个不能确定下一步应该移进还是应该归约的状态 例如,有产生式 S ? if E then S | if E then S else S 考虑对于如下串进行移进?归约分析 if E then if E then S else S 当 if E then if E then S 出现在分析栈中时,是移进 else, 还是归约 if E then S ?; 归约?归约(reduce-reduce)冲突 到达这样的状态:有对多于一个短语进行归约的选择 例如,有产生式 A ? aA | aaA 考虑对于串 aaab 进行移进?归约分析 当分析到某一步时,aaA出现在分析栈中(b 位于剩 余输入区),是用产生式 A ? aA 归约 aA,还是用产 生式 A ? aaA 归约 aaA ?; 借助于分析表 多数移进?归约分析的实现都是基于表驱动方法 分析引擎根据当前状态、输入单词查询分析表,确定 Reduce,Shift,Error 和Accept 等动作 分析表应当可以体现出移进?归约冲突和归约?归约冲 突的解决方法 LR分析中的LR分析表以及算符优先分析中的算符优先 分析表可用于上述目的; 表驱动移进?归约分析模型;;; LR 分析模型 LR 分析是一种表驱动的移进?归约分析; 主要学习四种 LR 分析技术 LR(0)分析 适用于 LR(0)文法 SLR(1)分析 适用于 SLR(1)文法 LR(1)分析 适用于 LR(1)文法 LALR(1)分析 适用于 LALR(1)文法; LR 分析表 LR 分析表的构造是LR 分析的基础 LR(0), SLR(1), LR(1)和 LALR(1) 四种分析方法可共享同样的LR 分析表 本讲的LR 分析表专指此类LR 分析表; LR 分析表举例 文法: G[E] ; LR 分析表 使用两张表 ACTION 表 告诉分析引擎:在栈顶状态为k, 当前输 入符号是 a 时做什么 ACTION [k,a]=si, Shift:状态 i 移进栈顶 ACTION [k,a]=rj, Reduce:按第 j 条产生式归约 ACTION [k,a]=acc, Accept :分析完成 ACTION [k,a]=err,Error :发现错误 (常标为空白) GOTO 表 GOTO[i,A]=j 告诉分析引擎: 在依产生式 A?? 归约之后,栈顶状态为i 时,要将新 状态

文档评论(0)

186****6410 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档