1 / 74
文档名称:

《编译原理实践及应用》PPT教学课件-第5章 中间代码生成.ppt

格式:ppt   页数:74
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

《编译原理实践及应用》PPT教学课件-第5章 中间代码生成.ppt

上传人:3346389411 2013/4/11 文件大小:0 KB

下载得到文件列表

《编译原理实践及应用》PPT教学课件-第5章 中间代码生成.ppt

文档介绍

文档介绍:语义分析和中间代码生成
第五章
本章要求
主要内容:语义分析和中间代码生成的功能,中间代码的形式,属性文法及语法制导的翻译程序,各种语句的语法制导的翻译过程
重点掌握:属性文法,语义分析与处理的方法,中间代码的表示形式,各种语句的代码结构,各种语句的翻译方法
语义分析和中间代码生成所处的位置:
概述
1. 语义分析和中间代码生成在编译器中的位置:
静态语义检查:如:类型、运算、数组维数、越界等的检查
语义处理:如:变量的存储分配、表达式的求值、语句的翻译(中间代码的生成)
总目标:生成等价的中间代码
语法分析
语义分析和中间代码生成
编译的后续阶段
语法树
中间代码
2. 功能及任务:
输入
-语法分析单位
输出
- 用中间代码形式表示的文本
- 出错处理: 定位、继续编译
3. 为什么要此阶段?
逻辑结构清楚;利于不同目标机上实现同一种语言;
利于进行与机器无关的优化,这些内部形式也能用于解释。
4. 什么是中间代码(Intermediate code)
源程序的一种内部表示,不依赖目标机的结构,易于机械生成目标代码的中间表示。
5. 中间代码的几种形式
逆波兰、三元式、间接三元式、四元式、树
1、逆波兰式:
运算对象写在前,运算符写在后(后缀表示形式)
例:a+b  ab+
(a+b)*c  ab+c*
a+b*c  abc*+
a:=b*c+b*d  abc*bd*+:=

+
a b
优点:易于计算机处理
利用栈,将扫描到的运算对象入栈,碰到运算符:
若是双目运算符,则对栈顶的两个运算对象实施该运算并将运算结果代替这两个运算对象进栈;
若是单目运算符,对栈顶元素,执行该运算,将运算结果代替该元素进栈,最后结果即栈顶元素。
练习
写出下列算式的逆波兰表示
a+b*(c+d/e)
a:=b*(-c)+b *(-34)
not A or not (C or not D)
abcde/+*+
a b c - * b 34 - * + :=
A not C D not or not or
+
a *
b +
c /
d e
后缀式的推广
(1)赋值语句A:=E,后缀式为:AE:=
(2)转向语句GOTO L的后缀式为:L’jmp
(3)条件语句if x>y then m:=x else m:=y
1
2
3
4
5
6
7
8
9
10
11
12
13
14
x
y
>
11
jez
m
x
:=
14
j
m
y
:=

2、三元式
编号(运算符,第一运算数,第二运算数)
如:a:= b*c+b*d
(1)(*,b,c)
(2)(*,b,d)
(3)(+,(1),(2))
(4)(:=,(3),a)
对于单目运算符,只有一个运算对象,另一个为空
注意:在三元式中的编号既代表了序号,又代表了结果的存放位置。
3、四元式
是目前最常用的中间代码形式:
(运算符,第一运算数,第二运算数,结果)
例:a:=b*c+b*d
(1)(*,b,c,t1) (2)(*,b,d,t2)
(3)(+,t1,t2,t3) (4)(:=,t3, ,a)
也可以写成赋值语句形式:
(1)t1:=b*c (2)t2:=b*d
(3)t3:=t1+t2 (4)a:=t3