《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. Part 29 AngularJS intellisense in visual studio

    In the previous videos if you have noticed as we were typing the angular code in Script.js file we w ...

  2. feignclient各种使用技巧说明

    FeignClient常见用法 常规的FeignClient的创建与使用我相信只要使用过spring cloud全家桶的套件的基本上都是非常熟悉了,我们只需定义一个interface,然后定义相关的远 ...

  3. Veeam Backup & Replication 10.0.0.4461安装部署(包含补丁)

    Veeam Backup & Replication 是一款数据保护软件,为VMware 和Hyper-V 虚拟机.物理与云环境提供了备份.复制与恢复选项.如有需要请去官方购买正版授权:htt ...

  4. Study Blazor .NET(一)简介

    翻译自:Study Blazor .NET,转载请注明. 介绍 Blazor是一个全新的 Web UI 框架,它使用c# .Razor 和 HTML以及 WebAssembly W3C标准.它提供了用 ...

  5. 面向对象中static的理解(1)

    class 对象名字{ data members; static data members; function members; static function members; } 每创建一个对象, ...

  6. 面试官问我JVM调优,我忍不住了!

    面试官:今天要不来聊聊JVM调优相关的吧? 面试官:你曾经在生产环境下有过调优JVM的经历吗? 候选者:没有 面试官:... 候选者:嗯...是这样的,我们一般优化系统的思路是这样的 候选者:1. 一 ...

  7. Java遍历map的五种方式

    使用For-Each迭代entries 这是最常见的方法,并在大多数情况下更可取的.当你在循环中需要使用Map的键和值时,就可以使用这个方法 Map<Integer, Integer> m ...

  8. maven私服-账号管理

    关于maven私服的相关数据: 默认账号admin,密码:admin123 这个账号是不能进行上传代码 到maven仓库的. 我们光是有admin和匿名账号是不够的,我们需要创建一个专门用来部署的账号 ...

  9. gitee+typro+picgo搭建博客图床

    gitee+typro+picgo搭建博客图床 前提环境 typro.picgo.nodejs 直接在官网下载即可 下载完成后,打开picgo 安装插件gitee-uploader 1.1-2即可显示 ...

  10. tomcat更改端口号and设置cmd别名

    1.修改端口号 打开tomcat的conf\server.xml 这个是项目访问的端口号了 这个也要注意更改一下,避免冲突 2.接下来要设置cmd别名 用文本编辑器打开bin\catalina.bat ...