CHAPTER 4(语法分析 3).pptVIP

  1. 1、本文档共79页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CHAPTER 4(语法分析 3)

第一章:编译概述 Chapter4 Syntax Analysis 语法分析概述 (An overview of parsing) 自顶向下分析(Top-down Parsing) 自底向上分析(Bottom-up Parsing) LR 分析(LR Parser) 4.5 LR分析 LR(k)分析技术: 4.5 LR分析 LR分析是表格驱动的,特点如下: 广泛:能构造几乎所有的程序设计语言 通用:最通用的无回溯移进/归约分析技术 LR分析的文法类是LL分析的文法类的真超集。 LR文法能描述更多的语言。 复杂:手工构造LR分析器工作量大 不过,如今可以自动生成 4.5 LR分析 4.5 LR分析 4.5 LR分析 增广文法 如果G是一个以S开始符号的文法,那么G的增广文法G’就是在G中加上新开始符号S’和产生式S’ → S而得到的文法。 目的:告诉分析器何时停止语法分析 4.5 LR分析 4.5 LR分析 4.5 LR分析 4.5 LR分析 4.5 LR分析 4.5 LR分析 4.5 LR分析 4.5 LR分析 4.5 LR分析 LR分析器的逻辑结构(图4.35) 4.5 LR分析 4.5 LR分析 Action有两个参数,状态i和终结符a或$,action[i, a]取值: 移进j,即把输入符号a移进栈。记为sj。 归约A→β :把栈顶的β归约为A。记为rk,k为A→β 的编号。 接受:acc 报错 Goto函数 是定义在项目集上的goto函数的扩展,允许X可以为非终结符号 4.5 LR分析 LR语法分析器的格局(configuration) ( so s1 ... sm , ai ... an $ ) 栈 输入 4.5 LR分析 LR语法分析器行为 先读入当前符号ai和栈顶状态sm,查找分析表action[sm, ai] =移进s,进入格局 ( so s1 ... sms , ai+1 ... an $ ) =归约A→ β ,进入格局 ( so s1 ... sm-rs , ai ... an $ ) 其中r=| β |,且s=goto[sm-r, A] =acc,完成分析 =报错 4.5 LR分析 4.5 LR分析 4.5 LR分析 4.5 LR分析 4.5 LR分析 构造 SLR分析表(算法4.46) 先构造增广文法的SLR项目集族 C={I0, I1, …, In } 根据Ii得到状态i 4.5 LR分析 4.5 LR分析 4.5 LR分析 4.5 LR分析 4.5 LR分析 4.5 LR分析 考虑I2 根据第一项action[2,=]=s6 根据第二项,因为FOLLOW(R)包含=,所以action[2,=]=归约R?L 存在移进/归约冲突 4.5 LR分析 4.5 LR分析 LR(1)分析法 重新定义项目,让它带上向前看符号(lookahead) LR(1)项目: 由SLR项目和一个向前看符号组成 [ A??·?, a ] 对于项目[ A??·, a ],向前看符号a表示只有当下一个输入符号是a时,才能进行归约。 这样的a的集合一定是FOLLOW(A)的一个子集。 4.5 LR分析 4.5 LR分析 4.5 LR分析 构造文法 S?? S S ? C C C ? c C | d 的LR(1) 项目集。 4.5 LR分析 构造LR(1)分析表(算法4.56) 1. 构造G? 的LR(1)项目集族C={I0, I1, …, In}。 2. 从Ii构造分析器的状态i,状态i的action函数确定如下: 若[A ?? · a?, b]在Ii中,且goto(Ii, a) = Ij,则action[i, a]=sj; 若[A?? · , a]在Ii中,且A ? S?,则action[i, a]=rj,j是产生式A?? 的序号; 若[S??S·, $]在Ii中,则action[i, $]=acc。 4.5 LR分析 3. 状态i的goto函数确定如下: 若goto(Ii, A) = Ij,则goto[i, A] = j 4. 用上面规则未能定义的所有条目都置为error。 5. 语法分析器的初始状态是包含[S??·S, $]的项目集对应的状态。 4.5 LR分析 4.5 LR分析 每个SLR文法都是LR(1)文法。 LR(1)语法分析器的状态数目比SLR分析器的状态数目多。

文档评论(0)

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

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

1亿VIP精品文档

相关文档