使用Flex Bison 和LLVM编写自己的编译器

使用Flex Bison 和LLVM编写自己的编译器

使用Flex Bison 和 LLVM编写你自己的编译器
原文出处:http://gnuu.org/2009/09/18/writing-your-own-toy-compiler

1、介绍

我总是对编译器和语言非常感兴趣,但是兴趣并不会让你走的更远。大量的编译器的设计概念可以搞的任何一个程序员迷失在这些概念之中。不用说,我也曾今尝试过,但是并没有取得太大的成功,我以前的尝试都停留在语义分析阶段。本文的灵感主要来源于我最近一次的尝试,并且在这一次中我取得一点成就。

幸运的是,最近的几年,我参加了一些项目,这些项目给了我在建立编译器上很多有用的经验和观点。另外一件事是,我非常幸运得到LLVM的帮助。对于这个工具,我不知道改怎么去形容它,但是他给我的这个编译器的确带来非常大的帮助。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (22 人打了分,平均分: 4.68 )
Loading...
用脚本实现哄小孩睡觉

用脚本实现哄小孩睡觉

baby_linux当然,不并需要一个天才式的人才能做到这个事,其实这个事情很简单。让我来一点一点向你解释。下面是一些准备工作。

  • 首先,你得找一台PC机,得配上光驱,光驱可以破一点。
  • 然后,你得给这台PC机上装上Linux,不需要太多的东西,最基本的就行了。
  • 然后,你得写下下面的代码。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (22 人打了分,平均分: 4.50 )
Loading...
到处都是Unix的胎记

到处都是Unix的胎记

一说起Unix编程,不必多说,最著名的系统调用就是fork,pipe,exec,kill或是socket了(fork(2), execve(2), pipe(2), socketpair(2), select(2), kill(2), sigaction(2))这些系统调用都像是Unix编程的胎记或签名一样,表明着它来自于Unix。

下面这篇文章,将向大家展示Unix下最经典的socket的编程例子——使用fork + socket来创建一个TCP/IP的服务程序。这个编程模式很简单,首先是创建Socket,然后把其绑定在某个IP和Port上上侦听连接,接下来的一般做法是使用一个fork创建一个client服务进程再加上一个死循环用于处理和client的交互。这个模式是Unix下最经典的Socket编程例子。

下面,让我们看看用C,Ruby,Python,Perl,PHP和Haskell来实现这一例子,你会发现这些例子中的Unix的胎记。如果你想知道这些例子中的技术细节,那么,向你推荐两本经典书——《Unix高级环境编程》和《Unix网络编程》。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (9 人打了分,平均分: 4.11 )
Loading...
图片搜索引擎优化Checklist

图片搜索引擎优化Checklist

今天,专业的搜索引擎优化SEO(Search Engine Optimizers)会让你的网页或文章能更多得被搜索并访问到。而图片的搜索优化则是这项技术中非常特别的一部分,它可以让你的图片更容易地被人搜索到,比如:艺术图片,服务设计,或是家具等等。相信大家都知道图片远比文字更有吸引力,这是因为我们都知道——“一图胜千言”。

Image SEO

在搜索引擎的世界里,有一组有限的因素决定着图片的位置。下面是一个Checklist可以让你把你的图片搜索优化做得更好。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (4 人打了分,平均分: 2.75 )
Loading...
GDB 7.0 发布

GDB 7.0 发布

2009年10月06日,GDB7.0正式发布,新的版本你可以在这里下载。本次版本,不但有大家所关注的《GDB回溯调试技术》,同样还有其它大量的新特性,和对新平台的支持。

新版的GDB7.0支持如下新的平台或配置:

  • x86/x86_64 Darwin
  • x86_64 MinGW
  • Lattice Mico32
  • x86/x86_64 DICOS
  • S+core 3
  • The remote stub now supports x86 Windows CE

其主要的新加入的功能有:(看上去相当地高科技啊,很多术语都不知道怎么翻译,请注意后面的相关解释)

  • Python 脚本调试
  • 回溯调试,调式过程记录并重演。
  • 不间隔调试。 Non-stop debugging
  • 并行调试。 Multi-architecture debugging
  • 多进程调试。Multi-inferior, multi-process debugging

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (6 人打了分,平均分: 3.50 )
Loading...
mochiweb参数化模型Req相关功能

