****** 譯者注:去年的時候曾經計劃翻譯本書,後來終於仍是抵不過懶惰,給放下了,有句經典的話:如今的努力,是爲了小時候吹過的牛逼。如今體會深入啊。。。本文是在Ubuntu 12.04.1系統下,使用LibreOffice Writer工具一個字一個字碼上的,而後再手動調整字體和字號發表的,發佈出去的那一刻,感受真的很好,但願本身能堅持下來,寫博客,寫技術文章,翻譯技術文章和書籍。+U ****** 數據庫
#### 固然,有語句不通順的地方,或者描述不許確的地方,請不吝指出,我會盡快修正。 ####編程
$$$$ 本書翻譯時對一些術語採用瞭如下翻譯:lexical詞法,syntax句法,grammar語法。是否合適還有待商榷。$$$$ 瀏覽器
Flex和bison這兩個工具是專爲開發編譯器(compilers)和解釋器(interpreters)的開發人員而設計的。可是flex和bison的功能不只僅如此,只要對程序的輸入信息進行匹配查找,或者程序自己是CLI界面的,均可以使用flex和bison來進行開發。更進一步來說,它們(指flex和bison這兩個工具,下同。)還能夠快速構建應用程序原型,並易於修改和維護,所以對於一些非編譯器開發人員,flex和bison同樣是很是有用和強大的工具。爲了刺激你們的想象力,對它們有一個總體形象的認識,這裏列出了人們使用flex和bison(或者是它們的前身lex和yacc)開發出來的程序:數據結構
1. 桌面計算器bc
編程語言
2. 數學方程的排版預處理工具eqn,和處理複雜圖形的工具pic
工具
3. 用於專用場景下的特定領域編程語言
測試
4. 不少Unix系統上使用的可移植C編譯器PCC
字體
5. Flex自己也是使用flex和bison工具開發的
flex
6. 一個SQL數據庫語言翻譯器spa
本書的討論範圍
第一章,介紹Flex和Bison,總體介紹了怎樣使用flex和bison工具開發編譯器和解釋器,以及爲何使用它們,並展現了一些小的應用,好比內嵌在flex和bison裏面的一個小型計算器。本章還介紹了貫穿全書各章節的一些基本術語。
第二章,使用Flex,詳細描述如何使用flex工具。使用flex開發了一些應用程序,包括:字數統計程序、處理多輸入和嵌套輸入文件程序,和計算C程序中的統計信息等。
第三章,使用bison,給出一個使用flex和bison開發全功能桌面計算器的例子,程序包含變量、過程、循環和條件表達式,展現了抽象句法樹(abstract syntax trees, ASTs)的使用,和用於解析輸入數據信息的強大且易於使用的數據結構。
第四章,解析SQL,開發了關係型數據庫語言MySQL的一種方言解析器,用於檢查SQL語句的句法,並將其翻譯成解析器可識別的內部格式。經過SQL解析器的開發,展現了逆波蘭表達式(Reverse Polish Notation, RPN)的使用,這是用於解析輸入數據信息的又一種強大的數據格式。
第五章,Flex規範參考,和第六章,Bison規範參考,爲使用flex和bison工具的開發者提供了詳細的幫助信息,包括功能和參數選項。這兩章和接下來的兩章爲有經驗的flex和bison應用開發者提供了技術參考信息。
第七章,歧義和衝突,解釋了bison工具中的歧義和衝突概念,在使用bison建立指定語法的解析器時可能會遇到歧義和衝突,本章還講述了定位和解決上述問題的方法。
第八章,錯誤上報與修復,討論了編譯器和解釋器設計人員在編譯器輸入信息中用於定位、識別和上報錯誤信息的技術。
第九章,高級Flex和Bison技術,覆蓋了可重入掃描器(scanner)和解析器(parser),通用LR分析法(Generalized Left to Right, GLR),用於處理bison解析器不能處理的語法概念;以及C++語言接口。
附錄提供了在第四章中討論的SQL解析器的完整語法和交叉引用。
詞彙表列出了對編程語言和編譯原理中的技術術語的解釋。
進入本書前,咱們假設你已經掌握了C語言,這是由於書中的大多數範例都是使用C、flex或者bison開發的,還有一些使用C++語言開發,其他的則是使用SQL語言或者專用語言開發的。
本書的約定
略
如何獲取Flex和Bison
Flex和bison源自經典的詞法句法掃描解析工具lex和yacc,是它們的現代升級版,lex和yacc最先是在20世紀70年代由Bell實驗室開發的。這兩個經典工具中,yacc最先開發成功,做者是Stephen C. Johnson, lex是Mike Lesk和Eric Schmidt(正是如今的Google CEO Eric Schmidt,譯者注:本書寫成時,施大爺還在掌管Google)兩人合做開發成功的,用於和bison輔助開發。從20世紀70年代的第七版Unix系統發佈起,lex和yacc成爲Unix操做系統上的標準組件。
自由軟件基金會的GNU項目開發了bison工具,對yacc工具向前兼容,並逐漸替代yacc。Bison最先由Robert Corbett和Richard Stallman開發,bison手冊被認爲是用來查閱bison功能的最佳讀物,目前全部常見的BSD和Linux發行版本中都包含有bison工具,若是你想獲取其最新版本,可登陸其開發主頁下載安裝:
http://www.gnu.org/software/bison/
BSD和GNU項目還發布了flex(Fast Lexical Analyzer Generator),「對lex進行了重寫,以解決lex工具的大量bug和低效率」。Flex最先是由Jef Poskanzer開發的,後來Vern Paxson和Van Jacobson對其進行了大幅改進,目前常見的BSD和Linux發行版本中都包含有flex工具,若是你想獲取其最新版本,可登陸其開發主頁下載安裝:
本書的範例文件
本書的程序源碼可從如下連接在線獲取:
ftp://ftp.iecc.com/pub/file/flexbison.zip
可經過任意網頁瀏覽器或者FTP客戶端下載。在類Unix系統下,可以使用免費軟件unzip解壓打開zip格式的文件,在Windows XP/Vista/7/8系統下,可以使用其餘常看法壓軟件打開(如WinRAR,WinZip,7-zip,好壓,百壓等)。
本書的全部範例代碼均在flex 2.5.35和bison 2.4.1下測試經過。(譯者注:譯者的測試環境:Ubuntu 12.04.1,flex 2.5.35,bison 2.5)
#### 碼字不易,若是本文榮幸被您轉載,還煩請註明出處,謝謝!####