自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

SonicLing的专栏

用C++写通用编译器

  • 博客(20)
  • 收藏
  • 关注

原创 GCC源码分析(五)——指令生成

一、前言  又有好久没写了,的确很忙。前篇介绍了GCC的pass格局,它是GCC中间语言部分的核心架构,也是贯穿整个编译流程的核心。在完成优化处理之后,GCC必须做的最后一步就是生成最后的编译结果,通常情况下就是汇编文件(文本或者二进制并不重要)。  前面也讲到了,GCC中间语言的核心数据结构是GENERIC、GIMPLE和RTL。其中的RTL就是和指令紧密相关的一种结构,它是指令生成的起

2012-12-02 00:07:04 12399 13

原创 GCC源码分析(四)——优化

一、前言本篇只介绍一下框架,就不具体介绍每个步骤了。二、Pass框架上一篇已经讲了gcc的中间语言的表现形式。gcc 对中间语言的每一步处理叫做一个pass。从一个函数的GENERIC树刚被转换为GIMPLE之后,接下来的工作就由一连串的pass来完成。这些pass环环相扣,最终完成整个程序的优化工作,为目标代码生成做最后的准备。GCC的pass结构定义在gcc/tree-

2012-09-11 21:07:30 9148 6

原创 GCC源码分析(三)——中间语言

一、前言  很忙,很久没更新博客了,继续没写完的gcc分析,争取在传说将要用C++重写的gcc 5出来之前初略分析完。二、符号表(GENERIC)  前篇介绍了gcc的语法分析,在语法分析过程中,所有识别出来的语言部件都用一个叫TREE的变量保存着。这个TREE就是gcc语法树,叫做GENERIC。实际上它也是gcc的符号表,因为变量名、类型等等这些信息都由TREE关联起来。

2012-08-28 16:53:49 10882 4

原创 GCC源码分析(二)——前端

从这一篇开始,我们将从源代码的角度来分析GCC如何完成对C语言源文件的处理。GCC的内部构架在GCC Internals(搜“gccint.pdf”,或者见[1])里已经讲述得很详细了,但是如果你只看了gccint就来看代码,还是觉得一头雾水,无法下手,因为你很难把gccint所讲的概念同gcc代码里真实的数据结构联系起来。那么这也是我把我这半年的分析经理写下来的原因,大家可以参照gccint来看

2011-08-21 17:58:08 18228 9

原创 GCC源码分析(一)——介绍与安装

上半年一直在做有关GCC和LD的项目,到现在还没做完。最近几天编程的那台电脑坏了,所以趁此间隙写一点相关的分析和经验之类的跟大家共享。一、GCC的作用和运行机制    GCC是Linux下重要的编译工具,用法这里就不说了,满大街都找得到。这里我重点介绍GCC的运作机制,作为代码分析的铺垫。全篇使用C语言子部件来作分析,因为我对其他语言的编译没有研究。    根据编译原理,语言的编译分为

2011-08-19 17:51:15 17590 1

原创 又一种设计思路

随便浏览中观摩了《联想利泰的一道做出来就给月薪7K的面试题--交通灯管理系统》一文,该文设计实现了一个交通灯管理系统,模拟了道路、灯和控制器三个对象的行为。这种设计在思路上比较直观,可能大多数面向对象的设计者第一时间都会想到这种设计。虽然这种设计已经很好的满足于需求说明书了,但是

2011-06-02 00:55:00 3041

原创 Linux块设备加密之dm-crypt分析

相关的分析工作一年前就做完了,一直懒得写下来。现在觉得还是写下来,以来怕自己忘记了,二来可以给大家分享一下自己的研究经验。这篇文章算是《Device Mapper代码分析》的后续篇,因为dm-crypt是基于dm框架的,因此与上一篇一样,也以2.6.33内核代码为基础来讲述代码的分析过程。但是本文侧重点不同在于着重分析一下三个方面:1、Linux密码管理2、dm-crypt到与Linux密码的关联3、dm-crypt的异步处理一、Linux密码管理Linux内核中,密码相关的

2011-03-25 01:22:00 14512 24

原创 Linux 下不经过BIOS重启(i386)

<br />前段时间有个项目,要求在Linux下不经过BIOS重启,i386平台。<br /> <br />一、可行性分析<br /> <br />  众所周知,BIOS中包含了CPU及其他各种设备的初始化代码,Linux系统运行之后是否能够将各种用到的设备返回到刚被BIOS初始化后的状态是是否可行的关键。<br /> <br />  从项目的条件来看,外设并不是问题。因为要首先开起来的那个Linux只会用到磁盘系统。而通用的磁盘系统是不存在与启动相关的关键状态的。<br /> <br />  另外就是核心

2010-09-23 17:53:00 3886 3

原创 我的词法分析器

