****** 译者注:去年的时候曾经计划翻译本书,后来终于仍是抵不过懒惰,给放下了,有句经典的话:如今的努力,是为了小时候吹过的牛逼。如今体会深入啊。。。本文是在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)
#### 码字不易,若是本文荣幸被您转载,还烦请注明出处,谢谢!####