自制编译器[试读]
1.1 本书的概要
本章先讲述本书以及编译器的概要,之后说明本书的示例程序C的安装方法。 1.1 本书的概要 本书的主题 本书的主题是编译器。编译器(compiler)是将编程语言的代码转换为其他形式的软件。这种转换操作就称为编译(compile)。 实际的编译器有C 语言的编译器GCC(GNU Compiler Collection)、Java 语言的编译器javac(Sun 公司)等。 像编译器这样复杂的软件,仅仅笼统地介绍一下是很难让人理解的,所以本书将从头开始制作一门语言的编译器。通过实际地设计、制作编译器,使读者对编译器产生具体、深刻的认识。这样通过实践获得的知识,在其他语... 查看全部[ 1.1 本书的概要 ]
1.2 编译过程
这一节将对狭义的编译的内部处理过程进行介绍。 编译的4 个阶段 狭义的编译大致可分为下面4 个阶段。 1. 语法分析 2. 语义分析 3. 生成中间代码 4. 代码生成 下面就依次对这4 个阶段进行说明。 语法分析 一般我们所说的编写程序,就是把代码写成人类可读的文本文件的形式。像C 和Java 这样,以文本形式编写的代码对人类来说的确易于阅读,但并不是易于计算机理解的形式。因此,为了运行C 和Java 的程序,首先要对代码进行解析,将其转换为计算机易于理解的形式。这里的解析(parse)也称为语法分析(syntax analyzing)。... 查看全部[ 1.2 编译过程 ]
1.3 使用C♭编译器进行编译
本节我们来了解一下C♭ 编译器的使用方法。 C♭编译器的必要环境 使用C♭ 编译器所需要的软件有如下3 项。 1. Linux 2. JRE(Java Runtime Environment)1.5 以上版本 3. Java 编译器(非必需) 首先,要想运行C♭ 编译器build 的程序,需要运行在Intel CPU(包括AMD 等的同架构CPU)上的Linux。这里对Linux 的发行版本没有特别的要求,大家可以选择喜欢的Linux 发行版本来安装。本书不对Linux 的安装方法进行说明。 另外,虽然这里以在32 位版本的Linux 上运行为前提,但... 查看全部[ 1.3 使用C♭编译器进行编译 ]
2.1 CЬ语言的概要
本章将对本书制作的编译器及其实现的概要进行说明。 2.1 CЬ语言的概要 本书制作的编译器可将C Ь 这种语言编译为机器语言。本节首先对C Ь 语言的概要进行简单的说明。 C Ь的Hello, World ! C Ь 是C 语言的简化版,省略了C 语言中琐碎的部分以及难以实现、容易混淆的功能,实现起来条理更加清晰。虽然如此,C Ь 仍保留了包括指针等在内的C 语言的重要部分。因此,理解了C Ь 的编译过程,也就相当于理解了C 程序的编译过程。 让我们再来看一下用C Ь 语言编写的Hello,World! 程序,如代码清单2.1 所示。 代码清单2.1 用C ... 查看全部[ 2.1 CЬ语言的概要 ]
2.2 C Ь编译器cbc 的构成
阅读有一定数量的代码时,首先要做的就是把握代码目录以及文件的构成。这一节将对本书制作的C Ь 编译器cbc 的代码构成进行说明。 cbc 的代码树 cbc 采用Java 标准的目录结构,即将作者的域名倒序,将倒序后的域名作为包(package)名的前缀,按层次排列。比如,笔者的个人主页的域名是loveruby.net,则包名以net.loveruby 开头,接着是程序的名称cflat,其下面排列着cbc 所用的包。代码的目录结构如图2.1 所示。 图2.1 cbc 中包的层次 从asm 到utils 的11 个目录,各自对应着同名的包。也就是说,cbc 有11 个包,所... 查看全部[ 2.2 C Ь编译器cbc 的构成 ]