第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.1 确定的自顶向下分析思想 要点: 由根向下构造语法树; 构造最左推导; 推导出的终结符是否与当前输入符匹配? S aaab A B a A S →AB A →aA ∣ ? B →b ∣ bB aaab S ?AB S →AB ?aAB A →aA ?aaAB A →aA ?aaaAB A →aA ?aaa ? B A →? ?aaab B →b 1. 带回溯的自上而下分析 S →AB A →aA ∣ ? B →b ∣ bB a a a b b S (1) ?A... S →AB (2) ?aA... A →aA (3) ?aaA... A →aA (4) ?aaaA... A →aA (5) ?aaa ? B... A →? (6) ?aaab B →b aaabb S (1) ?A... S →AB (2) ?aA... A →aA (3) ?aaA... A →aA (4) ?aaaA... A →aA (5) ?aaa ? B A →? (6) ?aaa b B B →bB (7) ?aaabb B →b 2. 无回溯的自顶向下分析程序 特征—根据下一个输入符号为当前要处理的非终结符选择产生式。 要求—文法是LL(1)的 第一个L 从左到右扫描输入串 第二个L 生成的是最左推导 1 向前看一个输入符号(lookahead) 预测分析程序的实现技术 (1) 递归下降子程序 (2) 表驱动分析程序 定义 5-1 设G=(V,T,P,S)是上下文无关文法 FIRST(?)={a∣? ? * a?, a∈T, ?, ?∈(V∪T)*} 若? ? * ε则规定ε∈FRIST(?),称FIRST(?)为? 的开始符号集或首符号集。 求例5-2的首符号集如下: FIRST(Ap)={a,c} FIRST(Bq)={b,d} 结论:产生式左部相同,而右部都以非终结符开始,只要他们右部的符号串可以推导出的首符号集不相交,仍然可以唯一确定所要选择的产生式。 5.2 LL(1)文法的判别方法 利用自顶向下的语法分析技术,必须首先判断给定的文法是否为LL(1)文法。 分别计算FIRST、FOLLOW、SELECT集合,进而判断给定的文法是否为LL(1)文法。 分析前面的3个例子,找出关键问题,不同的问题采用不同的方法。 计算FIRST集 1.若X?T,则FIRST(X)={X} 2.若X?V,且有产生式X?a…,则把a加入到FIRST(X)中; 若X?? 也是一条产生式,则把 ? 也加到FIRST(X)中。 3.若X?Y…是一个产生式且Y?V,则把FIRST(Y)中的所有非? 元素都加到FIRST(X)中;若X ? Y1Y2…YK 是一个产生式,Y1,Y2,…,Y(i-1)都是非终结符,而且,对于任何j,1≤j≤i-1,FIRST(Yj)都含有? (即Y1..Y(i-1)?* ? ),则把FIRST(Yj)中的所有非 ? 元素都加到FIRST(X)中;特别是,若所有的FIRST(Yj , j=1,2,…,K)均含有?,则把?加到FRIST(X)中。 计算FOLLOW集 1. 对于文法的开始符号S,置 # 于FOLLOW(S) 中; 2. 若A?? Bβ是一个产生式,则把 ?? FIRST(β)∣{#}加至FOLLOW(B)中; 3. 若A?? B是一个产生式,或A? ? Bβ是一个产生式而β ? * ? (即 ? ?FIRST(β)),则把FOLLOW(A)加至FOLLOW(B)中。 LL(1)文法的判别 一个文法G是LL(1)的,当且仅当对于G的每一个非终结符A的任何两个不同产生式A? α?β,下面的条件成立: 1.FIRST(α)∩FIRST(β)=?,也就是α?和β推导不出以同一个终结符a为首的符号串;它们不

文档评论(0)

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

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

1亿VIP精品文档

相关文档