一、ANTLR简介和学习动机

1. ANTLR简介

antlr是指可以根据输入自动生成语法树并可视化的显示出来的开源语法分析器。ANTLR—Another Tool for Language Recognition,其前身是PCCTS,它为包括Java,C++,C#在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器(recognizer),编译器(parser)和解释器(translator)的框架。(摘自百度百科)

即简单来说,使用ANTLR,我们可以不再需要手动编写大段的字符串处理代码即可完成构建词法解析器语法解析器以及语义解析器的任务,因为我们可以只编写某个语言对应的文法规则,而生成对应代码的任务就可以直接交给ANTLR这个工具进行处理了。这样可以大大缩短我们编写编译器或解释器的时间,进而我们可以将主要的精力放置在文法规则的编写语法树信息的提取上了。

2. 学习动机

在许多工作的情况下可能会涉及到对一些特定格式代码的语义处理,例如ccf csp测试中的类似手写markdown代码简单的解析器,手写json解析器,甚至判断化学方程式是否配平等等,其实现实中有非常多的情况需要我们定制对应的解析器对这些代码进行处理,因此这段时间里我就在提前学习一些编译原理的相关知识。浏览了许多知乎中的问答之后发现有答主推荐《编程语言实现模式》这本书,我在学习这本书的过程中确实大开眼界,解决了许多之前我感到迷惑的问题。此书介绍了许多手写解析器的原理,并说明了手写解析器实际上是非常繁琐而意义不大的事情,在学会原理之后就应该尽量使用例如antlr,Lex,Yacc等词法分析工具来代替手工完成这些繁琐的任务,因此我就开始了antlr的学习之旅。

这里学习antlr参考的书籍为:《ANTLR4 权威指南》

二、环境配置和使用示例

1. 下载antlr对应jar包

因为我是直接跟着上述这本书进行学习的,因此我使用的版本为antlr 4.0,下载url:

http://www.antlr.org/download/antlr-4.0-complete.jar

下载好的jar包放置到一个专门的路径(文件夹)下,例如:

2. 设置CLASSPATH和Path环境变量

2.1 CLASSPATH环境变量

首先我们需要Java虚拟机在运行时加载对应的类,因此需要先设置CLASSPATH环境变量,即在这个环境变量的最后添加上antlr jar包的路径,例如:

测试配置是否完成,输入:

java org.antlr.v4.Tool

效果:

2.2 Path环境变量

当我们要使用antlr时,都需要输入那么多的命令,就显得很繁琐,因此我们需要使用bat(批处理脚本)来简化我们的输入,创建antlr4.bat文件,然后输入如下内容:

java org.antlr.v4.Tool %*

然后将这个目录添加到Path环境变量(即antlr4.bat所在的目录):


测试配置是否完成,输入antlr4

此外我们还需要添加一个测试组件的命令,和antlr4一样,我们需要先新建一个grun.bat的文件,然后输入以下内容:

@ECHO OFF
SET TEST_CURRENT_DIR=%CLASSPATH:.;=%
if "%TEST_CURRENT_DIR%" == "%CLASSPATH%" ( SET CLASSPATH=.;%CLASSPATH% )
@ECHO ON
java org.antlr.v4.runtime.misc.TestRig %*

测试配置,输入grun

这样基本的配置就完成了。

3. 简单使用示例

首先新建一个Hello.g4文件,内容如下:

grammar Hello;
r: 'hello' ID;
ID: [a-z]+;
WS: [ \t\r\n]+ -> skip;

然后执行:

antlr4 Hello.g4

然后会发现得到了许多java文件和.tokens文件:

我们在使用javac命令来将这些java文件编译成字节码文件:

javac *.java

最后再使用指令grun来测试我们的文法:

❯ grun Hello r -tokens
hello world
^Z

运行结果:

此外我们还可以切换最终的展示模式,例如使用-gui

❯ grun Hello r -gui
hello world
^Z

运行结果:

三、IDEA中ANTLR插件的使用

首先在IDEA中下载ANTLR v4插件:

对一条写好的规则点击右键,例如:

然后即可在下面的测试框中输入对应的文本进行测试了(直接提供可视化语法树):

此外我们还可以在用户界面设置生成java文件的选项并生成对应的java文件(右键g4文件):

设置生成选项:

生成的java文件:

