第4章 自顶向下句法分析.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文档。上传文档
查看更多
第4章 自顶向下的句法分析 自顶向下分析方法 递归下降分析法 LL(1)分析法 自底向上分析方法 算符优先分析法 LR分析法 4.1 句法分析器概述 句法分析是编译程序的核心部分。 任务:识别由词法分析得出的单词序列是否是合法的句子。 理论基础:上下文无关文法和下推自动机 句法分析方法: 自顶向下(top-down)的句法分析:反复使用不同产生式进行推导以谋求与输入符号串相匹配。 自底向上(bottom-up)的句法分析:对输入符号串寻找不同产生式进行归约直到文法开始符号。 注:这里所说的输入符号指词法分析所识别的单词。 确定的自顶向下分析思想 例 文法G1[S]: S ? pA S ? qB A ? cAd A ? a B ? dB B ? b W=pccadd自顶向下的推导过程: S ? pA ? pcAd ? pccAdd ? pccadd 文法G1[S]: S ? pA | qB A ? cAd | a B ? dB | b 文法的特点: 每个产生式的右部都由终结符号开始。 如果两个产生式有相同的左部,那么它们的右部由不同的终结符开始。 文法G2[S]: S ? Ap S ? Bq A ? a A ? cA B ? b B ? dB W=ccap自顶向下的推导过程: S ? Ap ? cAp ? ccAp ? ccap 文法G2[S]: S ? Ap | Bq A ? a | cA B ? b | dB 文法的特点: 每个产生式的右部不全是由终结符号开始。 如果两个产生式有相同的左部,那么它们的右部由不同的终结符或非终结符开始。 文法中无空产生式。 为了实现确定的(即无回溯的)自顶向下分析,则要求文法满足下述两个条件: (1) 文法不含左递归 直接左递归:A ? A… 间接左递归: A ? B…,B?+A? 左递归文法使自上而下分析工作陷入死循环。 例如,如果有产生式 E ? E+T E?E+T?E+T+T?E+T+T+T… (2) 无回溯,对文法的任一非终结符号,当其产生式右部有多个候选式可供选择时,各候选式所推导出的终结符号串的首字符集合要两两不相交。 例如,如果有文法G[S]: S ? xAy A ? ab∣a 输入串xay的分析就需要回溯。 带回溯的自顶向下分析方法实际上是一种穷举的试探方法,其分析效率极低。 消除左递归 1. 直接左递归 方法是引入一个新的非终结符,把含有左递归的产生式改为右递归。设关于A的产生式为 A ? A?1∣A?2∣…∣A?m∣?1∣?2∣…∣?n 其中,每个?i都不为?且每个?j都不以A开头,则消除A的直接左递归就是将其改写为: 例如,含有直接左递归的表达式文法G[E]为: G[E]: E ? E+T∣T T ? T*F∣F F ? (E)∣i 消去直接左递归后得到文法G[E]为: G[E]: E ? TE E ? +TE∣? T ? FT T ? *FT∣? F ? (E)∣i 2. 间接左递归 将间接左递归变为直接左递归,然后消除直接左递归。 如文法G[A]含有间接左递归: A ? aB A ? aB A ? aB A ? Bb A ? Bb A ? Bb B ? Ac B ? aBc B ? aBcB| dB B ? d B ? Bbc B ? bcB| ε B ? d 消除文法中一切左递归的算法 要求:无回路(即不存在A?+A的推导) 充分条件:文法不含形如A?A的有害产生式,也不含A??的空产生式。 (1) 将所有非终结符排序:A1、A2、…、An; (2) for (i=1;i=n;i++){ for (j=1;j=i?1;j++){ 若Aj的所有产生式为:Aj??1|?2|…|?k 则把形如Ai?Ajr的产生式变换为: Ai??1r|?2r|…|?kr } 消除Ai规则中的一切直接左递归; } (3) 删除无用的产生式 这里第二步所做的工作是: a)若产生式出现直接左递归则用消除直接左递归的方法消除掉。 b)若产生式右部最左符号是非终结符且其序号大于左部的非终结符,则不处理。 c)若序号小于左部的非终结符,则将这序号小的非终结符用其右部串来取代,然后消除新的直接左递归。 注意:1)若非终结符排列顺序不同,改写后的文法也不同,但它们是等价的。2)开始符号不能改变。 例:对下面文法消除左递归: (1) S ? Qc|c (2)Q ? Rb|b (3) R ? Sa|a 1) 对非终结符排序:S、Q、R 2) 把(1

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档