<br />例子下载<br /> <br />一、可配置的词法分析器<br /> <br />通用编译器是基于配置的,编译器本身不包含特定语言相关的信息。而语言相关的信息放到配置文件中。因此在整个编译器设计中,不仅仅是编译器要编译的文件需要词法分析,配置信息的读取也需要词法分析。<br /> <br />在可定制的词法分析部件完工之前,所有的词法分析都靠硬编码完成,即像这样:<br /> input_iterator ReadToken(input_iterator begin, input_iterato

2010-09-16 23:30:00 4242 1

原创 Device Mapper 代码分析

Device Mapper(DM)是Linux 2.6全面引入的块设备新构架,通过DM可以灵活地管理系统中所有的真实或虚拟的块设备。DM以块设备的形式注册到Linux内核中,凡是挂载(或者说“映射”)于DM结构下的块设备,不管他们是如何组织,如何通讯,在Linux看来都是一个完整的DM块设备。因此DM让不同组织形式的块设备或者块设备集群在Linux内核面前有一个完整统一的DM表示。一、DM

2010-04-08 00:13:00 16362 10

原创 IIS7下的Web应用程序以“Windows集成安全性”方式连接到远程SQL Server

Vista最令人郁闷的地方是空间太大,所有软件都安装在其他盘,可是我25G的C盘也被蚕食一空。安装SQL Server 2005需要占用C盘800M-1G的空间,实在让人不忍心再去腾挪我那可怜的C盘了。 于是我便将肥大的SQL Server 2005安装到虚拟机上了,这样不会占用我那可怜巴巴2G左右的C盘剩余空间。 SQL Server 2005推荐使用“Windows集成身份验证

2009-09-08 16:36:00 3837

原创 FTP测试工具

下载地址 最近写了个FTP测试工具,可以对FTP服务器甚至其他行文本协议的服务器,例如HTTP、SMTP等,进行测试。 原本只是写一个具有简单收发功能的小程序,但是FTP里面端口号的计算很烦,因此该程序可以自动生成PORT命令,和自动分析PASV回复,并自动连接到被动端口上。  本程序是用C++ Builder 2009制作的。已经不记得何时,原先的事件驱动

2009-09-07 09:19:00 9383

原创 辞职

6月5日,也就是上星期五提交了辞呈。过了个周末。6月8日星期一上午项目经理问我:“手头上有没提交的代码吗?”我说:“都提交了。”中午技术总监过来问我:“希望什么时候离职?”我听项目经理说公司一般都是对辞职人员从速办理辞职的。所以就说:“随便,什么时候都可以。”技术总监说:“好,待会儿财务的会过来跟你办手续。”过了一会儿,果然财务的来了,在辞职表上签了字,工作证被收走了。再过了一会儿,一

2009-06-08 23:46:00 3458 1

原创 脚本解释器构架(三)

运行时环境脚本的运行时环境(Run-Time Environment, RTE)是解释器的核心。运行时环境与语法分析器可以相互独立,但是又有联系。脚本的解释方式主要有两种:1、基于伪指令的解释;2、基于语法树的解释。我的脚本解释器采用第二种解释方式。 基于伪指令的解释由于我的脚本解释器不是采用这种解释方式,因此先介绍这种方式,然后详细介绍我的脚本解释器的基于语法树的解释方式

2009-06-01 22:25:00 3198

原创 脚本解释器构架(二)

脚本语言的特点脚本语言最直观的特点是文法简单,部署方便。大多数的脚本语言都有如下更细致的特点:1. 对象化2. 变量按名编排3. 引用传递对象化脚本的值都是对象,只有这样才可以支持弱类型。同样一个变量可以赋字符串值,也可以赋数值,或者其他的某些值,当访问的时候,还能将这些值还原为原本的样子,这种表象正好和面向对象的多态是一致的。当然,可以用非面向对象的方法来

2009-05-26 12:04:00 2700

原创 脚本解释器构架(一)

解释器和编译器的前端是相似的。编译器包括前端(词法分析、语法分析、语义分析)和后端(优化、中间语言、指令生成)。解释器的前端不需要语义分析,仅靠语法分析构建一个语法树即可。后端就是解释运行环境。词法分析太简单了。这里从语法分析讲起。脚本的语法分析绝大多数脚本的语法非常简单,任何一种自顶向下的分析法基本都可以胜任。LL(1)是个不错的选择——简单、高效。LL1的要求很严格:1、不

2009-05-26 10:45:00 3907

原创 LR 语法分析器

下载地址 LR语法分析器算是基本完成了,只需要一个文法定义文件(.syntax),就可以进行对应语言的语法分析,最后形成语法树。词法分析是固定的,采用C++的词法定义。以后将加入动态的词法分析。压缩包中文件的描述:LRTable.exe 是用文法定义文件(syntax文件)生成LR动作表文件(action文件),使用方法在 1_build_actio

2009-04-10 00:06:00 11231 17

原创 对C的新感觉

加入公司两周了,进公司的第一个工作是为公司调试一个叫做libevent的库。以前总是用C++,很少用C。这回第一个任务就是要去改一个C写的库,起初感觉很不适应。   以前用C++写程序,感觉就像在吃剥了皮,抽了芯的莲子。虽然之前剥皮和抽芯的过程很麻烦,但是之后吃起来就很顺畅。用C++做项目的关键是划分对象。对象的划分决定了对象之间的关系;决定了信号在对象之间流动的流程;决定了程序的健壮性;

2008-07-21 02:11:00 6690 1

原创 我的脚本解释器

下载地址 2009/7/6 更新信息 修复一个很傻瓜的bug:字符串中没有对转义字符“/”进行处理,结果像 "/"" 这样的字符串常量表达式分析出错。已修复。  2008/5/6 更新信息添加文件访问功能。使用File对象可实现对文本文件的读写。File对象有如下成员:File() 构造函数File(file)  构造并打开文件

2008-01-28 15:34:00 6333 2

原创 C++编译器的预编译组件完工

预编译组件完工的一点归纳总结         刚刚完成了C++编译器预编译组件。只能说大致完成了,有一点还没有达到C++标准所要求的,那就是条件预编译,也即#if directive的comparing expression。根据C++文档,#if 后面应该是一个整型,或者可以看作整型的表达式,我的理解是除了整数外只有bool类型才能看作整型。因此#if后面可以跟数字、比较、defined

2006-12-09 03:47:00 3555 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除