- 自制編程語言
- (日)前橋和彌
- 1518字
- 2021-11-24 18:03:48
1.6 環(huán)境搭建
1.6.1 搭建開發(fā)環(huán)境
本書的開發(fā)語言是C語言,輔助工具是yacc和lex。
UNIX(包含Linux等)大部分都已經(jīng)預(yù)裝了開發(fā)所需的yacc和lex,當(dāng)然也有例外,而Windows則默認(rèn)沒有預(yù)裝。不過無需擔(dān)心這些,我們完全可以全部使用自由軟件來搭建一個可用的開發(fā)環(huán)境。
那么,下面我們就開始介紹這些軟件的獲取途徑。
1. C編譯器
免費(fèi)的C編譯器可以使用GNU項目提供的GCC(GNU Compiler Collec-tion)。
Linux等免費(fèi)的UNIX環(huán)境下大多都預(yù)裝了GCC。Windows下可以使用MinGW(Minimalist GNU for Windows)。
可以從下面的URL下載。
http://www.mingw.org/download.shtml
安裝MinGW時,UNIX環(huán)境下的程序會將構(gòu)建(build)時使用到的make工具也一并安裝。不過,安裝完畢后可執(zhí)行文件名有點(diǎn)奇怪,是mingw32-make. exe,我將其復(fù)制并重命名為gmake.exe以方便使用。
2. cygwin或MSYS
cygwin是可以運(yùn)行在Windows上的類UNIX環(huán)境。比如說想在命令行提示符中列出當(dāng)前文件夾內(nèi)的文件時,Windows(DOS)會使用DIR指令,UNIX則使用ls指令。一般用慣了UNIX的人,往往會在Windows的命令行提示符中不自覺地敲出ls卻尷尬地發(fā)現(xiàn)指令不存在,而安裝了cygwin就可以避免這樣的情況發(fā)生。那么對于不經(jīng)常使用UNIX的人還有必要裝cygwin嗎?因為在后文中提到的bison要使用UNIX中的m4工具,所以無論是cygwin還是MSYS,至少還是要安裝其中一個的。MSYS與cygwin都是在Windows上模擬UNIX環(huán)境的軟件。
cygwin可以從下面的網(wǎng)址中獲取:
http://cygwin.com/
MSYS可從MinGW頁面中下載:
http://www.mingw.org/download.shtml
此外,因為cygwin也包含GCC,可以沒有MinGW而通過cygwin安裝GCC。但是使用cygwin安裝的GCC編譯,運(yùn)行時需要依賴cygwin1.dll文件,在其他機(jī)器運(yùn)行還需要把DLL也復(fù)制過去,所以還是使用MinGW更方便。
3. bison
如果環(huán)境無法直接運(yùn)行yacc,可以使用GNU項目提供的bison。
http://gnuwin32.sourceforge.net/packages/bison.htm
4. flex
同理,如果環(huán)境無法直接運(yùn)行l(wèi)ex,可以使用lex的免費(fèi)版flex。
http://gnuwin32.sourceforge.net/packages/flex.htm
補(bǔ)充知識 關(guān)于bison與flex的安裝
bison由GNU項目提供。GNU項目是由理查德·斯托曼(Richard Matthew Stallman)創(chuàng)立的項目,目標(biāo)在于建立一個完全相容于UNIX的自由軟件環(huán)境。
GNU項目提供的軟件的許可證為GPL(通用公共許可協(xié)議,General Public License)。粗略地說,GPL是這樣一種許可證:
● 發(fā)行GPL的程序時,必須公開源代碼并且聲明源代碼的出處;
● 包含GPL源代碼的程序,必須受GPL許可證條款約束;
● 程序即使以動態(tài)鏈接方式使用GPL程序,也必須受GPL許可證條款約束。不過這個限制在LGPL許可證(Lesser GPL)中有所放寬。
也就是說,你的程序中只要用到GPL的程序,哪怕這部分再小,你的程序也會自動變成GPL程序,必須與源代碼同時公開。這對于那些為了防止盜版而不得不采取一些措施的商用軟件來說簡直是致命的。因此也有人戲稱GPL的這個特性是“GPL傳染”或“GPL病毒”。
那么bison是否也是如此呢?后文會有說明,bison的作用是將用戶編寫的配置文件輸出為C語言格式的代碼。這里的C代碼中會包含一些屬于bison的代碼。那么是不是說使用bison去制作編程語言,所做出的編程語言在發(fā)行上也必須遵守GPL許可證呢?關(guān)于bison輸出的C代碼這一點(diǎn),是GPL的一個特例,可以不受GPL許可證約束。此處在GNU項目有關(guān)GPL的FAQ頁面中有如下的記載:
碰巧的是,Bison也可以用于開發(fā)非自由軟件。這是因為我們明確允許在Bison的輸出結(jié)果中包含的Bison的標(biāo)準(zhǔn)解析程序可以不受限制。我們做此決定,是因為已經(jīng)存在與Bison類似的工具被用于非自由軟件的開發(fā)。
http://www.gnu.org/licenses/gpl-faq.ja.html
另一方面,flex則是遵循BSD許可證(Berkeley Software Distribution,加州大學(xué)伯克利分校開發(fā)的軟件套件集合)的(不是修訂版BSD)。BSD許可證的程序再次發(fā)行時,文檔中必須要附加BSD的版權(quán)信息。
flex會像bison一樣輸出C代碼,這里的C代碼也像bison一樣,會包含一些屬于flex的代碼。但是這部分代碼并不需要附加BSD的版權(quán)信息。因為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 本書涉及的源代碼以及編譯器
本書所涉及的源代碼,可以在作者的網(wǎng)站上下載:
http://avnpc.com/pages/devlang#download
在開始撰寫本書之前,crowbar和Diksam就已經(jīng)存在一些公開的版本了,本書所用到的代碼都對其進(jìn)行了重新的整理和修正,因此本書相關(guān)的代碼將重新以book_ver作為版本號。比如本書最開始制作的crowbar的版本號就是crowbar book_ver.0.1。
- FuelPHP Application Development Blueprints
- 零基礎(chǔ)學(xué)Scratch少兒編程:小學(xué)課本中的Scratch創(chuàng)意編程
- Python網(wǎng)絡(luò)爬蟲從入門到實踐(第2版)
- 深入淺出Serverless:技術(shù)原理與應(yīng)用實踐
- Scala編程實戰(zhàn)(原書第2版)
- Learning Concurrency in Kotlin
- 詳解MATLAB圖形繪制技術(shù)
- PrimeFaces Blueprints
- Android應(yīng)用開發(fā)實戰(zhàn)
- Java 從入門到項目實踐(超值版)
- NGUI for Unity
- 零基礎(chǔ)C#學(xué)習(xí)筆記
- HTML5游戲開發(fā)實戰(zhàn)
- HTML5 Game Development by Example:Beginner's Guide(Second Edition)
- JavaScript程序設(shè)計實例教程(第2版)