6.1 汇编代码生成简介
历经词法分析、语法分析、语义检查和中间代码生成阶段,我们终于来到了“目标代码生成阶段”,由于UCC编译器的目标代码即为32位x86汇编代码,因此我们就把本章称为“汇编代码生成”。UCC编译器中的大部分源代码都适用于Windows和Linux平台,但Windows平台上缺省的汇编器支持Intel风格的x86汇编代码,而Linux平台默认的汇编器则采用AT&T风格的...
分类:
其他好文 时间:
2015-04-26 09:30:07
阅读次数:
185
5.4.2 基本块的合并
我们在第5.4.1节时给出了由基本块构成的双向链表和控制流图,为阅读方便,我们这里再次给出“图5.1.4 基本块的静态结构和动态结构”。在这一小节中,我们试图把双向链表中相邻的基本块进行合并,当然这种合并需要满足一定条件,同时要保持程序的原有语义。在合并后,控制流图中的前驱与后继关系也要进行调整。我们需要改动的数据结构有图5.4.1中的双向链表和控制流图。需要...
分类:
其他好文 时间:
2015-04-24 19:13:54
阅读次数:
136
5.4.1 删除无用的临时变量和优化跳转目标
UCC编译器在优化方面做的工作不多,其中与优化有关的函数主要有以下几个:
(1) Symbol Simplify(Type ty, int opcode, Symbol src1,Symbol src2);
用于进行“代数恒等式”的简化,例如表达式“a
(2) Symbol TryAddValue(Type ty,...
分类:
其他好文 时间:
2015-04-23 17:28:20
阅读次数:
182
5.3.2.Switch语句的翻译
在这一小节中,我们来讨论一下switch语句的翻译,switch语句的产生式如下所示。
SwitchStatement:
switch( expr ) statement
当C程序员编写出如下代码时,UCC编译器会在语义检查阶段进行报错“error:The break shall appear in...
分类:
其他好文 时间:
2015-04-22 18:14:12
阅读次数:
160
5.3.1 If语句和复合语句的翻译
我们先简单回顾一下对布尔表达式的翻译,我们通过调用TranslateBranch函数来产生跳转指令,从而实现布尔表达式的语义。在使用函数TranslateBranch(expr, bt, bn)时,有这么两个约定:
(1) 当expr为真时,跳往bt基本块;
(2) 紧随“函数TranslateBranch所生成的跳转指令”之...
分类:
其他好文 时间:
2015-04-20 16:58:25
阅读次数:
142
5.2.4 后缀表达式的翻译
在前面的章节中,我们介绍了用于对数组元素和结构体成员进行访问的函数Offset,其接口如下所示,参数addr代表了基地址,参数voff代表可变偏移,而参数coff则代表常量偏移。
Symbol Offset(Type ty, Symbol addr,Symbol voff, int coff);
函数Offset的基本想法是产生...
分类:
其他好文 时间:
2015-04-17 11:36:10
阅读次数:
140
5.2.2 再论符号symbol与公共子表达式
在介绍算术表达式的翻译前,让我们简单重温一下第2.5节中的“图2.5.4 公共子表达式”及“图2.5.5 valueDef和valueUse”。为阅读方便,我们再次给出这两张图,更详细的说明请参见第2.5节。对于图2.5.4第2行的a+b,我们会由第7行的中间代码来对a+b进行求值,其结果存于临时变量t1中,之后在第3行中再次遇到表达...
分类:
其他好文 时间:
2015-04-13 09:44:02
阅读次数:
157
用Java写java的编译器和jvm为什么用java,java的结构最便于理解,其丰富的设计模式能使编译器的结构十分鲜明一个编译器的前端模型源代码–词法分析器-(词法单元)-语法分析器-(语法分析树)-中间代码生成器–三地址代码再加上一个符号表连接所有的结构 文法定义一个上下文无关方法由四个元素组成
1.一个终结符号集合,也就是“词法单元”终结符号是该文法定义的语言的基本符号的集合
2.一个非终...
分类:
其他好文 时间:
2015-04-11 22:34:36
阅读次数:
281
5.2 中间代码生成与优化_布尔表达式的翻译
我们仍然按照语法分析和语义检查时的思路,先讨论表达式的翻译,再处理语句。表达式从概念上来说,可分为算术表达式和布尔表达式,在一些编程语言(例如Java)中对这两者是有严格区分的,算术表达式的结果是整数或浮点数,而布尔表达式的结果是逻辑上的真或假。布尔是英国数学家,由于布尔较早进行了关于“与或非”逻辑运算的研究,为了纪念这位先驱,在Java中...
分类:
其他好文 时间:
2015-04-10 15:40:23
阅读次数:
172
本节对UCC编译器的中间代码生成及优化进行简介,给出基本块BasicBlock、三地址码、控制流图CFG的相应数据结构,介绍有条件跳转、无条件跳转和间接跳转等概念。...
分类:
其他好文 时间:
2015-04-09 09:02:30
阅读次数:
217