ANTLR 4权威指南[图书]
它被广泛应用于学术领域和工业生产实践,是众多语言、工具和框架的基石。
基本信息
- 原书名:The Definitive ANTLR 4 Reference
- 作者: (美)特恩斯·帕尔(Terence Parr)
- 译者: 张博
- 丛书名: 华章程序员书库
- 出版社:机械工业出版社
- ISBN:9787111566489
- 上架时间:2017-5-23
- 出版日期:2017 年5月
- 开本:16开
- 版次:1-1
- 所属分类:计算机 > 计算机科学理论与基础知识 > 计算理论 > 算法

内容简介
计算机书籍
Terence Parr: The Definitive ANTLR 4 Reference (ISBN 9781934356999).Copyright ?2012 The Pragmatic Programmers, LLC.Simplified Chinese translation copyright ?2017 by China Machine Press.No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or any information storage and retrieval system, without permission, in writing, from the publisher.All rights reserved.本书中文简体字版由The Pragmatic Programmers, LLC授权机械工业出版社在全球出版发行。未经出版者书面许可,不得以任何方式抄袭、复制或节录本书中的任何部分。
目录
前言
致谢
第一部分 ANTLR和计算机语言简介
第1章 初识ANTLR 3
1.1 安装ANTLR 3
1.2 运行ANTLR并测试识别程序 5
第2章 纵观全局 9
2.1 从ANTLR元语言开始 9
2.2 实现一个语法分析器 11
2.3 你再也不能往核反应堆多加水了 13
2.4 使用语法分析树来构建语言类应用程序 15
2.5 语法分析树监听器和访问器 17
第3章 入门的ANTLR项目 20
3.1 ANTLR工具、运行库以及自动生成的代码 21
3.2 测试生成的语法分析器 23
3.3 将生成的语法分析器与Java程序集成 25
3.4 构建一个语言类应用程序 26
第4章 快速指南 29
4.1 匹配算术表达式的语言 30
译者序
幸运的是,ANTLR的出现使这个过程变得易如反掌。ANTLR能够根据用户定义的语法文件自动生成词法分析器和语法分析器,并将输入文本处理为(可视化的)语法分析树。这一切都是自动进行的,所需的仅仅是一份描述该语言的语法文件。
一年前,我在为淘宝的一个内部数据分析系统设计DSL时,第一次接触到了ANTLR。使用ANTLR之后,我在一天之内就完成了整个编译器前端的开发工作,从而能够迅速开始处理真正的业务逻辑。从那时起,我就被它强大的功能所深深吸引。简而言之,ANTLR能够解决别的工具无法解决的问题。
软件改变了世界。数十年来,信息化的浪潮在全球颠覆着一个又一个的行业。然而,整个世界的信息化程度还远未达到合理的高度,还有大量传统行业的生产力可以被信息化所解放。在这种看似矛盾的情形背后存在着一条鸿沟:大量从事传统行业的人员拥有在本行业中无与伦比的业务知识和经验,却苦于跟不上现代软件发展的脚步。解决这个问题的根本方法就是DSL(Domain Specific Language),让传统行业的人员能够用严谨的方式与计算机对话。其实,本质上任何编程语言都是一种DSL,殊途同归。
而实现DSL的主要困难就在编译器前端。编译器被称为软件工程皇冠上的明珠。一直以来,对于普通的开发者而言,编译器的设计与实现都如同诗中描述的那样:“白云在青天,可望不可即。”
ANTLR改变了这一切。ANTLR自动生成的编译器前端高效、准确,能够将开发者从繁杂的编译理论中解放出来,集中精力处理自己的业务逻辑。ANTLR 4引入的自动语法分析树创建与遍历机制,极大地提高了语言识别程序的开发效率。
时至今日,ANTLR仍然是Java世界中实现编译器的不二之选,同时,它对其他编程语言也提供了不同程度的支持。在开始学习ANTLR时,我发现国内有关ANTLR的资料较为贫乏,这催生了我翻译本书的念头。我期望通过本书的翻译,让更多的开发者能够更加自如地解决职业生涯中碰到的难题。
本书没有冗长的理论,而是从一些具体的需求出发,由浅入深地介绍了语言的背景知识、ANTLR语法的设计方法以及基于ANTLR 4实现语言识别程序的详细步骤。它尤其适用于对语言识别程序的开发感兴趣的开发者。不过,假如你现在没有这样的需求,我仍然建议你阅读本书,因为它能够开拓你的眼界,让你深入实现层面加深对编程语言的理解。
感谢原作者Terence Parr教授向这个世界贡献了如此优秀的软件。您编写的ANTLR极大地提高了开发效率,这实际上等于延长了广大开发者的生命。
感谢孙岚和石寒舟两位前辈对本书审校付出的心血,您二位的宝贵建议令我受益匪浅。
感谢华章公司的和静编辑对本书的翻译提供的支持与帮助。
感谢我的妻子张洁珊女士,你的理解和陪伴保障了翻译过程如期完成。
感谢每一位读者,你的潜心研习与融会贯通将会令本书更有价值。
截止本书译完的2016年12月,ANTLR已经演进到了4.6。在这个过程中,一些Breaking Change出现了,本书中的部分示例代码已经不再有效。因此,我尽自己所能,结合勘误表,使用最新版的ANTLR对它们进行了逐个验证。对于失效的代码,我通过译注的方式予以修正。由于译者水平有限,书中出现错误与不妥之处在所难免,恳请读者批评指正。
张博
2017年1月
前言
除了这些鼎鼎大名的项目之外,还可以利用ANTLR构建各种各样的实用工具,如配置文件读取器、遗留代码转换器、维基文本渲染器,以及JSON解析器。我编写了一些工具,用于创建数据库的对象-关系映射、描述三维可视化以及在Java源代码中插入性能监控代码。我甚至为一次演讲编写了一个简单的DNA模式匹配程序。
一门语言的正式描述称为语法(grammar),ANTLR能够为该语言生成一个语法分析器,并自动建立语法分析树——一种描述语法与输入文本匹配关系的数据结构。ANTLR也能够自动生成树的遍历器,这样你就可以访问树中的节点,执行自定义的业务逻辑代码。
本书既是ANTLR 4的参考手册,也是解决语言识别问题的指南。你会学到如下知识:
识别语言样例和参考手册中的语法模式,从而编写自定义的语法。
循序渐进地为从简单的JSON到复杂的R语言编写语法。同时还能学会解决XML和Python中棘手的识别问题。
基于语法,通过遍历自动生成的语法分析树,实现自己的语言类应用程序。
在特定的应用领域中,自定义识别过程的错误处理机制和错误报告机制。
通过在语法中嵌入Java动作(action),对语法分析过程进行完全的掌控。
本书并非教科书,所有的讨论都是基于实例的,旨在令你巩固所学的知识,并提供语言类应用程序的基本范例。
本书的读者对象
本书尤其适用于对数据读取器、语言解释器和翻译器感兴趣的开发者。虽然本书主要利用ANTLR来完成这些工作,你仍然可以学到很多有关词法分析器和语法分析器的知识。初学者和专家都需要本书来高效地使用ANTLR 4。如果希望学习第三部分中的高级特性,你需要先了解之前章节中的ANTLR基础知识。此外,读者还需要具备一定的Java功底。
Honey Badger版本
ANTLR 4的版本代号是“Honey Badger”,这个名字来源于一段著名的YouTube短片The Crazy Nastyass Honey Badger(网址为:http://www.youtube.com/watch?v=4r7wHMg5Yjg)中
的勇敢无畏的主角——一只蜜獾。它敢吃你给它的任何东西,根本不在乎那是什么!
ANTLR 4有哪些神奇之处
ANTLR 4引入了一些新功能,降低了入门门槛,使得语法和语言类应用程序的开发更加容易。最重要的新特性在于,ANTLR 4几乎能够处理任何语法(除了间接左递归,稍后会提到)。在ANTLR将你的语法转换成可执行的、人类可读的语法分析代码的过程中,语法冲突或者歧义性警告不会再出现。
无论多复杂的语法,只要你提供给ANTLR自动生成的语法分析器的输入是合法的,该语法分析器就能够自动识别之。当然,你需要自行保证该语法能够准确地描述目标语言。
ANTLR语法分析器使用了一种名为自适应LL(*)或者ALL(*)(读作“all star”)的新技术,它是由我和Sam Harwell一起开发的。ALL(*)是ANTLR 3中的LL(*)的扩展,在实际生成的语法分析器执行前,它能够在运行时以动态方式对语法执行分析,而非先前的静态方式。由于ALL(*)语法分析器能够访问实际的输入文本,通过反复分析语法的方式,它最终能够决定如何识别输入文本。相比之下,静态分析必须考虑所有可行的(无限长的)输入序列。
在实践中,拥有ALL(*)意味着你无须像在其他语法分析器生成工具(包括ANTLR 3)中那样,扭曲语法以适应底层的语法分析策略。如果你曾经为ANTLR 3的歧义性警告和yacc的归约/归约冲突(reduce/reduce conflict)而抓狂,ANTLR 4就是你的不二之选!