1.6 环境搭建
1.6.1 搭建开发环境
本书的开发语言是C语言,辅助工具是yacc和lex。
UNIX(包含Linux等)大部分都已经预装了开发所需的yacc和lex,当然也有例外,而Windows则默认没有预装。不过无需担心这些,我们完全可以全部使用自由软件来搭建一个可用的开发环境。
那么,下面我们就开始介绍这些软件的获取途径。
1. C编译器
免费的C编译器可以使用GNU项目提供的GCC(GNU Compiler Collec-tion)。
Linux等免费的UNIX环境下大多都预装了GCC。Windows下可以使用MinGW(Minimalist GNU for Windows)。
可以从下面的URL下载。
http://www.mingw.org/download.shtml
安装MinGW时,UNIX环境下的程序会将构建(build)时使用到的make工具也一并安装。不过,安装完毕后可执行文件名有点奇怪,是mingw32-make. exe,我将其复制并重命名为gmake.exe以方便使用。
2. cygwin或MSYS
cygwin是可以运行在Windows上的类UNIX环境。比如说想在命令行提示符中列出当前文件夹内的文件时,Windows(DOS)会使用DIR指令,UNIX则使用ls指令。一般用惯了UNIX的人,往往会在Windows的命令行提示符中不自觉地敲出ls却尴尬地发现指令不存在,而安装了cygwin就可以避免这样的情况发生。那么对于不经常使用UNIX的人还有必要装cygwin吗?因为在后文中提到的bison要使用UNIX中的m4工具,所以无论是cygwin还是MSYS,至少还是要安装其中一个的。MSYS与cygwin都是在Windows上模拟UNIX环境的软件。
cygwin可以从下面的网址中获取:
http://cygwin.com/
MSYS可从MinGW页面中下载:
http://www.mingw.org/download.shtml
此外,因为cygwin也包含GCC,可以没有MinGW而通过cygwin安装GCC。但是使用cygwin安装的GCC编译,运行时需要依赖cygwin1.dll文件,在其他机器运行还需要把DLL也复制过去,所以还是使用MinGW更方便。
3. bison
如果环境无法直接运行yacc,可以使用GNU项目提供的bison。
http://gnuwin32.sourceforge.net/packages/bison.htm
4. flex
同理,如果环境无法直接运行lex,可以使用lex的免费版flex。
http://gnuwin32.sourceforge.net/packages/flex.htm
补充知识 关于bison与flex的安装
bison由GNU项目提供。GNU项目是由理查德·斯托曼(Richard Matthew Stallman)创立的项目,目标在于建立一个完全相容于UNIX的自由软件环境。
GNU项目提供的软件的许可证为GPL(通用公共许可协议,General Public License)。粗略地说,GPL是这样一种许可证:
● 发行GPL的程序时,必须公开源代码并且声明源代码的出处;
● 包含GPL源代码的程序,必须受GPL许可证条款约束;
● 程序即使以动态链接方式使用GPL程序,也必须受GPL许可证条款约束。不过这个限制在LGPL许可证(Lesser GPL)中有所放宽。
也就是说,你的程序中只要用到GPL的程序,哪怕这部分再小,你的程序也会自动变成GPL程序,必须与源代码同时公开。这对于那些为了防止盗版而不得不采取一些措施的商用软件来说简直是致命的。因此也有人戏称GPL的这个特性是“GPL传染”或“GPL病毒”。
那么bison是否也是如此呢?后文会有说明,bison的作用是将用户编写的配置文件输出为C语言格式的代码。这里的C代码中会包含一些属于bison的代码。那么是不是说使用bison去制作编程语言,所做出的编程语言在发行上也必须遵守GPL许可证呢?关于bison输出的C代码这一点,是GPL的一个特例,可以不受GPL许可证约束。此处在GNU项目有关GPL的FAQ页面中有如下的记载:
碰巧的是,Bison也可以用于开发非自由软件。这是因为我们明确允许在Bison的输出结果中包含的Bison的标准解析程序可以不受限制。我们做此决定,是因为已经存在与Bison类似的工具被用于非自由软件的开发。
http://www.gnu.org/licenses/gpl-faq.ja.html
另一方面,flex则是遵循BSD许可证(Berkeley Software Distribution,加州大学伯克利分校开发的软件套件集合)的(不是修订版BSD)。BSD许可证的程序再次发行时,文档中必须要附加BSD的版权信息。
flex会像bison一样输出C代码,这里的C代码也像bison一样,会包含一些属于flex的代码。但是这部分代码并不需要附加BSD的版权信息。因为flex-2.5.34携带的COPYING文件中有这样的描述:
Note that the “flex.skl” scanner skeleton carries no copyright notice. You are free to do whatever you please with scanners generated using flex; for them, you are not even bound by the above copyright.
1.6.2 本书涉及的源代码以及编译器
本书所涉及的源代码,可以在作者的网站上下载:
http://avnpc.com/pages/devlang#download
在开始撰写本书之前,crowbar和Diksam就已经存在一些公开的版本了,本书所用到的代码都对其进行了重新的整理和修正,因此本书相关的代码将重新以book_ver作为版本号。比如本书最开始制作的crowbar的版本号就是crowbar book_ver.0.1。