mochiweb参数化模型Req相关功能

本文的笔记讲述如何从client请求中获取各种参数,如method, request path, headers, cookie等。

Mochiweb是Erlang实现的一个开源Web服务器,它设计的一个亮点就是他本身的Http请求的参数化模型。因此我们可以用OO的方式来理解它的相关用法。
它的实现在mochiweb_request模块.在mochiweb中,每个client请求其构造一个 Req 对象(注:这个“对象“只是便于理解的提法), Req 可以理解成 mochiweb_request 的一个参数化或实例化.

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (6 人打了分,平均分: 3.83 )
Loading...
高科技:GDB回溯调试

高科技:GDB回溯调试

也许大家知道,GDB 版本7.0 (2009年9月release) 会是第一次开始支持Reversable Debugging (回溯调式技术),这是一种可以让在debug程序时当我们运行单步调试或是运行到断点时,可以以逆向执行程序的一种技术。(这是GNU的新闻链接

下面是GDB7.0版本所支持的回溯调试的命令,其中包括,continue,step,以及调试方向的设置。

  • reverse-continue (‘rc’) — 继续程序运行到断点,但是是逆向运行程序。
  • reverse-finish — 逆向运行程序直到跳出本层函数。
  • reverse-next (‘rn’) — 语句单步向后跟踪程序。
  • reverse-nexti (‘rni’) — 指令单步向后一条指令。
  • reverse-step (‘rs’) — 向后执行一条语句,单步进入。
  • reverse-stepi — 向后执行一条指令,单步进入。
  • set exec-direction (forward/reverse) — 设置程序执行方向,向前或向后。
  • 阅读全文 Read More

    好烂啊有点差凑合看看还不错很精彩 (9 人打了分,平均分: 4.22 )
    Loading...
    算法和数据结构词典

    算法和数据结构词典

    我们知道,在编程的世界里,主要就是两个事,用一定的算法去处理一定的数据。算法可以理解为业务逻辑流程,而数据自然一定是按某种结构来存放,这就是数据结构。我们知道,数据结构的修改一定会导致算法的修改,我们也知道,数据结构直接关系到了整个程序的繁简性,高效性。而算法则是关系到数据处理的时间、空间性能,以及日后的扩展和维护。这两个东西是计算机科班出生的人或是需要学习编程的人必需要注意的两件头等大事。

    下面这个网站,由 Software and Systems Division, Information Technology Laboratory 创建。

    http://xlinux.nist.gov/dads/

    阅读全文 Read More

    好烂啊有点差凑合看看还不错很精彩 (12 人打了分,平均分: 5.08 )
    Loading...
    TCP网络关闭的状态变换时序图

    TCP网络关闭的状态变换时序图

    TCP共有11个网路状态,其中涉及到关闭的状态有5个。

    在我们编写网络相关程序的时候,这5个状态经常出现。因为这5个状态相互关联,相互纠缠,而且状态变化触发都是由应用触发,但是又涉及操作系统和网络,所以正确的理解TCP 在关闭时网络状态变化情况,为我们诊断网络中各种问题,快速定位故障有着非常重要的作用和意义。

    下是是根据W.Richard Stevens的《TCP/IP详解》一书的TCP状态转换图。

    阅读全文 Read More

    好烂啊有点差凑合看看还不错很精彩 (9 人打了分,平均分: 3.78 )
    Loading...
    非常简单的Python HTTP服务

    非常简单的Python HTTP服务

    如果你急需一个简单的Web Server,但你又不想去下载并安装那些复杂的HTTP服务程序,比如:Apache,ISS等。那么, Python 可能帮助你。使用Python可以完成一个简单的内建 HTTP 服务器。于是,你可以把你的目录和文件都以HTTP的方式展示出来。佻只需要干一件事情,那就是安装一个Python。

    实际上来说,这是一个可以用来共享文件的非常有用的方式。实现一个微型的HTTP服务程序来说是很简单的事情,在Python下,只需要一个命令行。下面是这个命令行:(假设我们需要共享我们的目录 /home/haoel 而IP地址是192.168.1.1)

    $ cd /home/haoel
    $ python -m SimpleHTTPServer
    

    阅读全文 Read More

    好烂啊有点差凑合看看还不错很精彩 (7 人打了分,平均分: 4.43 )
    Loading...