美文网首页
ANTLR学习(一)

ANTLR学习(一)

作者: 龙小草 | 来源:发表于2020-04-03 09:46 被阅读0次

学习背景

最近做项目需要开发一个类似Graphql的简单版的自定义查询功能。
功能主要是通过前端自定义的复查询条件来控制后端的查询字段以及最终返回的JSON格式。

最初准备直接使用Graphql实现但是研究后发现Graphql还是比较重,需要重新定义对象关系来配置Graphql的描述文件。最终决定参照Graphql的查询条件结构来自定义符合需求的查询。研究了Graphql的底层后发现是用ANTLR来做的语法解析。

开始了解ANTLR这个技术,结果一接触感觉发现了新大陆。觉得很有比较写个笔记记录一下。


ANTLR简介

ANTLR(全名:ANother Tool for Language Recognition)是基于LL(*)算法实现的语法解析器生成器(parser generator),用Java语言编写,使用自上而下(top-down)的递归下降LL剖析器方法。由旧金山大学的Terence Parr博士等人于1989年开始发展。
如同一般的词法分析器(lexer)和语法分析器(parser),ANTLR可以用来产生树状分析器(tree parsers)。ANTLR 文法定义使用类似EBNF(Extended Backus-Naur Form)的定义方式,形象十分简洁直观。例如: ANTLR用A : a;来表示规则,旧式的方法则是以 A=>a 表示,所以ANTLR是以“:”代替了“=>”。ANTLR的规则要以分号“;”结束。又如其他ANTLR符号“|”代表“或”的关系,又如“*,+”表示可以出现0次或多次。
目前Hibernate与WebLogic都是使用ANTLR做为来解析HQL。在NetBeans IDE中更以ANTLR解析C++。Twitter搜索使用ANTLR解析,一天超过200亿次查询。


是什么

简单来说ANTLR是一个可以开发自动工具的工具,使用ANTLR可以定义自己的“程序语言”。
不管你使用的是什么开发语言, 大家都知道所谓的代码其实就是定义好的一些有具体含义的语句,但在最终运行在计算机上其实都机器语言。

把程序员写的代码解释为机器语言,这里必不可少的都有一个语法解释器。ANTLR就是一个可以帮助你编写一个语法解释器的技术。 还有的时候,我们需要将一个语法翻译为另外一个语言,这时候需要一个语法翻译器, ANTLR也可以帮你实现。

在接触到ANTLR后,发现可以填补上之前知识点欠缺的一块。理解了语法解释器和语法翻译器后,是不是很容易理解一些代码生成器,代码翻译器的实现原理。 之前接触过的很多技术底层可能都能看到ANTLR的影子。

能做什么

已目前对ANTLR的了解,它能做的事情真的很多,稍微梳理一些我的思路。

  1. 语言翻译器

    开发一个把JAVA代码翻译成Python的工具

  2. 自定义一种数据交换格式

    开发一个类似json的格式,这正是我上面的需求中需要的

  3. 做代码分析的工具
    写一个工具来进行代码规范的检查,快速检查项目不符合编码规范的代码

  4. 快速重构项目代码
    ANTLR可以重写输入流,在项目中需要做一些重构时,写一个快速自动重构的工具

我相信ANTLR能做的事情还很多,发挥一下脑洞, 是不是可以基于JAVA开发一种自己的程序语言,把自己定义的语法翻译成JAVA最终在JVM中执行。

学习路径

前面都ANTLR做了一下介绍,后面会详细介绍在学习ANTLR过程中的一些笔记。目前学习主要参考的资料是《ANTLR4权威指南》这本书。
后面会逐步介绍ANTLR的使用方法以及一些简单的案例学习。

相关文章

  • ANTLR学习(一)

    学习背景 最近做项目需要开发一个类似Graphql的简单版的自定义查询功能。功能主要是通过前端自定义的复查询条件来...

  • Antlr

    什么是 Antlr? ANTLR™ (ANother Tool for Language Recognition)...

  • ANTLR学习(三)

    ANTLR基本语法 前面已经简单介绍了ANTLR以及怎么安装和测试。同学们应该大概清楚ANTLR的使用场景,但是对...

  • ANTLR学习(二)

    安装ANTLR 作者的电脑是MAC的操作系统macOS Catalina 10.15.2。 安装步骤后linux操...

  • ANTLR学习(四)

    语言类程序 在之前的学习中,我们已经知道了如何使用ANTLR来定义一种语言,现在进行一些深入的研究。通常单独的语法...

  • Antlr4 入门

    Antlr是什么 ANTLR (ANother Tool for Language Recognition ) 是...

  • DSL从入门到放弃 - ANTLR之HelloWorld

    ANTLR是什么 ANTLR 即 ANother Tool for Language Recognition 框架...

  • Hive源码系列(六)编译模块之词法、语法解析 (上)

    词法、语法解析模块会先介绍一下antlr环境(上)。然后举实际案例说明怎么使用antlr工具、利用antlr生成的...

  • Antlr

    Antlr简介 ANTLR 语言识别的一个工具 (ANother Tool for Language Recogn...

  • Antlr4解析MySQL语法使用方法

    从网上https://www.antlr.org/download.html[https://www.antlr....

网友评论

      本文标题:ANTLR学习(一)

      本文链接:https://www.haomeiwen.com/subject/feicphtx.html