编译原理——编译程序构造实践教程课件作者张幸儿戴新宇401编译程序构造与实践教程第四章节.pptVIP

编译原理——编译程序构造实践教程课件作者张幸儿戴新宇401编译程序构造与实践教程第四章节.ppt

  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文档。上传文档
查看更多
分析过程如下所示。 按推导生成的语法分析树及其存储表示 文法G?[E]: E::=TE? E?::=+TE?|? T::=FT? T?::=*FT?|? F::=(E)|i 假定输入符号串为i*i+i。可为它构造语法分析树如图所示。 3.2.3 应用递归下降分析技术进行句型识别 设输入符号串是:i*i 当识别出输入符号串是相应文法的句子时,需构造语法分析树。可以在进入关于某非终结符号U的子程序时为U生成相应的结点,对于终结符号T,则在子程序中, 当T与输入符号匹配时为T构造结点。这样,对函数定义可作如下的修改,如对于E与E1可改写成: void E( ) { MakeNode(E); T( ); E1( ); } void E1( ) { MakeNode(E1); if(sym==+) { MakeNode(+); GetSymbol( ); T( ); E1( ); } else MakeNode(?); } 概括 构造递归下降识别程序的步骤: 步骤1 首先检查文法是否满足应用递归下降分析技术的条件,即,无左递归性与无回溯性。 如果不满足,则需进行文法等价变换,使之符合应用条件。 步骤2 对符合条件的文法构造递归下降识别程序的各个子程序,包括写出识别程序的总控程序。 试为文法G[S]: S::=A S::=C A::=V=E C::=if(E)S V::=i E::=VE? E?::=+VE? E?::= ?VE? E?::=? 构造下列预测分析表。 4.3.2 语法分析树的构造及输出 当用C型语言实现预测识别程序时,必要的是设计语法分析树的数据结构。可以把它设计为结点数组(C型): 语法分析树结点类型 语法分析树[MaxNodeNum]; 其中语法分析树结点类型的数据结构设计如下。 typedef struct { int 结点序号; int 文法符号序号; int 父结点序号; int 左兄结点序号; int 右子结点序号; } 语法分析树结点类型; 但是,在应用自顶向下分析技术生成语法分析树时,有按推导生成的结点序号与按预测分析技术的实际建立顺序,最终的结果应是实际建立顺序的语法分析树,因此除了语法分析树外,还引进过渡语法分析树。 回顾 1. 自顶向下分析技术概况 基本实现思想、讨论前提、基础文法、输入输出 要解决的基本问题、分析技术分类 无回溯的自顶向下分析技术的应用条件 2. 递归下降分析技术 基本实现思想 识别程序的构造 应用递归下降分析技术句型分析 3. 预测分析技术 基本实现思想、 应用预测分析技术句型分析 分析表的构造 1. ?规则的处理 设正进入关于U的子程序,当前输入符号为T。 ? 当关于U的规则仅U::=V?, V?VN, 则立即调用关于V的子程序,由关于V的子程序查错; ? 当关于U的规则呈U::=V?|W?形, 则当V=* T…时,T与V?匹配,调用关于V的子程序, 或当W=* T…时,T与W?匹配,调用关于W的子程序, 否则报错,当前输入符号T不匹配, 可以不判别是否与W?匹配,直接调用W,T不匹配时在W中报错; ? 当关于U的规则呈U::=u|?形, 则当u=* T…时,T与u匹配,否则任何的输入符号T都与?匹配。即,在当前输入符号T不与 u匹配时,便认为按规则U::=?展开。?规则的存在,使得无需任何输入符号便可以与当前目标(非终结符号)匹配,因此不出现出错情况。 2. 子程序构造约定 在进入一个子程序时,已取得当前所处理短语的第一个符号(输入符号), 当从子程序返回时,已取得该短语的后继第一个输入符号。因此,每当一个终结符号与输入符号匹配时就应调用函数GetSymbol,扫描下一个当前输入符号。 例 G[C]: C::=C; S C::=S S::=if (E) S else S S::=if (E) S S::=A 试为其构造递归下降识别程序。 首先检查

您可能关注的文档

文档评论(0)

时间加速器 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档