[理学]第5章 语法制导翻译及中间代码.pptVIP

[理学]第5章 语法制导翻译及中间代码.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文档。上传文档
查看更多
[理学]第5章 语法制导翻译及中间代码

第5章 语法制导翻译及中间代码生成 § 5.1 语法制导翻译 § 5.2 中间代码的形式 § 5.3 简单赋值语句的翻译 § 5.4 布尔表达式的翻译 § 5.5 控制语句的翻译 §5.1 语法制导翻译 1、属性文法(Syntax-directed definitions) 2、语法制导翻译 在语法分析过程中,依随分析的过程,根据每个产生式所对应的语义子程序(或语义规则描述的语义处理的加工动作)进行翻译的方法。 §5.2 中间代码形式 “中间代码生成”程序的任务是:把经过语法分析和语义分析而获得的源程序中间表示翻译为中间代码表示。 方法:语法制导翻译。 采用独立于机器的中间代码的好处: 便于编译系统的建立和编译系统的移植; 便于进行独立于机器的代码优化工作。 中间代码表示形式有: 语法树 后缀式 三地址代码表示(三元式、四元式) 1)后缀式 表示:将运算对象写在前面,运算符号写在后面。a+b写成ab+ 特点:①运算符处于运算量之后; ②运算符在表示式中出现的次序和计算的先后次序一致; ③不用括号; ④易于计算机处理表达式。利用栈自左至右扫描表达式后缀表示,碰到运算对象入栈;碰到运算符,则执行相应运算(出栈),结果入栈,最后结果留在栈顶。 2)四元式 四元式:是一种更接近目标代码的中间代码形式,由于该形式的中间代码便于优化处理,因此得到广泛应用。 可用一种“三地址语句”等价表示,一般形式为: (op,arg1,arg2,result) Op为运算符; Arg1,arg2为两个运算对象:变量、常量、临时变量; Result中存放运算结果。 ①每个四元式只能有一个运算符,因此一个复杂表达式可由多个四元式构成的序列表示。 例:A+B*C写成: (*,B,C,T1) (+,A,T1,T2) ② 若op为一元、零元(无条件转移)时,arg1、arg2可省略。 ③ 会引入一些临时变量。 §5.3 简单赋值语句的翻译 §5.4 布尔表达式的翻译 1、布尔表达式: 用布尔运算符号(∧,∨,┐)作用到布尔变量或关系表达式上而组成的表达式。 ◆ 布尔表达式的作用: 1. 计算逻辑值,注意计算时的优先级。 2. 控制流语句,如if-then,if-then-else和 while-do语句中的条件表达式 ◆ 本节考虑由如下文法生成的布尔表达式: E→E ∧ E| E ∨ E| ┐ E|(E)| id rop id|true|false 分 析 (1)~(4)是布尔式 A∨BD 的代码,他们全是条件转移或无条件转移四元式,取代了原来的布尔运算。 A的真出口和BD的真出口相同—(5)S1的第一个四元式(布尔式的真出口) A的假出口为BD的第一个四元式。 BD的假出口是整个布尔式的假出口—S2的第一个四元式。 (2)四元式可删除,(3)、(4)也可合并—代码优化。 问题1:确定一个布尔表达式的真假出口 E→E(1) ∨ E(2) 若E(1)为真,则E为真,因此 E(1)的真出口是E的真出口 若E(1)为假,则计算E(2) 问题2:拉链、回填 翻译过程中常出现若干转移四元式转向同一目标。但此目标的具体位置未确定。 将这些四元式用“拉链”的方法链接起来,用一指针指向链头,在确定了目标四元式后,再“回填”此链。 对一个布尔表达式E,应有两条链: 真出口链(T链) 假出口链(F链) 用属性 E·TC,E·FC记录。 为了方便对布尔式生成相应的四元式,可对上述文法进行改写,以利于编制相应的语义子程序。 E→E∧ E| E∨ E| ┐ E|(E)| id rop id| id E∧ →E ∧ E∨ →E ∨ 1)语义变量和语义过程 为了实现“拉链”和“回填”及处理E·TC,E·FC,需定义如下变量和过程: NXQ指示器——指示所要产生的下一个四元式序号(在四元式表中位置),初值为1,每当执行一次GEN后,NXQ自动加1; GEN(op,arg1,arg2,Result ) ——同前,产生一个四元式送入四元式表中,并以此四元式在四元式表中位置作为返回值; MERGE(P1,P2)——拉链函数,把以P1、P2为链首的两条链合并为一,作为函数值,回送合并后的链首; BACKPATCH(P,t)——回填过程,把P所链接的每个四元式resule字段均填上t。 2)每个产生式的语义子程序 (1) E→id 注 意 对于翻译后最终归约所得的E,具有两个语义属性E.T

文档评论(0)

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

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

1亿VIP精品文档

相关文档