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
背景:近期使用Zk实现了一个简单的配置管理的小东西,在此开源出来,有兴趣的希望提出您的宝贵意见。如果恰巧您也使用或者接触过类似的东西,也希望您可以分享下您觉得现在这个项目可以优化和改进的地方。项目地址:https://github.com/cncduLee/zk-ucc需求:1、不需要重启应用、修改...
分类:
其他好文 时间:
2015-04-11 11:46:20
阅读次数:
183
本节对UCC编译器的中间代码生成及优化进行简介,给出基本块BasicBlock、三地址码、控制流图CFG的相应数据结构,介绍有条件跳转、无条件跳转和间接跳转等概念。...
分类:
其他好文 时间:
2015-04-09 09:02:30
阅读次数:
217
2015年03月30日课本P24 P226 P259(左侧,7-1图)1.外部声明 external-declaration external int a; int b; void f(){}2.ucc\examples\sc\decl.c课本P24 Declaration ----->...
分类:
其他好文 时间:
2015-04-05 10:31:42
阅读次数:
234
编译安装下载dropbear、并解压#wgethttp://matt.ucc.asn.au/dropbear/releases/dropbear-2015.67.tar.bz2
#tarxvfdropbear-2015.67.tar.bz2
#cddropbear-2015.67
#./configure--prefix=/usr/local/dropbear--sysconfdir=/etc/dropbear编译安装dropbear,要指定安装dropbear的哪..
分类:
其他好文 时间:
2015-04-04 01:19:34
阅读次数:
317