clr分析器hpt7-3.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文档。上传文档
查看更多
clr分析器hpt7-3.ppt

中间代码生成 中间代码的形式 中间代码生成 7.3.1中间代码de形式 中间代码: 是源程序的一种内部表示 复杂性介于源语言和目标机语言之间 中间代码的作用: 使编译程序的逻辑结构更加简单明确 利于进行与目标机无关的优化 利于在不同目标机上实现同一种语言 中间代码的形式: 逆波兰式、四元式、三元式、间接三元式、抽象语法树和DAG 中间代码的层次 中间代码按照其与高级语言和机器语言的接近程度,可以分成以下三个层次: 高级:最接近高级语言,保留了大部分源语言的结构。 中级:介于二者之间,与源语言和机器语言都有一定差异。 低级:最接近机器语言,能够反映目标机的系统结构,因而经常依赖于目标机。 不同层次的中间代码 抽象语法树和DAG图 语法树可以作为一种合适的中间语言形式。在语法树中去掉那些对翻译不必要的信息,从而获得更有效的源程序中间表示。这种经变换后的语法树称之为抽象语法树(Abstract Syntax Tree)。 在抽象语法树中,操作符和关键字都不作为叶结点出现,而是把它们作为内部结点,即这些叶结点的父结点 如产生式S→if B then S1 else S2抽象语法树表示 if-then-else B S1 S2 语法树和抽象语法树 directed acyclic graph (DAG). b*c+b*c + * b c 7.3.3简单说明句的翻译-翻译是指在符号表中登录名字和性质。 最简单的说明句的语法: D→integer〈namelist〉|real〈namelist〉 〈namelist〉→〈namelist〉,id|id 用自下而上翻译 文法改写: D→D1,id |integer id | real id (1)D→integer id{enter(id,int);D.att:=int} (2)D→real id{enter(id,real);D.att:=real} (3)D→D1 ,id{enter(id,D1.att); D.att:=D1.att} ? 过程中的说明语句—用全程变量offset表示变量在本过程的数据区的相对位置,增加的量为数据对象的宽度,用属性width表示. 拉链技术-记录需回填地址的四元式,把需回填E.true的四元式拉成一链,把需回填E.false的四元式拉成一链,分别称做“真”链和“假”链 (10) … goto E.true  … (20) … goto E.true  … (30) … goto E.true 则链成 (10) … goto (0)  … (20) … goto (10)  … (30) … goto (20) 把地址(30)称作“真”链链首,0为链尾标志,即地址(10)为“真”链链尾。 符号表 name type def add … L label not r (p) goto 0 … (q) goto p … (r) goto q 建链的方法是:若goto L中的标号L尚未在符号表中出现,则把L填入表中,置L的“定义否”标志为“未”,把nextstat填进L的地址栏中 作为新链首,然后,产生四元式(goto 0),其中0为链尾标志。若L已在符号表中出现(但“定义否”标志为“未”),则把它的地址栏中的编号(记为q)取出,把nextstat填进该栏作新链首,然后,产生四元式(goto q)。 定义标号语句的产生式 S→label S label→i: 那么,当用label→i:进行归约时,应做如下的语义动作: 1.若i所指的标识符(假定为L)不在符号表中,则把它填入,置“类型”为“标号”,“定义否”为“已”,“地址”为nextstat。 2.若L已在符号表中但“类型”不为“标号”或“定义否”为“已”,则报告出错。 3.若L已在符号表中,则把标志“未”改为“已”,然后,把地址栏中的链首(设为q)取出,同时把nextstat填在其中,最后,执行backpatch(q,nextstat)。 翻译goto语句时,还有两点必须注意 第一:相同名字的标号可以在不同名字作用域中定义。如: (1) begin (2)  L:begin (3)  goto L;//延迟使用 (4)  …… (5) 

文档评论(0)

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

教师资格证持证人

自强不息,止于至善!

领域认证该用户于2025年08月05日上传了教师资格证

1亿VIP精品文档

相关文档