<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[SonicLing的专栏]]></title><description><![CDATA[用C++写通用编译器]]></description><link>https://blog.csdn.net/sonicling</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; sonicling]]></copyright><item><title><![CDATA[GCC源码分析（五）——指令生成]]></title><link>https://blog.csdn.net/sonicling/article/details/8246231</link><guid>https://blog.csdn.net/sonicling/article/details/8246231</guid><author>sonicling</author><pubDate>Sun, 02 Dec 2012 00:07:04 +0800</pubDate><description><![CDATA[一、前言
　　又有好久没写了，的确很忙。前篇介绍了GCC的pass格局，它是GCC中间语言部分的核心架构，也是贯穿整个编译流程的核心。在完成优化处理之后，GCC必须做的最后一步就是生成最后的编译结果，通常情况下就是汇编文件（文本或者二进制并不重要）。
　　前面也讲到了，GCC中间语言的核心数据结构是GENERIC、GIMPLE和RTL。其中的RTL就是和指令紧密相关的一种结构，它是指令生成的起]]></description><category></category></item><item><title><![CDATA[GCC源码分析（四）——优化]]></title><link>https://blog.csdn.net/sonicling/article/details/7916931</link><guid>https://blog.csdn.net/sonicling/article/details/7916931</guid><author>sonicling</author><pubDate>Tue, 11 Sep 2012 21:07:30 +0800</pubDate><description><![CDATA[一、前言
本篇只介绍一下框架，就不具体介绍每个步骤了。


二、Pass框架
上一篇已经讲了gcc的中间语言的表现形式。gcc 对中间语言的每一步处理叫做一个pass。从一个函数的GENERIC树刚被转换为GIMPLE之后，接下来的工作就由一连串的pass来完成。这些pass环环相扣，最终完成整个程序的优化工作，为目标代码生成做最后的准备。
GCC的pass结构定义在gcc/tree-]]></description><category></category></item><item><title><![CDATA[GCC源码分析（三）——中间语言]]></title><link>https://blog.csdn.net/sonicling/article/details/7915301</link><guid>https://blog.csdn.net/sonicling/article/details/7915301</guid><author>sonicling</author><pubDate>Tue, 28 Aug 2012 16:53:49 +0800</pubDate><description><![CDATA[一、前言

　　很忙，很久没更新博客了，继续没写完的gcc分析，争取在传说将要用C++重写的gcc 5出来之前初略分析完。
二、符号表（GENERIC）
　　前篇介绍了gcc的语法分析，在语法分析过程中，所有识别出来的语言部件都用一个叫TREE的变量保存着。这个TREE就是gcc语法树，叫做GENERIC。实际上它也是gcc的符号表，因为变量名、类型等等这些信息都由TREE关联起来。]]></description><category></category></item><item><title><![CDATA[GCC源码分析（二）——前端]]></title><link>https://blog.csdn.net/sonicling/article/details/6706152</link><guid>https://blog.csdn.net/sonicling/article/details/6706152</guid><author>sonicling</author><pubDate>Sun, 21 Aug 2011 17:58:08 +0800</pubDate><description><![CDATA[从这一篇开始，我们将从源代码的角度来分析GCC如何完成对C语言源文件的处理。GCC的内部构架在GCC Internals（搜“gccint.pdf”，或者见[1]）里已经讲述得很详细了，但是如果你只看了gccint就来看代码，还是觉得一头雾水，无法下手，因为你很难把gccint所讲的概念同gcc代码里真实的数据结构联系起来。那么这也是我把我这半年的分析经理写下来的原因，大家可以参照gccint来看]]></description><category></category></item><item><title><![CDATA[GCC源码分析（一）——介绍与安装]]></title><link>https://blog.csdn.net/sonicling/article/details/6702031</link><guid>https://blog.csdn.net/sonicling/article/details/6702031</guid><author>sonicling</author><pubDate>Fri, 19 Aug 2011 17:51:15 +0800</pubDate><description><![CDATA[上半年一直在做有关GCC和LD的项目，到现在还没做完。最近几天编程的那台电脑坏了，所以趁此间隙写一点相关的分析和经验之类的跟大家共享。
一、GCC的作用和运行机制
    GCC是Linux下重要的编译工具，用法这里就不说了，满大街都找得到。这里我重点介绍GCC的运作机制，作为代码分析的铺垫。全篇使用C语言子部件来作分析，因为我对其他语言的编译没有研究。
    根据编译原理，语言的编译分为]]></description><category></category></item><item><title><![CDATA[又一种设计思路]]></title><link>https://blog.csdn.net/sonicling/article/details/6460478</link><guid>https://blog.csdn.net/sonicling/article/details/6460478</guid><author>sonicling</author><pubDate>Thu, 02 Jun 2011 00:55:00 +0800</pubDate><description><![CDATA[随便浏览中观摩了《联想利泰的一道做出来就给月薪7K的面试题--交通灯管理系统》一文，该文设计实现了一个交通灯管理系统，模拟了道路、灯和控制器三个对象的行为。这种设计在思路上比较直观，可能大多数面向对象的设计者第一时间都会想到这种设计。虽然这种设计已经很好的满足于需求说明书了，但是]]></description><category></category></item><item><title><![CDATA[Linux块设备加密之dm-crypt分析]]></title><link>https://blog.csdn.net/sonicling/article/details/6275898</link><guid>https://blog.csdn.net/sonicling/article/details/6275898</guid><author>sonicling</author><pubDate>Fri, 25 Mar 2011 01:22:00 +0800</pubDate><description><![CDATA[相关的分析工作一年前就做完了，一直懒得写下来。现在觉得还是写下来，以来怕自己忘记了，二来可以给大家分享一下自己的研究经验。

