编译器
文章平均质量分 80
SonicLing
这个作者很懒,什么都没留下…
展开
-
C++编译器的预编译组件完工
预编译组件完工的一点归纳总结 刚刚完成了C++编译器预编译组件。只能说大致完成了,有一点还没有达到C++标准所要求的,那就是条件预编译,也即#if directive的comparing expression。根据C++文档,#if 后面应该是一个整型,或者可以看作整型的表达式,我的理解是除了整数外只有bool类型才能看作整型。因此#if后面可以跟数字、比较、defined原创 2006-12-09 03:47:00 · 3723 阅读 · 2 评论 -
LR 语法分析器
下载地址 LR语法分析器算是基本完成了,只需要一个文法定义文件(.syntax),就可以进行对应语言的语法分析,最后形成语法树。词法分析是固定的,采用C++的词法定义。以后将加入动态的词法分析。压缩包中文件的描述:LRTable.exe 是用文法定义文件(syntax文件)生成LR动作表文件(action文件),使用方法在 1_build_actio原创 2009-04-10 00:06:00 · 11280 阅读 · 17 评论 -
GCC源码分析(三)——中间语言
一、前言 很忙,很久没更新博客了,继续没写完的gcc分析,争取在传说将要用C++重写的gcc 5出来之前初略分析完。二、符号表(GENERIC) 前篇介绍了gcc的语法分析,在语法分析过程中,所有识别出来的语言部件都用一个叫TREE的变量保存着。这个TREE就是gcc语法树,叫做GENERIC。实际上它也是gcc的符号表,因为变量名、类型等等这些信息都由TREE关联起来。原创 2012-08-28 16:53:49 · 10964 阅读 · 4 评论 -
GCC源码分析(二)——前端
从这一篇开始,我们将从源代码的角度来分析GCC如何完成对C语言源文件的处理。GCC的内部构架在GCC Internals(搜“gccint.pdf”,或者见[1])里已经讲述得很详细了,但是如果你只看了gccint就来看代码,还是觉得一头雾水,无法下手,因为你很难把gccint所讲的概念同gcc代码里真实的数据结构联系起来。那么这也是我把我这半年的分析经理写下来的原因,大家可以参照gccint来看原创 2011-08-21 17:58:08 · 18344 阅读 · 9 评论 -
GCC源码分析(四)——优化
一、前言本篇只介绍一下框架,就不具体介绍每个步骤了。二、Pass框架上一篇已经讲了gcc的中间语言的表现形式。gcc 对中间语言的每一步处理叫做一个pass。从一个函数的GENERIC树刚被转换为GIMPLE之后,接下来的工作就由一连串的pass来完成。这些pass环环相扣,最终完成整个程序的优化工作,为目标代码生成做最后的准备。GCC的pass结构定义在gcc/tree-原创 2012-09-11 21:07:30 · 9287 阅读 · 6 评论 -
GCC源码分析(一)——介绍与安装
上半年一直在做有关GCC和LD的项目,到现在还没做完。最近几天编程的那台电脑坏了,所以趁此间隙写一点相关的分析和经验之类的跟大家共享。一、GCC的作用和运行机制 GCC是Linux下重要的编译工具,用法这里就不说了,满大街都找得到。这里我重点介绍GCC的运作机制,作为代码分析的铺垫。全篇使用C语言子部件来作分析,因为我对其他语言的编译没有研究。 根据编译原理,语言的编译分为原创 2011-08-19 17:51:15 · 17712 阅读 · 1 评论 -
GCC源码分析(五)——指令生成
一、前言 又有好久没写了,的确很忙。前篇介绍了GCC的pass格局,它是GCC中间语言部分的核心架构,也是贯穿整个编译流程的核心。在完成优化处理之后,GCC必须做的最后一步就是生成最后的编译结果,通常情况下就是汇编文件(文本或者二进制并不重要)。 前面也讲到了,GCC中间语言的核心数据结构是GENERIC、GIMPLE和RTL。其中的RTL就是和指令紧密相关的一种结构,它是指令生成的起原创 2012-12-02 00:07:04 · 12508 阅读 · 13 评论