《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. Python进阶(上下文管理器与with语句)

    /*上下文管理器必须有__enter__和__exit__方法*/ class MyResource: def __enter__(self): print('链接资源') return self / ...

  2. Java 多线程 - 总结概述

    概述 菜鸟教程: Java 给多线程编程提供了内置的支持. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 多线程是多任务的一种特别的形式,但多线程 ...

  3. PHP 数组函数分类整理

    1.处理数组键名相关的函数: array_change_key_case - 返回字符串键名全为小写或大写的数组. array_key_exists - 检查给定的键名或索引是否存在于数组中 arra ...

  4. python实现对象测量

    目录: 问题,轮廓找到了,如何去计算对象的弧长与面积(闭合),多边形拟合,几何矩的计算等 (一)对象的弧长与面积 (二)多边形拟合 (三)几何矩的计算 (四)获取图像的外接矩形boundingRect ...

  5. [nowcoder5669H]Harder Gcd Problem

    题目相当于问1-n中最多能选出多少对不互素无交集的二元组,并要求方案 构造:将所有数放入其最小质因子对应的集合,若素数p所对应的集合元素个数为奇数且$p\ne 2$且$2p\le n$,那么就将$2p ...

  6. char数据可以放入int[]中会自动转换

    int[] ary ={'b','c','a','d','e','f'};System.out.println(ary[0]);//98String str = new String(ary, 2, ...

  7. [SQL]SQL Server 锁表

    -- 查看被锁表: SELECT request_session_id spid, -- 锁表进程 OBJECT_NAME(resource_associated_entity_id) tableNa ...

  8. Atcoder Grand Contest 016 F - Games on DAG(状压 dp)

    洛谷题面传送门 & Atcoder 题面传送门 如何看待 tzc 补他一个月前做的题目的题解 首先根据 SG 定理先手必输当且仅当 \(\text{SG}(1)=\text{SG}(2)\). ...

  9. 走向深蓝:那些 Linshey 不会的算法

    网络流 树论: Algorithm Round-1 Round-2 Algorithm Round-1 Round-2 点分治 \(\checkmark\) 边分治 \(\checkmark\) 动态 ...

  10. fluidity install on Cluster

    fluidity install on Cluster 1.编译器安装 gcc4.6 openmpi python HOME_PATH= /hpcdata1/xiaozhong/ 1.1.gmp &a ...