当前搜索:

在Visual C++ 2012(MSVC)编译SDCC编译器

当你想使用一个开源的工具来开发单片机51程序时,可以使用SDCC编译器,它不仅是免费的,还是开放源码的编译器;不仅让你可以开发51的程序,还可以深入了解编译原理的编译器。通过本文的指导,你可以实现自己编译一个51编译器出来,也可以继续深入地了解编译器的原理作为基础。 为了下载SDCC编译器的源码,你得先到官方网站下载相应的代码,下载代码有两种方式:方式一是通过SVN代码库来下载:svn://svn...
阅读(2185) 评论(4)

LCC编译器的源程序分析(69)全局变量的初始化

前面已经介绍了全局函数和全局变量的声明处理,但全局变量的初始化,还没有详细地分析,现在就来干这件事情。比如编写C的程序,有如下的代码:#001 #002 int g_nTest = 100;#003 #004 int main(void)#005 {#006  int nTest1 = 1;#007  int nTest2 = 2;像第2行代码就是全局变量的声明和初...
阅读(4851) 评论(5)

LCC编译器的源程序分析(68)内存分配链表

LCC采用大块内存的方法,那它分配内存也是比较特殊的,它的源程序如下:#001 //大块内存结构。#002 struct block#003 {#004     struct block *next; //后继块指针。#005     char *limit; //尾位置#006     char *avail; //可用的开始位置.#007 };#008 #0...
阅读(3892) 评论(1)

LCC编译器的源程序分析(67)删除内存链表

LCC的内存分配是使用先分配大块内存,然后再从大块内存里分配出来小块内存,这样减少调用malloc的次数,当然也就减少调用函数free释放内存的次数,以便提高LCC的内存管理的性能。有网友对这个看不懂,我现在就把释放内存函数分析如下: #001 //#002 //删除内存链表.#003 //#004 //蔡军生 2007/08/23 QQ:9073204 深圳#005 //...
阅读(4203) 评论(3)

LCC编译器的源程序分析(66)DAG树分析例子

前面已经介绍创建分析树,下面就来详细地说明一个例子,看看到底生成什么样的分析树,C源程序如下:#005  int nTest1 = 1;#006  int nTest2 = 2;#007  int nTest3;#008  int i;#009  #010  nTest3 = nTest1 + nTest2; 把上面的源程序分析后,就生成下面的DAG树,如下:#...
阅读(4528) 评论(0)

LCC编译器的源程序分析(65)后端接口的结构注释

因为LCC后端可以生成不同机器结构的代码,所以需要定义后端的接口结构,当不同的模块实现这些接口时,就可以实现不同的机器代码生成。下面就是这个接口的结构定义注释。 #001 //后端代码生成的接口.#002  typedef struct interface #003 {#004  //数据类型.#005  Metrics charmetric;#006  Metrics...
阅读(3986) 评论(0)

LCC编译器的源程序分析(64)符号表的结构注释

符号表是用来保存每个符号信息的,因为编译器分析源程序的过程会生成很多符号的属性,后端根据这些属性来生成合适的指令和代码的格式。 #001 //符号表结构.#002 //#003 //蔡军生 2007/08/10 QQ:9073204#004 //#005 struct symbol #006 {#007  char *name; //符号的名称,大多数情况是源程序的...
阅读(3611) 评论(0)

LCC编译器的源程序分析(63)创建DAG森林的源程序

#001 //#002 void walk(Tree tp, int tlab, int flab) #003 {#004  //创建DAG森林.#005  listnodes(tp, tlab, flab);#006 #007  //如果DAG森林生成.#008  if (forest) #009  {#010         Node list = fore...
阅读(4242) 评论(4)

LCC编译器的源程序分析(62)生成常量树节点的流程

在LCC里分析下面的语句:#005  int nTest1 = 1;就需要把1生成一个常量树节点,那么在LCC里用怎么样的流程来创建这个树节点的呢?这个过程大体是这样的:当碰到赋值符号后,就需要分析表达式,于是调用函数获取记号函数CCaiCompiler::Instance()->GetLex()->GetToken(),接着下来就调用构造常量符号项的函数Symbol CCaiLex:...
阅读(3128) 评论(0)

LCC编译器的源程序分析(61)复合语句的代码块流程

LCC编译器要分析下面的程序,大体流程是这样的。#001 #include #002 #003 int main(void)#004 {#005  int nTest1 = 1;#006  int nTest2 = 2;#007  int nTest3;#008  int i;#009  #010  nTest3 = nTest1 + nTest2;#0...
阅读(3336) 评论(0)

LCC编译器的源程序分析(60)代码表的结构

在LCC里使用代码表来表示代码块,前端把所有代码属性放到代码表里,后端根据代码表来生成代码,它的结构如下:#001 //代码表结构定义.#002 //蔡军生 2007/07/27#003 struct code#004 {#005     //代码表的类型.#006     enum KindType#007     {#008          Blockbeg,...
阅读(3759) 评论(0)

LCC编译器的源程序分析(59)代码生成的源程序注释

下面详细地注释了gen.c的源程序,这样看起来就比较容易理解,希望对你有所帮助。#001 #include "c.h"#002 #003 static char rcsid[] = "$Id: gen.c 355 2007-02-18 22:08:49Z drh $";#004 #005 #define readsreg(p) /#006     (generic((p)-...
阅读(4385) 评论(0)

LCC编译器的源程序分析(58)后端使用的节点结构

 在LCC编译器后端,主要使用下面的节点结构来标识代码属性。#001 #002 //节点注释的扩展,主要是代码生成使用。#003 //#004 //蔡军生 2007/07/21 QQ: 9073204#005 //#006 typedef struct {#007     unsigned listed:1; //标记这是树的根节点。#008     unsig...
阅读(3581) 评论(0)

LCC编译器的源程序分析(57)不同目标代码生成的接口结构

LCC为了生成不同机器的目标代码,它提供了一个接口给后端的代码生成,以便可以只修改后端,就可以达到生成不同的机器代码。它的接口如下:#001 //后端代码生成接口,可以写生成不同的目标代码。#002 //#003 //蔡军生 2007/07/20 QQ: 9073204#004 //#005 typedef struct {#006     //对齐方式的最大字节。#0...
阅读(3536) 评论(0)

LCC编译器的源程序分析(56)寄存器分配的属性结构

现在详细地分析寄存器分配的属性结构,它的定义如下:#001 typedef struct {#002     Symbol vbl; //保存变量符号,而不是临时变量.#003     short set; //寄存器类型,比如整数,或者浮点数。#004     short number; //寄存器编号。#005     unsigned mask; //寄存器字节大小,比如...
阅读(3405) 评论(0)
70条 共5页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:5901773次
    • 积分:76272
    • 等级:
    • 排名:第22名
    • 原创:1625篇
    • 转载:61篇
    • 译文:11篇
    • 评论:2102条
    文章存档