编译原理 第8章 常用中间语言
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
=
+ + ∗ z
例:x =−y +y∗z + y∗z − ∗ ∗
8.3 三元式
操作符 左操作符数 右操作数
表达式的三元式: 表达式的三元式:w*x+(y+z) (1) *, w, x (2) +, y, z (3) +, (1), (2)
第三个三元 式中的操作数(1) 式中的操作数 (2)表示第 和第 表示第(1)和第 表示第 (2)条三元式的计 条三元式的计 算结果。 算结果。
间接三元式
使用三元式不便于代码优化,因为优化要删除 使用三元式不便于代码优化, 一些三元式,或对某些三元式的位置要进行变更, 一些三元式,或对某些三元式的位置要进行变更,由 于三元式的结果(表示为编号 表示为编号), 于三元式的结果 表示为编号 ,可以是某个三元式的 操作数,随着三元式位置的变更也将作相应的修改, 操作数,随着三元式位置的变更也将作相应的修改, 很费事。 很费事。 间接三元式: 间接三元式: 为了便于在三元式上作优化处理, 为了便于在三元式上作优化处理,可使用间接三元式 三元式的执行次序用另一张表表示,这样在优化时, 三元式的执行次序用另一张表表示 这样在优化时, 这样在优化时 三元式可以不变,而仅仅改变其执行顺序表。 三元式可以不变,而仅仅改变其执行顺序表。
不便于代码优化: 不便于代码优化:删 除某些三元式后可能 需作一系列的修改
三元式的执行次序用另一张 表表示, 表表示 优化时三元式可以不 变,仅仅改变其执行顺序表
8.4 树表示 4
抽象语法树
= x + + - y y (a) 抽象语法树 ∗ z y (b) 有向无环图 y ∗ z - y x
有向无环图
8.1 逆波兰式(后缀式) 逆波兰式(后缀式)
中缀表示 a+b a+b*c (a+b)*c a:=b*c+b*d 特点 1、运算对象出现的顺序和原有顺序(从左到右)相同 、运算对象出现的顺序和原有顺序(从左到右) 2、运算符按实际计算顺序(从左到右)出现 、运算符按实际计算顺序(从左到右) 3、运算符紧跟在运算对象的后面出现,且没有括号 、运算符紧跟在运算对象的后面出现, 优点:简明、 优点:简明、便于计算值 后缀表示 ab+ abc*+ ab+c* abc*bd*+:=
练习:写出赋值语句x:=a+b*(c-d)的三元式 练习:写出赋值语句 的三元式
条件语句的三元式
对于条件语句 if a>b then max:=a else max:=b 其三元式是: 其三元式是: ① (>,a,b) ② (FJ,5,(1) ) 1 ③ (:=,a,max) ④ (RJ,6,/) ⑤ (:=,b,/,max) ⑥ ( )
分别给出下列表达式的后缀表示
1. -a+b*(-c+d) 2. X:=-(a+b)/(c-d)-(a+b*c) 3. a=c ∧ b=d a-bc-d+*+ Xab+-cd-/abc*+-:= ac= bd=∧ ∧
条件语句的逆波兰式表示 if <exp> then <s1> else <s2> 其逆波兰式表示如下: 其逆波兰式表示如下: <exp的逆波兰式 <N1> FJ <s1的逆波兰式 的逆波兰式> 的逆波兰式 的逆波兰式 ><N2>RJ<s2的逆波兰式 的逆波兰式> 的逆波兰式 条件语句if 例:条件语句 a>b then max:=a else max:=b 逆波兰式表示为: 逆波兰式表示为: ab>11FJmaxa:=14RJmaxb:=
Байду номын сангаас编译原理
华东交通大学信息学院 李广丽 mydreamli0791@
第八章 常用中间语言
中间代码:一种介于源语言和目标语言之间的中间语言形式 中间代码:一种介于源语言和目标语言之间的中间语言形式 源语言和目标语言之间 生成中间代码的目的 生成中间代码的目的 (1)便于优化 便于优化 (2)便于移植 便于移植 常见的中间代码形式: 常见的中间代码形式: 形式 后缀式 三地址代码(四元式、 三地址代码(四元式、三元式和间接三元式 ) 树形
8.2 四元式
操作数1 操作数2 操作符 操作数 操作数 结果 结果: 结果:通常是由编译引进的临时变量 例: d=a+b*c
*, b, c, T1 +, a, T1, T2 =, T2 , / , d
T1,T2, 为临时变量,由四 为临时变量, 元式优化比较方便
条件语句的四元式
对于条件语句 if a>b then max:=a else max:=b 其四元式表示为: 其四元式表示为: ① (>,a,b,T1) ② (FJ,5,T1,/) ③ (:=,a,/,max) ④ (RJ,6,/,/) ⑤ (:=,b,/,max) ⑥ () •
例: A=B+C*D/E F=C*D 三元式 (1) *, (2) / , (3) +, (4) =, (5) *, (6) =, C, D (1), E B, (2) A, (3) C, D F, (1) 间接三元式 执行顺序 (1) (2) (3) (4) (1) (5) 三元式 (1) *, C, D (2) / , (1), E (3) +, B, (2) (4) =, A, (3) (5) =, F, (1)
+ + ∗ z
例:x =−y +y∗z + y∗z − ∗ ∗
8.3 三元式
操作符 左操作符数 右操作数
表达式的三元式: 表达式的三元式:w*x+(y+z) (1) *, w, x (2) +, y, z (3) +, (1), (2)
第三个三元 式中的操作数(1) 式中的操作数 (2)表示第 和第 表示第(1)和第 表示第 (2)条三元式的计 条三元式的计 算结果。 算结果。
间接三元式
使用三元式不便于代码优化,因为优化要删除 使用三元式不便于代码优化, 一些三元式,或对某些三元式的位置要进行变更, 一些三元式,或对某些三元式的位置要进行变更,由 于三元式的结果(表示为编号 表示为编号), 于三元式的结果 表示为编号 ,可以是某个三元式的 操作数,随着三元式位置的变更也将作相应的修改, 操作数,随着三元式位置的变更也将作相应的修改, 很费事。 很费事。 间接三元式: 间接三元式: 为了便于在三元式上作优化处理, 为了便于在三元式上作优化处理,可使用间接三元式 三元式的执行次序用另一张表表示,这样在优化时, 三元式的执行次序用另一张表表示 这样在优化时, 这样在优化时 三元式可以不变,而仅仅改变其执行顺序表。 三元式可以不变,而仅仅改变其执行顺序表。
不便于代码优化: 不便于代码优化:删 除某些三元式后可能 需作一系列的修改
三元式的执行次序用另一张 表表示, 表表示 优化时三元式可以不 变,仅仅改变其执行顺序表
8.4 树表示 4
抽象语法树
= x + + - y y (a) 抽象语法树 ∗ z y (b) 有向无环图 y ∗ z - y x
有向无环图
8.1 逆波兰式(后缀式) 逆波兰式(后缀式)
中缀表示 a+b a+b*c (a+b)*c a:=b*c+b*d 特点 1、运算对象出现的顺序和原有顺序(从左到右)相同 、运算对象出现的顺序和原有顺序(从左到右) 2、运算符按实际计算顺序(从左到右)出现 、运算符按实际计算顺序(从左到右) 3、运算符紧跟在运算对象的后面出现,且没有括号 、运算符紧跟在运算对象的后面出现, 优点:简明、 优点:简明、便于计算值 后缀表示 ab+ abc*+ ab+c* abc*bd*+:=
练习:写出赋值语句x:=a+b*(c-d)的三元式 练习:写出赋值语句 的三元式
条件语句的三元式
对于条件语句 if a>b then max:=a else max:=b 其三元式是: 其三元式是: ① (>,a,b) ② (FJ,5,(1) ) 1 ③ (:=,a,max) ④ (RJ,6,/) ⑤ (:=,b,/,max) ⑥ ( )
分别给出下列表达式的后缀表示
1. -a+b*(-c+d) 2. X:=-(a+b)/(c-d)-(a+b*c) 3. a=c ∧ b=d a-bc-d+*+ Xab+-cd-/abc*+-:= ac= bd=∧ ∧
条件语句的逆波兰式表示 if <exp> then <s1> else <s2> 其逆波兰式表示如下: 其逆波兰式表示如下: <exp的逆波兰式 <N1> FJ <s1的逆波兰式 的逆波兰式> 的逆波兰式 的逆波兰式 ><N2>RJ<s2的逆波兰式 的逆波兰式> 的逆波兰式 条件语句if 例:条件语句 a>b then max:=a else max:=b 逆波兰式表示为: 逆波兰式表示为: ab>11FJmaxa:=14RJmaxb:=
Байду номын сангаас编译原理
华东交通大学信息学院 李广丽 mydreamli0791@
第八章 常用中间语言
中间代码:一种介于源语言和目标语言之间的中间语言形式 中间代码:一种介于源语言和目标语言之间的中间语言形式 源语言和目标语言之间 生成中间代码的目的 生成中间代码的目的 (1)便于优化 便于优化 (2)便于移植 便于移植 常见的中间代码形式: 常见的中间代码形式: 形式 后缀式 三地址代码(四元式、 三地址代码(四元式、三元式和间接三元式 ) 树形
8.2 四元式
操作数1 操作数2 操作符 操作数 操作数 结果 结果: 结果:通常是由编译引进的临时变量 例: d=a+b*c
*, b, c, T1 +, a, T1, T2 =, T2 , / , d
T1,T2, 为临时变量,由四 为临时变量, 元式优化比较方便
条件语句的四元式
对于条件语句 if a>b then max:=a else max:=b 其四元式表示为: 其四元式表示为: ① (>,a,b,T1) ② (FJ,5,T1,/) ③ (:=,a,/,max) ④ (RJ,6,/,/) ⑤ (:=,b,/,max) ⑥ () •
例: A=B+C*D/E F=C*D 三元式 (1) *, (2) / , (3) +, (4) =, (5) *, (6) =, C, D (1), E B, (2) A, (3) C, D F, (1) 间接三元式 执行顺序 (1) (2) (3) (4) (1) (5) 三元式 (1) *, C, D (2) / , (1), E (3) +, B, (2) (4) =, A, (3) (5) =, F, (1)