编译原理-练习2解释.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
幻灯片1 编译原理 ——练习2 王金伟 计算机与信息工程学院 天津师范大学 幻灯片2 7.1中间语言 中间语言 源程序的中间表示方法 中间语言的形式 后缀式 图表示法 三地址代码 2 幻灯片3 一.后缀式 把运算量(操作数)写在前面,把算符写在后面。 例如:a+b,写成ab+ 1.表达式E的后缀表示递归定义 如果E是变量和常数,则E的后缀表示是E本身 如果E是形如E1 op E2的表达式,其中op是任意的二元算符,则E的后缀表示是E1’ E2’ op,其中E1’和E2’分别是E1和E2的后缀表示 如果E是形如(E1)的表达式,则E1的后缀表示也是E的后缀表示 注意:后缀表示不需要括号 3 幻灯片4 例:赋值语句 a := b *(- c)+ b *( - 34) 的后缀式: a b c - * b 34 - * + := 4 幻灯片5 习题1:给出下面表达式的后缀式: (1) a*(-b+c) (2) a+b*(c+d/e) (3) -a+b*(-c+d) (4) not A or not (C or not D) (5) (A and B) or (not C or D) (6) (A or B) and (C or not D and E) 解: (1) ab@c+* (2) abcde/+*+ (3) a@bc@d+*+ (4) A not C D not or not or (5) A B and C not D or or (6) A B or C D not E and or and 5 幻灯片6 三、三地址代码 1.一般形式 x := y op z 是一系列的上述形式 x, y, z是名字、常数和编译器产生的临时变量 op是算符,定点、浮点、逻辑,只能有一个 例:x + y * z翻译成 t1 := y * z t2 := x + t1 三地址代码是AST或DAG的线性化表示 dag图对应的三地址代码可能比相应的语法树对应的三地址代码要优化,因为可以复用中间结果 包含三个地址:两个操作数,一个结果 6 幻灯片7 例子: 相应于a:=b * - c+b * -c的AST和DAG的三地址代码 t1 := -c t1:=-c t2 := b* t1 t2:=b*t1 t3 := -c t5:=t2+t2 t4 := b* t3 a:= t5 t5 := t2+t4 a := t5 (a)对于AST的代码 (b)对于DAG的代码 7 幻灯片8 2.三地址代码的种类 (1)赋值语句: x := y op z,op是二元算术算符或逻辑算符 (2)赋值语句: x := op z,op是一元算符,如:负号,逻辑非not等 (3)复写语句: x := y (4)无条件转移: goto L,L是下一步要执行的三地址语句的标号 (5)条件转移语句: if x relop y goto L 根据逻辑运算的结果决定是否执行转移 if a goto L a为真跳到L执行,否则执行if后边的语句 8 幻灯片9 (6)过程调用语句:param x和call p, n n表示实参个数 例如:call p(x1 , x2 , … , xn ),表示成三地址语句: param x1 param x2 … … param xn call p , n 过程返回:return y y表示返回值 9 幻灯片10 (7)数组引用赋值 x := y[ i ] x[ i ] := y (8)地址和指针的使用 x := y x := *y *x := y 10 幻灯片11 3. 三地址代码的具体实现 三地址代码是一种抽象形式,其具体实现可用结构体来表示,有以下几种表示方法: 四元式 :op, arg1, arg2, result 三元式 :op, arg1, arg2 间接三元式:间接码表+三元式表 11 幻灯片12 (1)四元式 op, arg1, arg2, result op:算符的内部编码 arg1和arg2分别表示两个操作数 result表示计算结果 arg1、arg2和result的内容通常是符号表条目指针 注意: 一元运算不需要使用arg2的域 param不使用arg2和result域 条件转移和无条件转移把目标语句的标号放在result中 12 幻灯片13 例

文档评论(0)

5201394 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档