《ANTLR 4权威指南》由机械工业出版社出版,有兴趣的读者推荐购买阅读。

本专题大多内容来源于我读《ANTLR 4权威指南》的随手笔记以及个人实践,仅供参考学习,请勿用于任何商业用途,后果自负,如涉及侵权或有错误之处,及时 联系本人

官网: https://www.antlr.org/

文档: ANTLR 4 Documentation

GitHub: https://github.com/antlr/antlr4

语法例子: https://github.com/antlr/grammars-v4

另外参考:

序文

ANTLR能够解决别的工具无法解决的问题。

软件改变了世界。数十年来,信息化的浪潮在全球颠覆着一个又一个的行业。然而,整个世界的信息化程度还远未达到合理的高度,还有大量传统行业的生产力可以被信息化所解放。在这种看似矛盾的情形背后存在着一条鸿沟:大量从事传统行业的人员拥有在本行业中无与伦比的业务知识和经验,却苦于跟不上现代软件发展的脚步。解决这个问题的根本方法就是DSL(Domain specific Language),让传统行业的人员能够用严谨的方式与计算机对话。其实,本质上任何编程语言都是一种DSL,殊途同归。

实现DSL的主要困难就在编译器前端。幸运的是,ANTLR的出现使这个过程变得易如反掌。 ANTLR能够根据用户定义的语法文件自动生成词法分析器语法分析器,并将输入文本处理为(可视化的)语法分析树

这一切都是自动进行的, 所需的仅仅是一份描述该语言的语法文件。

ANTLR自动生成的编译器前端高效、准确,能够将开发者从繁杂的编译理论中解放岀来,集中精力处理自己的业务逻辑。 ANTLR4引入的自动语法分析树创建与遍历机制,极大地提高了语言识别程序的开发效率。

本专题适用于对语言识别程序的开发感兴趣的工程师。不过,假如你现在没有这样的需求,仍然建议你阅读,因为它能够开拓你的眼界,加深对编程语言的理解。

应用

ANTLR被广泛用于学术界、工业界:

  • twitter搜索用ANTLR做语法分析
  • Hadoop中的 Hive 是基于ANTLR
  • Netbeas IDEANTLR解析C++
  • HibernateANTLR处理HQL语言
  • Spark SQL 使用ANTLR4SQL语句解析成语法树,进而生成逻辑计划LogicPlan
  • ......

个人可以用ANTLR创建使用工具,例如:

  • 配置文件读取器
  • 遗留代码转换器
  • JSON 解析器
  • ......

ANTLR可根据语法自动创建语法分析器,大大降低了开发语言识别应用的难度。

一些企业内部可能也会使用到ANTLR,我上家公司内部就定义了一套对使用者相对友好的查询语法,用ANTLR4解析这种自定义语法的查询语句,然后再转成Elasticsearch Query DSLOpenTSDB Query等,从而降低了使用其他中间件的复杂度,也更有利于软件产品化。

为什么不花5天时间编程,来使你25年的生活自动化呢?

由于ANTLR能够自动生成语法分析树和树的遍历器,在ANTLR4中,你无须再编写树语法,取而代之的是一些广为人知的设计模式,如访问者模式(Visitor Pattern)等。

这意味着,掌握了ANTLR这个强大的武器,你就可以重回自己熟悉的Java领域来实现真正的语言类应用程序。

主要内容

《ANTLR 4权威指南》由四部分组成:

  • 第一部分介绍了ANTLR,提供了一些与语言相关的背景知识,并展示了ANTLR的一些简单应用。在这一部分中,你会了解ANTLR的句法以及主要用途。

  • 第二部分是一部有关设计语法和使用语法来构建语言类应用程序的“百科全书”

  • 第三部分展示了自定义ANTLR生成的语法分析器的错误处理机制的方法。随后,你会学到在语法中嵌入动作的方法——在某些场景下,这样做比建立树并遍历之更简单,也更有效率。此外,你还将学会使用语义判定(semantic predicate)来修改语法分析器的行为,以便解决一些充满挑战的识别难题,例如识别XMLPython中的上下文相关的换行符。

  • 第四部分是参考章节,详细列出了ANTLR语法元语言的所有规则和ANTLR运行库的用法。