这篇文章算是《Device Mapper代码分析》的后续篇，因为dm-crypt是基于dm框架的，因此与上一篇一样，也以2.6.33内核代码为基础来讲述代码的分析过程。但是本文侧重点不同在于着重分析一下三个方面：
1、Linux密码管理
2、dm-crypt到与Linux密码的关联
3、dm-crypt的异步处理
一、Linux密码管理

Linux内核中，密码相关的]]></description><category></category></item><item><title><![CDATA[Linux 下不经过BIOS重启（i386）]]></title><link>https://blog.csdn.net/sonicling/article/details/5902182</link><guid>https://blog.csdn.net/sonicling/article/details/5902182</guid><author>sonicling</author><pubDate>Thu, 23 Sep 2010 17:53:00 +0800</pubDate><description><![CDATA[<br />前段时间有个项目，要求在Linux下不经过BIOS重启，i386平台。<br /> <br />一、可行性分析<br /> <br />　　众所周知，BIOS中包含了CPU及其他各种设备的初始化代码，Linux系统运行之后是否能够将各种用到的设备返回到刚被BIOS初始化后的状态是是否可行的关键。<br /> <br />　　从项目的条件来看，外设并不是问题。因为要首先开起来的那个Linux只会用到磁盘系统。而通用的磁盘系统是不存在与启动相关的关键状态的。<br /> <br />　　另外就是核心]]></description><category></category></item><item><title><![CDATA[我的词法分析器]]></title><link>https://blog.csdn.net/sonicling/article/details/5889585</link><guid>https://blog.csdn.net/sonicling/article/details/5889585</guid><author>sonicling</author><pubDate>Thu, 16 Sep 2010 23:30:00 +0800</pubDate><description><![CDATA[<br />例子下载<br /> <br />一、可配置的词法分析器<br /> <br />通用编译器是基于配置的，编译器本身不包含特定语言相关的信息。而语言相关的信息放到配置文件中。因此在整个编译器设计中，不仅仅是编译器要编译的文件需要词法分析，配置信息的读取也需要词法分析。<br /> <br />在可定制的词法分析部件完工之前，所有的词法分析都靠硬编码完成，即像这样：<br />	input_iterator ReadToken(input_iterator begin, input_iterato]]></description><category></category></item><item><title><![CDATA[Device Mapper 代码分析]]></title><link>https://blog.csdn.net/sonicling/article/details/5460311</link><guid>https://blog.csdn.net/sonicling/article/details/5460311</guid><author>sonicling</author><pubDate>Thu, 08 Apr 2010 00:13:00 +0800</pubDate><description><![CDATA[Device Mapper（DM）是Linux 2.6全面引入的块设备新构架，通过DM可以灵活地管理系统中所有的真实或虚拟的块设备。DM以块设备的形式注册到Linux内核中，凡是挂载（或者说“映射”）于DM结构下的块设备，不管他们是如何组织，如何通讯，在Linux看来都是一个完整的DM块设备。因此DM让不同组织形式的块设备或者块设备集群在Linux内核面前有一个完整统一的DM表示。一、DM]]></description><category></category></item><item><title><![CDATA[IIS7下的Web应用程序以“Windows集成安全性”方式连接到远程SQL Server]]></title><link>https://blog.csdn.net/sonicling/article/details/4532406</link><guid>https://blog.csdn.net/sonicling/article/details/4532406</guid><author>sonicling</author><pubDate>Tue, 08 Sep 2009 16:36:00 +0800</pubDate><description><![CDATA[Vista最令人郁闷的地方是空间太大，所有软件都安装在其他盘，可是我25G的C盘也被蚕食一空。安装SQL Server 2005需要占用C盘800M-1G的空间，实在让人不忍心再去腾挪我那可怜的C盘了。 于是我便将肥大的SQL Server 2005安装到虚拟机上了，这样不会占用我那可怜巴巴2G左右的C盘剩余空间。 SQL Server 2005推荐使用“Windows集成身份验证]]></description><category></category></item><item><title><![CDATA[FTP测试工具]]></title><link>https://blog.csdn.net/sonicling/article/details/4526398</link><guid>https://blog.csdn.net/sonicling/article/details/4526398</guid><author>sonicling</author><pubDate>Mon, 07 Sep 2009 09:19:00 +0800</pubDate><description><![CDATA[下载地址 最近写了个FTP测试工具，可以对FTP服务器甚至其他行文本协议的服务器，例如HTTP、SMTP等，进行测试。 原本只是写一个具有简单收发功能的小程序，但是FTP里面端口号的计算很烦，因此该程序可以自动生成PORT命令，和自动分析PASV回复，并自动连接到被动端口上。  本程序是用C++ Builder 2009制作的。已经不记得何时，原先的事件驱动]]></description><category></category></item><item><title><![CDATA[辞职]]></title><link>https://blog.csdn.net/sonicling/article/details/4253160</link><guid>https://blog.csdn.net/sonicling/article/details/4253160</guid><author>sonicling</author><pubDate>Mon, 08 Jun 2009 23:46:00 +0800</pubDate><description><![CDATA[6月5日，也就是上星期五提交了辞呈。过了个周末。6月8日星期一上午项目经理问我：“手头上有没提交的代码吗？”我说：“都提交了。”中午技术总监过来问我：“希望什么时候离职？”我听项目经理说公司一般都是对辞职人员从速办理辞职的。所以就说：“随便，什么时候都可以。”技术总监说：“好，待会儿财务的会过来跟你办手续。”过了一会儿，果然财务的来了，在辞职表上签了字，工作证被收走了。再过了一会儿，一]]></description><category></category></item><item><title><![CDATA[脚本解释器构架（三）]]></title><link>https://blog.csdn.net/sonicling/article/details/4234316</link><guid>https://blog.csdn.net/sonicling/article/details/4234316</guid><author>sonicling</author><pubDate>Mon, 01 Jun 2009 22:25:00 +0800</pubDate><description><![CDATA[运行时环境脚本的运行时环境（Run-Time Environment, RTE）是解释器的核心。运行时环境与语法分析器可以相互独立，但是又有联系。脚本的解释方式主要有两种：1、基于伪指令的解释；2、基于语法树的解释。我的脚本解释器采用第二种解释方式。 基于伪指令的解释由于我的脚本解释器不是采用这种解释方式，因此先介绍这种方式，然后详细介绍我的脚本解释器的基于语法树的解释方式]]></description><category></category></item><item><title><![CDATA[脚本解释器构架（二）]]></title><link>https://blog.csdn.net/sonicling/article/details/4216844</link><guid>https://blog.csdn.net/sonicling/article/details/4216844</guid><author>sonicling</author><pubDate>Tue, 26 May 2009 12:04:00 +0800</pubDate><description><![CDATA[脚本语言的特点脚本语言最直观的特点是文法简单，部署方便。大多数的脚本语言都有如下更细致的特点：1. 对象化2. 变量按名编排3. 引用传递对象化脚本的值都是对象，只有这样才可以支持弱类型。同样一个变量可以赋字符串值，也可以赋数值，或者其他的某些值，当访问的时候，还能将这些值还原为原本的样子，这种表象正好和面向对象的多态是一致的。当然，可以用非面向对象的方法来]]></description><category></category></item><item><title><![CDATA[脚本解释器构架（一）]]></title><link>https://blog.csdn.net/sonicling/article/details/4216460</link><guid>https://blog.csdn.net/sonicling/article/details/4216460</guid><author>sonicling</author><pubDate>Tue, 26 May 2009 10:45:00 +0800</pubDate><description><![CDATA[解释器和编译器的前端是相似的。编译器包括前端（词法分析、语法分析、语义分析）和后端（优化、中间语言、指令生成）。解释器的前端不需要语义分析，仅靠语法分析构建一个语法树即可。后端就是解释运行环境。词法分析太简单了。这里从语法分析讲起。脚本的语法分析绝大多数脚本的语法非常简单，任何一种自顶向下的分析法基本都可以胜任。LL(1)是个不错的选择——简单、高效。LL1的要求很严格：1、不]]></description><category></category></item><item><title><![CDATA[LR 语法分析器]]></title><link>https://blog.csdn.net/SonicLing/article/details/4061026</link><guid>https://blog.csdn.net/SonicLing/article/details/4061026</guid><author>SonicLing</author><pubDate>Fri, 10 Apr 2009 00:06:00 +0800</pubDate><description><![CDATA[下载地址 LR语法分析器算是基本完成了，只需要一个文法定义文件（.syntax），就可以进行对应语言的语法分析，最后形成语法树。词法分析是固定的，采用C++的词法定义。以后将加入动态的词法分析。压缩包中文件的描述：LRTable.exe 是用文法定义文件（syntax文件）生成LR动作表文件（action文件），使用方法在 1_build_actio]]></description><category></category></item><item><title><![CDATA[对C的新感觉]]></title><link>https://blog.csdn.net/SonicLing/article/details/2682080</link><guid>https://blog.csdn.net/SonicLing/article/details/2682080</guid><author>SonicLing</author><pubDate>Mon, 21 Jul 2008 02:11:00 +0800</pubDate><description><![CDATA[加入公司两周了，进公司的第一个工作是为公司调试一个叫做libevent的库。以前总是用C++，很少用C。这回第一个任务就是要去改一个C写的库，起初感觉很不适应。

   以前用C++写程序，感觉就像在吃剥了皮，抽了芯的莲子。虽然之前剥皮和抽芯的过程很麻烦，但是之后吃起来就很顺畅。用C++做项目的关键是划分对象。对象的划分决定了对象之间的关系；决定了信号在对象之间流动的流程；决定了程序的健壮性；]]></description><category></category></item><item><title><![CDATA[我的脚本解释器]]></title><link>https://blog.csdn.net/SonicLing/article/details/2070026</link><guid>https://blog.csdn.net/SonicLing/article/details/2070026</guid><author>SonicLing</author><pubDate>Mon, 28 Jan 2008 15:34:00 +0800</pubDate><description><![CDATA[下载地址 2009/7/6 更新信息 修复一个很傻瓜的bug：字符串中没有对转义字符“/”进行处理，结果像 "/"" 这样的字符串常量表达式分析出错。已修复。  2008/5/6 更新信息添加文件访问功能。使用File对象可实现对文本文件的读写。File对象有如下成员：File() 构造函数File(file)  构造并打开文件]]></description><category></category></item><item><title><![CDATA[C++编译器的预编译组件完工]]></title><link>https://blog.csdn.net/SonicLing/article/details/1435813</link><guid>https://blog.csdn.net/SonicLing/article/details/1435813</guid><author>SonicLing</author><pubDate>Sat, 09 Dec 2006 03:47:00 +0800</pubDate><description><![CDATA[预编译组件完工的一点归纳总结         刚刚完成了C++编译器预编译组件。只能说大致完成了，有一点还没有达到C++标准所要求的，那就是条件预编译，也即#if directive的comparing expression。根据C++文档，#if 后面应该是一个整型，或者可以看作整型的表达式，我的理解是除了整数外只有bool类型才能看作整型。因此#if后面可以跟数字、比较、defined]]></description><category></category></item></channel></rss>