编译原理:中间代码生成

一,基本概念 

翻译为中间语言的好处:

1)便于进行与机器无关的代码优化;

2)使编译程序改变目标机更容易;易于编译器的移植

3)使编译程序的结构在逻辑上更为简单明确,以中间语言为界面,编译前端和后端的接口更清晰。

中间语言的形式:后缀式,图表示法,三元式

编译过程中不同语言的翻译或处理方法:说明语句的翻译,赋值语句的翻译,布尔表达式的翻译,控制语句的翻译

中间语言的形式:

逆波兰表示:后缀式

图表示法:DAG和AST

三地址代码:四元式,三元式,间接三元式

二,后缀式

后缀式:把操作数写在前面,把算符写在后面

编译原理:中间代码生成_第1张图片

三,图表示法

图表示法包括DAG(有向无环图)AST(抽象语法树)

相同点:对于表达式中的每个子表达式,图中都有一个结点。一个内部结点代表一个操作符,它的孩子代表操作数

不同点:DAG图中代表公共子表达式的结点具有多个父结点,而在一棵抽象语法树中公共子表达式被表示为重复的子树。        

前序遍历:前缀式;中序遍历:中缀式;后序遍历:后缀式;

编译原理:中间代码生成_第2张图片

编译原理:中间代码生成_第3张图片

四,三地址码

三元式

三地址码是由下面一般形式的语句构成的序列:x:=y op z

每条语句通常包含三个地址:两个操作数地址和一个操作结果地址

编译原理:中间代码生成_第4张图片编译原理:中间代码生成_第5张图片

四元式

编译原理:中间代码生成_第6张图片

间接三元式

编译原理:中间代码生成_第7张图片

五,语义分析中各种语句的处理

说明语句的翻译

声明语句的处理方式:不生成可执行代码,只涉及符号表的操作

声明语句的处理:对每个局部名字,在符号表中建立相应的表项,填写有关的信息(类型,嵌套深度,相对地址等)

相对地址:相对静态数据区基址或活动记录中局部数据区基址的一个偏移值

赋值语句的翻译

编译原理:中间代码生成_第8张图片

布尔表达式的翻译

布尔表达式: 用布尔运算符号andornot作用到布尔变量或关系表达式上而组成。

控制语句的翻译

编译原理:中间代码生成_第9张图片

 

你可能感兴趣的:(计算机网络/编译原理)