ANTLR 简介的更多相关文章

  1. ANTLR学习(一)ANTLR简介和环境搭建

    一.ANTLR简介和学习动机 1. ANTLR简介 antlr是指可以根据输入自动生成语法树并可视化的显示出来的开源语法分析器.ANTLR-Another Tool for Language Reco ...

  2. antlr安装

    安装java环境,环境变量设置如下: ANTLR 简介 ANTLR—Another Tool for Language Recognition,Antlr 本身是使用 Java 开发的,它为包括Jav ...

  3. [Hive]使用 Antlr 开发领域语言

    Antlr 简介 ANTLR 语言识别的一个工具 (ANother Tool for Language Recognition ) 是一种语言工具,它提供了一个框架,可以通过包含 Java, C++, ...

  4. ANTLR随笔(一)

    学习背景 最近做项目需要开发一个类似Graphql的简单版的自定义查询功能. 功能主要是通过前端自定义的复查询条件来控制后端的查询字段以及最终返回的JSON格式. 最初准备直接使用Graphql实现但 ...

  5. about云资源汇总指引V1.4:包括hadoop,openstack,nosql,虚拟化

    hadoop资料 云端云计算2G基础课程 (Hadoop简介.安装与范例) 炼数成金3G视频分享下载 虚拟机三种网络模式该如何上网指导此为视频 Hadoop传智播客七天hadoop(3800元)视频, ...

  6. 《Language Implementation Patterns》之 构建语法树

    如果要解释执行或转换一段语言,那么就无法在识别语法规则的同时达到目标,只有那些简单的,比如将wiki markup转换成html的功能,可以通过一遍解析来完成,这种应用叫做 syntax-direct ...

  7. atitit.词法分析的实现token attilax总结

    atitit.词法分析的实现token attilax总结 1. 词法分析(英语:lexical analysis)跟token 1 1.1. 扫描器 2 2. 单词流必须识别为保留字,标识符(变量) ...

  8. 用Java写编译器(1)- 词法和语法分析

    词法和语法分析器构建 ANTLR简介 ANTLR全称ANother Tool for Languate Recognition,是基于LL(*)算法实现的语法分析器生成器和词法分析器生成器,由旧金山大 ...

  9. CSharp使用ANTLR4生成简单计算Parser

    ANTLR简介 ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, pr ...

随机推荐

  1. 问题 D: 某种序列

    题目描述 数列A满足An = An-1 + An-2 + An-3, n >= 3  编写程序,给定A0, A1 和 A2, 计算A99 输入 输入包含多行数据  每行数据包含3个整数A0, A ...

  2. Effective C++ 总结笔记(六)

    七.模板与泛型编程 41.了解隐式接口和编译器多态 1.类和模板都支持接口和多态. 2.类的接口是显式定义的--函数签名.多态是通过虚函数在运行期体现的. 3.模板的接口是隐式的(由模板函数的实现代码 ...

  3. Python基础(dict与set)

    #和list比较,dict有以下几个特点: #查找和插入的速度极快,不会随着key的增加而变慢: #需要占用大量的内存,内存浪费多. #dict1 = {'傻狗1':100,'傻狗2':200,'傻狗 ...

  4. C#窗体学习

    //进度条控件 private void button1_Click(object sender, EventArgs e)        {            int i;            ...

  5. Java的脚本机制、编译器API

    学习 xxl-job 定时任务时了解到基于 JVM 的 Grovvy 脚本语言.搭建 Jenkins 时知道了编译API 1. Java 脚本机制 Java 的脚本 API 可以让我们调用 JavaS ...

  6. [luogu4718]Pollard-Rho算法

    模板题 题解主要分为两部分,即Miller-Robin判素数以及关于Pollard-Rho算法 1.Miller-Robin判素数 对于一个数$n$,判定其是否为素数,依次执行以下几步-- (1)若$ ...

  7. [atAGC023F]01 on Tree

    对每一个节点维护一个序列,初始即自己(长度为1),并记$a_{i}$和$b_{i}$分别为第$i$个点序列上0和1的个数(也需要存储具体的序列) 考虑$\frac{b_{i}}{a_{i}}$最小中最 ...

  8. 构建“元宇宙”,有哪些3D建模方式?

    "沉浸.3D世界.虚拟社交.虚拟购物",最近"元宇宙"的概念特别火.人们畅想通过AR/VR以及其他互联网技术,把现实世界的楼房街道.天气温度.人际关系等投射到虚 ...

  9. static关键字相关内容

    静态变量(static)与非静态变量,静态方法(static)与非静态方法 //static public class Student { private static int age; //静态的变 ...

  10. Codeforces 650D - Zip-line(树状数组)

    Codeforces 题目传送门 & 洛谷题目传送门 我怕不是个 nt--一开始忽略了"询问独立"这个条件--然后就一直在想有什么办法维护全局 LIS--心态爆炸 首先离散 ...