前言
ANTLR是一款强大的语法分析器生成工具,可用于读取、处理、执行和翻译结构化的文本或二进制文件。它被广泛应用于学术领域和工业生产实践,是众多语言、工具和框架的基石。Twitter搜索使用ANTLR进行语法分析,每天处理超过20亿次查询;Hadoop生态系统中的Hive、Pig、数据仓库和分析系统所使用的语言都用到了ANTLR; Lex Machinal山)将 ANTLR用于分析法律文本;Orade公司在SQL开发者1DE和迁移工具中使用了 ANTLR;NetBeans 公司的IDE使用ANTLR来解析C++;Hibernate对 象-关系映射框架 (ORM)使用ANTLR来处理HQL语言。
除了这些鼎鼎大名的项目之外,还可以利用ANTLR构建各种各样的实用工具,如配置文件读取器、遗留代码转换器、维基文本渲染器,以及JSON解析器。我编写了一些工具,用于创建数据库的对象-关系映射、描述三维可视化以及在Java源代码中插入性能监控代码。
一门语言的正式描述称为语法 (grammar),ANTLR能够为该语[言生成一个语法分析器,并自动建立语法分析树-一种描述语法与输入文本匹配关系的数据结构。ANTLR也能够自动生成树的遍历器,这样你就可以访问树中的节点,执行自定义的业务還辑代码。本书既是ANTLR 4的参考手册,也是解决语言识别问题的指南。
除了上述两项与语法相关的改进,ANTLR 4还使得编写语言类应用程序更加容易。ANTLR生成的语法分析器能够自动建立名为语法分析树 (parse tree)的视图,其他程序可以遍历此树,井在所需处理的结构处触发回调函数。在先前的ANTLR 3中,用户需要补充语法来创建树。除了自动建立树结构之外,ANTLR 4还能自动生成语法分析树遍历器的实现:监听器 (listener) 或者访问器 (visitor)。监听器与在XML文档的解析过程中响应SAX事件的处理器相似。
note: 使用软件设计的访问者模式就可以实现对语法树的访问。
第1章 初识ANTLR
小demo
针对hello parrt
用语法Hello
和规则r
来识别
**每行输出代表了一个词法符号,其中包含了该词法符号的全部信息。**例如,[@1, 6: 10='parrt',<2>,1:6]
表明,这个词法符号位于第二个位置(从0开始计数),由输入文本的第6个到第10个位置之间的字符组成(包含第6个和第10个,同样人0开始计数),;包含的文本内容是parrt;词法符号类型是2 (即1D);位于输入文本的第一行、第6个位置处 (从0开始计数,tab符号被看作一个字符)。