网站大量收购独家精品文档,联系QQ:2885784924

编译第四章自顶向下的分析.pptVIP

  1. 1、本文档共94页,可阅读全部内容。
  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文档。上传文档
查看更多
第四章 自顶向下的分析 学习目标: 掌握 LL(1)文法的判别, LL(1)分析(预测分析法),递归子程序的构造方法 理解 First 集合, Follow 集合, LL(1) 文法 了解 回溯分析, 自顶向下分析的错误恢复,自顶向下分析的语法树的构造 自顶向下的分析 定义 分析是从文法的开始符号出发,通过在最左推导中描述出各个步骤来分析记号串输入。 分析树的构造: 将文法的开始符号作为语法树的根,向下逐步建立语法树,使语法树的末端结点符号串正好是输入符号串。 自顶向下分析的关键 因此自顶而下分析的主要问题是推导时所选择的产生式 : 假定要被代换的最左非终结符号是B, 且B有 n 条产生式: B→A1|A2|…|An, 那么如何确定用哪个右部去替代B? 自顶向下的分析程序有两类 回溯分析程序 一个非终结符有一个以上的产生式 并且根据当前的输入符号,分析程序无法确定选择哪个产生式 它会尝试分析其他可能的输入,当一种可能失败时就要求输入中备份任意数量的字符。 预测分析程序 分析程序试图利用一个或多个先行记号来预测输入串中的下一个构造 预测分析方法分为两类 递归下降分析法 LL(1) 分析 4.1 预测分析方法 4.2 LL(1)文法的判别 4.3 非 LL(1) 文法到 LL(1)文法的等价转换 4.4 递归下降分析算法进行自顶向下分析 4.5 LL(1)分析 4.6 自顶向下分析的错误恢复 4.1 预测分析方法 1 预测分析的条件 2 先行符号集合的定义 3 LL(1) 文法的定义 1 预测分析方法的条件 输入字符串的分析从文法的开始符号开始出发 如果能根据当前的输入符号(单词符号)唯一地确定选用哪个产生式进行推导,则分析是确定的。 预测分析的条件 预测分析要求文法必须是 LL(1) 文法 什么是LL(1) 文法? 它的定义依赖先行符号集合——开始符号集合和后跟符号集合 2 先行符号集合的定义 开始符号集合 定义 文法G=(VN, VT, P, S), ??(VN?VT)* FIRST(?) = { a ?VT | ? ?* a......} 如果 ??* ε 则 ε ∈FIRST(?) 直观上说文法符号串? 的开始符号集是由?推导出的开头的终结符(包括ε)组成。 例如 G[S]: 后跟符号集合 定义 文法G=(VT, VN, S,P) ,A∈VN , FOLLOW(A)={a ∈VT |S=*…Aa…}, 若 S=* …A, 则 $ ∈FOLLOW(A) ($ 用来作为输入串的结束符) 直观上说,非终结符A的后跟符号集是由句型中紧跟A后的那些终结符(包括$)组成。 非终结符A有两个产生式: A→bAS 和 A→ε,让 “x”表示当前输入符号 如果 x ∈FIRST(bAS)={b} ,则选择 A→bAS 进行推导 如果 x ∈FOLLOW(A)={$,a,d } , 则选择 A→ε进行推导 由于 FIRST(bAS)∩FOLLOW(A)=ф, 可确定选择哪个产生式进行推导 3 LL(1) 文法的定义 LL(1) 文法 一个文法是 LL(1) 文法,则需要满足下面的条件: 每一个产生式 A-α1|α2|…|αn 对于所有 i 和 j,1≤i,j ≤ n,i≠j, First(αi) ∩First(αj) = Φ 对于每一个非终结符 A ,如果 First(A) 中包含ε, 则First(A) ∩Follow(A) = Φ 4.2 LL(1) 文法的判别 LL(1) 文法的判别分为四步: 计算能推出ε的非终结符集 计算每一个产生式的右边串α的 FIRST(α) 集合 计算每个非终结符A的FOLLOW(A) 集合 按照LL(1)文法的定义识别 1计算能推出ε的非终结符集 可空的 当存在一个推导A=*ε 时,非终结符 A 称作是可空的。 算法 让 S 表示所有能推导出ε的非终结符集合 首先, S={ Aj | Aj→ ε 是一个产生式} 对每一个产生式 p: Ap→X1....Xn, 如果 X1....Xn?S, 则 S:= S? {Ap } 重复第二步的循环,直至S 收敛(不再变化)为止 2 计算每个产生式右部符号串α的FIRST(α)集 为每个文法符号A (A?VT ?VN )计算First(A)的算法 计算符号串α 的 First(α) 算法 为每个文法符号A (A?VT ?VN )计算First(A) 的算法 对于所有 a? VT 则 First(a)={ a } 对于所有 A? VN ,若 A ?*ε则 First(A)={ε} else First(A)={ } 对于每一个产生式 A→X1…Xj…Xn

文档评论(0)

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

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

1亿VIP精品文档

相关文档