ANTLR学习(一)ANTLR简介和环境搭建的更多相关文章

  1. Solr学习笔记之1、环境搭建

    Solr学习笔记之1.环境搭建 一.下载相关安装包 1.JDK 2.Tomcat 3.Solr 此文所用软件包版本如下: 操作系统:Win7 64位 JDK:jdk-7u25-windows-i586 ...

  2. 学习Linux(一)环境搭建

    零基础学习Linux(一)环境搭建 从本文开始我会为大家介绍一下linux环境下详细的集群环境安装.配置.部署到实例演示的整个过程.在此过程中会给大家详细介绍一下Linux的操作技巧和一些工具的使用. ...

  3. ESP32学习笔记(一) 环境搭建与下载

    ESP32学习笔记(一) 环境搭建与下载 作者:Nevel 博客:nevel.cnblogs.com 转载请保留出处 前几天刚入手了ESP32模块,趁着放假有时间,我们先把ESP32的编译环境搭建好 ...

  4. qt学习教程1.qt开发环境搭建

    qt学习教程1.qt开发环境搭建 首先下载qt 下载地址:http://download.qt.io/archive/qt/ 此教程使用的版本为5.1.1 下载好后,打开安装包,然后点下一步 选择一个 ...

  5. 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机)

    引言 在大数据学习系列之一 ----- Hadoop环境搭建(单机) 成功的搭建了Hadoop的环境,在大数据学习系列之二 ----- HBase环境搭建(单机)成功搭建了HBase的环境以及相关使用 ...

  6. Python+NLTK自然语言处理学习(一):环境搭建

    Python+NLTK自然语言处理学习(一):环境搭建 参考黄聪的博客地址:http://www.cnblogs.com/huangcong/archive/2011/08/29/2157437.ht ...

  7. 简介及环境搭建跑通Hello

    简介及环境搭建跑通Hello Spring Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.是为了解决企业应用程序开 ...

  8. Java学习笔记【一、环境搭建】

    今天把java的学习重新拾起来,一方面是因为公司的项目需要用到大数据方面的东西,需要用java做语言 另一方面是原先使用的C#公司也在慢慢替换为java,为了以后路宽一些吧,技多不压身 此次的学习目标 ...

  9. Redis入门很简单之一【简介与环境搭建】

    Redis入门很简单之一[简介与环境搭建] 博客分类: NoSQL/Redis/MongoDB redisnosqlmemcached缓存中间件  [Redis简介] <一>. NoSQL ...

  10. 学习不一样的Vue1:环境搭建

    学习不一样的Vue1:环境搭建  发表于 2017-05-31 |  分类于 web前端|  |  阅读次数 11677 首先 首发博客: 我的博客 项目源码: 源码 项目预览: 预览 因为个人的喜好 ...

随机推荐

  1. C++继承体系中的内存对齐

    本篇随笔讨论一个比较冷门的知识,继承结构中内存对齐的问题,如今内存越来越大也越来越便宜,大部分人都已经不再关注内存对齐的问题了.但是作为一个有追求的技术人员,实现功能永远都是最基本的要求,把代码优化到 ...

  2. mzy git学习,初识git(一)

    GIT学习 git工作区.暂存区.本地库.远程库 工作区:实际上我们工作的地方,进行写代码或者文件的地方. 暂存区:我们执行了git add 操作之后,就会被提交到暂存区. 本地库:其实最后我们需要执 ...

  3. vue 前端反向代理后台,解决跨域问题

    // 和 src 同层的 config 文件夹下的 index.js dev 里面的 // Paths     assetsSubDirectory: 'static',     assetsPubl ...

  4. 多个mysql同时运行

    一.准备 mysql下载地址 https://dev.mysql.com/downloads/mysql/ 1.下载 2.解压缩 3.创建my.ini [Client] port = 3307 [my ...

  5. Redis详解(三)——

    redis https://www.cnblogs.com/zhangyinhua/p/14504717.html

  6. MyBatis学习总结(六)——Mybatis3.x与Spring4.x整合

    一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: mvn archetype:create -DgroupId=me.gacl -DartifactId=spring4-myba ...

  7. MongoDB(10)- 查询嵌套文档

    插入测试数据 db.inventory.insertMany( [ { item: "journal", qty: 25, size: { h: 14, w: 21, uom: & ...

  8. linux 常用命令脑图

  9. 测试开发【提测平台】分享9-DBUntils优化数据连接&实现应用搜索和分页功能

    微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 从本期开始知识点讲以思维导图的形式给出,内容点会按照讲解-应用-展示的形式体现,这样会更清晰些. DBUntils连接池 在项目中链接数据 ...

  10. 完美数java

    完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数.它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身.如果一个数恰好等于它的因子之和,则称该数为&q ...