编译原理:中间代码生成
翻译为中间语言的好处:便于进行与机器无关的代码优化;使编译程序改变目标机更容易;易于编译器的移植使编译程序的结构在逻辑上更为简单明确,以中间语言为界面,编译前端和后端的接口更清晰。
·
1,基本概念
翻译为中间语言的好处:
- 便于进行与机器无关的代码优化;
- 使编译程序改变目标机更容易;易于编译器的移植
- 使编译程序的结构在逻辑上更为简单明确,以中间语言为界面,编译前端和后端的接口更清晰。
中间语言的形式:后缀式,图表示法,三元式。
编译过程中不同语言的翻译或处理方法:说明语句的翻译,赋值语句的翻译,布尔表达式的翻译,控制语句的翻译。
中间语言的形式:
- 逆波兰表示:后缀式
- 图表示法:DAG和AST
- 三地址代码:四元式,三元式,间接三元式
2,后缀式
后缀式:把操作数写在前面,把算符写在后面。
3,图表示法
图表示法包括DAG(有向无环图)与AST(抽象语法树)。
- 相同点:对于表达式中的每个子表达式,图中都有一个结点。一个内部结点代表一个操作符,它的孩子代表操作数。
- 不同点:在DAG图中代表公共子表达式的结点具有多个父结点,而在一棵抽象语法树中公共子表达式被表示为重复的子树。
前序遍历:前缀式;中序遍历:中缀式;后序遍历:后缀式;
4,三地址码
三元式
【三元式】三地址码是由下面一般形式的语句构成的序列:x:=y op z
每条语句通常包含三个地址:两个操作数地址和一个操作结果地址
四元式
间接三元式
5,语义分析中各种语句的处理
【说明语句的翻译】
- 声明语句的处理方式:不生成可执行代码,只涉及符号表的操作。
- 声明语句的处理:对每个局部名字,在符号表中建立相应的表项,填写有关的信息(类型,嵌套深度,相对地址等)。
- 相对地址:相对静态数据区基址或活动记录中局部数据区基址的一个偏移值。
赋值语句的翻译
布尔表达式的翻译
布尔表达式: 用布尔运算符号(and,or,not)作用到布尔变量或关系表达式上而组成。
控制语句的翻译
更多推荐
所有评论(0)