****** 译者注:去年的时候曾经计划翻译本书,后来终于还是抵不过懒惰,给放下了,有句经典的话:现在的努力,是为了小时候吹过的牛逼。现在体会深刻啊。。。本文是在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工具开发的
6. 一个SQL数据库语言翻译器
本书的讨论范围
第一章,介绍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工具,如果你想获取其最新版本,可登录其开发主页下载安装:
http://flex.sourceforge.net/
本书的范例文件
本书的程序源码可从以下链接在线获取:
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)
#### 码字不易,如果本文荣幸被您转载,还烦请注明出处,谢谢!####