【flex&bison翻译】前言

时间秒杀一切 提交于 2019-12-20 00:37:59

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

****** 译者注:去年的时候曾经计划翻译本书,后来终于还是抵不过懒惰,给放下了,有句经典的话:现在的努力,是为了小时候吹过的牛逼。现在体会深刻啊。。。本文是在Ubuntu 12.04.1系统下,使用LibreOffice Writer工具一个字一个字码上的,然后再手动调整字体和字号发表的,发布出去的那一刻,感觉真的很好,希望自己能坚持下来,写博客,写技术文章,翻译技术文章和书籍。+U ******

####   当然,有语句不通顺的地方,或者描述不准确的地方,请不吝指出,我会尽快修正。 ####

$$$$   本书翻译时对一些术语采用了以下翻译:lexical词法,syntax句法,grammar语法。是否合适还有待商榷。$$$$

 Flex和bison这两个工具是专为开发编译器(compilers)和解释器(interpreters)的开发人员而设计的。但是flexbison的功能不仅仅如此,只要对程序的输入信息进行匹配查找,或者程序本身是CLI界面的,都可以使用flexbison来进行开发。更进一步来讲,它们(指flexbison这两个工具,下同。)还可以快速构建应用程序原型,并易于修改和维护,因此对于一些非编译器开发人员,flexbison一样是非常有用和强大的工具。为了刺激大家的想象力,对它们有一个整体形象的认识,这里列出了人们使用flexbison(或者是它们的前身lexyacc)开发出来的程序:

1. 桌面计算器bc

2. 数学方程的排版预处理工具eqn,和处理复杂图形的工具pic

3. 用于专用场景下的特定领域编程语言

4. 很多Unix系统上使用的可移植C编译器PCC

5. Flex本身也是使用flexbison工具开发的

6. 一个SQL数据库语言翻译器


本书的讨论范围

第一章,介绍Flex和Bison,整体介绍了怎样使用flexbison工具开发编译器和解释器,以及为什么使用它们,并展示了一些小的应用,比如内嵌在flexbison里面的一个小型计算器。本章还介绍了贯穿全书各章节的一些基本术语。

第二章,使用Flex,详细描述如何使用flex工具。使用flex开发了一些应用程序,包括:字数统计程序、处理多输入和嵌套输入文件程序,和计算C程序中的统计信息等。

第三章,使用bison,给出一个使用flexbison开发全功能桌面计算器的例子,程序包含变量、过程、循环和条件表达式,展示了抽象句法树(abstract syntax trees, ASTs)的使用,和用于解析输入数据信息的强大且易于使用的数据结构。

第四章,解析SQL,开发了关系型数据库语言MySQL的一种方言解析器,用于检查SQL语句的句法,并将其翻译成解析器可识别的内部格式。通过SQL解析器的开发,展示了逆波兰表达式(Reverse Polish Notation, RPN)的使用,这是用于解析输入数据信息的又一种强大的数据格式。

第五章,Flex规范参考,和第六章,Bison规范参考,为使用flexbison工具的开发者提供了详细的帮助信息,包括功能和参数选项。这两章和接下来的两章为有经验的flexbison应用开发者提供了技术参考信息。

第七章,歧义和冲突,解释了bison工具中的歧义和冲突概念,在使用bison创建指定语法的解析器时可能会遇到歧义和冲突,本章还讲述了定位和解决上述问题的方法。

第八章,错误上报与修复,讨论了编译器和解释器设计人员在编译器输入信息中用于定位、识别和上报错误信息的技术。

第九章,高级FlexBison技术,覆盖了可重入扫描器(scanner)和解析器(parser),通用LR分析法(Generalized Left to Right, GLR),用于处理bison解析器不能处理的语法概念;以及C++语言接口。

附录提供了在第四章中讨论的SQL解析器的完整语法和交叉引用。

词汇表列出了对编程语言和编译原理中的技术术语的解释。

进入本书前,我们假设你已经掌握了C语言,这是因为书中的大多数范例都是使用Cflex或者bison开发的,还有一些使用C++语言开发,其余的则是使用SQL语言或者专用语言开发的。


本书的约定

如何获取FlexBison

Flexbison源自经典的词法句法扫描解析工具lexyacc,是它们的现代升级版,lexyacc最早是在20世纪70年代由Bell实验室开发的。这两个经典工具中,yacc最早开发成功,作者是Stephen C. Johnson, lexMike LeskEric Schmidt(正是现在的Google CEO Eric Schmidt译者注:本书写成时,施大爷还在掌管Google)两人合作开发成功的,用于和bison辅助开发。从20世纪70年代的第七版Unix系统发布起,lexyacc成为Unix操作系统上的标准组件。

自由软件基金会的GNU项目开发了bison工具,对yacc工具向前兼容,并逐渐替代yaccBison最早由Robert CorbettRichard Stallman开发,bison手册被认为是用来查阅bison功能的最佳读物,目前所有常见的BSDLinux发行版本中都包含有bison工具,如果你想获取其最新版本,可登录其开发主页下载安装:

http://www.gnu.org/software/bison/

BSDGNU项目还发布了flexFast Lexical Analyzer Generator),“对lex进行了重写,以解决lex工具的大量bug和低效率”。Flex最早是由Jef Poskanzer开发的,后来Vern PaxsonVan Jacobson对其进行了大幅改进,目前常见的BSDLinux发行版本中都包含有flex工具,如果你想获取其最新版本,可登录其开发主页下载安装:

http://flex.sourceforge.net/

本书的范例文件

本书的程序源码可从以下链接在线获取:

ftp://ftp.iecc.com/pub/file/flexbison.zip

可通过任意网页浏览器或者FTP客户端下载。在类Unix系统下,可使用免费软件unzip解压打开zip格式的文件,在Windows XP/Vista/7/8系统下,可使用其他常见解压软件打开(如WinRARWinZip7-zip,好压,百压等)。

本书的所有范例代码均在flex 2.5.35bison 2.4.1下测试通过。(译者注:译者的测试环境:Ubuntu 12.04.1flex 2.5.35bison 2.5

####  码字不易,如果本文荣幸被您转载,还烦请注明出处,谢谢!####

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!