第十一章 编译原理总结4_语法1.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文档。上传文档
查看更多
* S.P O.P 语义分析、生成中间代码 生成目标程序 代码优化 语法分析程序 词法分析程序 错 误 处 理 符 号 表 管 理 语法分析 * 任务:根据文法规则,从源程序单词符号串中识别出 语法成分,并进行语法检查。 两大类分析方法: 自顶向下分析 自底向上分析 4.1 语法分析的任务 * 存在主要问题: 回溯问题,左递归问题 主要方法:递归下降分析法、 LL分析法 自顶向下分析算法的基本思想为: 自底向上分析算法的基本思想为: + 若S?x 则x?L(G[S]) 否则x?L(G[S]) G[S] 存在主要问题:“可归约串”的识别问题 主要方法:算符优先分析法、 LR分析法 4.1 语法分析的任务 + 若x?S 则x?L(G[S]) 否则x?L(G[S]) G[S] * 自顶向下分析的一般过程 从S出发采用最左推导,试图逐步推出输入串α,α?L(G[S])? S作为语法树的根,试图自上而下地为α构造一棵语法树: 若叶结点从左向右排列恰好α,则表示α是文法的句子, 而这棵语法树就是句子α的语法结构; 若构造不出语法树,则α不是文法的句子。 4.2 自顶向下分析法概述 * 自上而下分析中的关键问题: 左递归:当文法中出现左递归时,会使分析过程陷入无限循环。 回溯:假定要被代换的非终结符号是V,且有 n 条规则:V→A1|A2|…|An,那么如何确定 用哪个右部Ai去替代V呢?会造成回溯。 4.2 自顶向下分析法概述 回溯问题 左递归问题 * 1.回溯问题 什么是回溯(backtracking)? 分析工作要部分地或全部地退回去重做叫回溯 造成回溯的条件: 文法中,对于某个非终结符号的规则其右部有多个选择, 并根据所面临的输入符号不能准确的确定所要选择时,就可 能出现回溯。 回溯带来的问题: 严重的低效率,只有在理论上的意义而无实际意义。 4.2 自顶向下分析法概述 * 消除回溯的途径: 改写文法 对具有多个右部的规则反复提取左因子 例:对下述两个产生式,提取公共左因子改造文法。 if语句→if E then S1 else S2 if语句→if E then S1 改造为:if语句→if E then S1U U→else S2 |ε 4.2 自顶向下分析法概述 * A→αβ1|αβ2|…|αβn 如果β1~βn中还有几个首符号相同,可反复提取引入了许多非终结符和ε产生式。 A → αA′ A′→ β1|β2|…|βn 提取公共左因子 4.2 自顶向下分析法概述 * 某些文法不能在有限步骤内提取左公共因子。 【例】文法G: S?Ap|Bq A?aAp|d B?aBq|e S?aApp|aBqq S?dp|eq A?aAp|d B?aBq|e S?a(App|Bqq) S?aS? S??App|Bqq S?dp|eq A?aAp|d B?aBq|e S?aS? S?dp|eq S??aAppp|aBqqq S?dpp|eqq A?aAp|d B?aBq|e 可以看出产生式A、B继续替换,只能使文法的产生式愈来愈多无限增加下去,变成循环递归,不能得到提取左公共因子的预期结果。 不一定每个文法的公共左因子都能在有限的步骤 内替换成无公共左因子的文法。 一个文法提取了左公共因子后,只解决了相同左 部产生式右部的FIRST集不相交问题, 当改写后的文 法不含空产生式,且无左递归时,则改写后的文法是 LL(1)文法。 否则还需用LL(1)文法的定义进行判断 才能确定是否为LL(1)文法。 4.2 自顶向下分析法概述 * 2.左递归问题 例:文法G[E]:E→E+T|T T→T*F|F F→(E)|i 给出i*i+i自顶向下的分析过程。 左递归文法会使自顶向下分析法陷入死循环 如果文法具有间接左递归,则也将发生上述问题, 只不过循环的圈子兜的更大。 要实行自顶向下分析,必须要消除文法的左递归 从左向右扫描源程序,同时实施最左推导。 4.2 自顶向下分析法概述 * (1)消除直接左递归 方法一:使用EBNF表示来改写文法 例:文法G[E]:E→E+T|T T→T*F|F F→(E)|i E→T{+T} T→F{*F} F→(E)|i A→? |A? 规则一 A→?{?} 4.2 自顶向下分析法概述 * 例:文法G[E]:E→E+T| E-T|T

文档评论(0)

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

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

1亿VIP精品文档

相关文档