简介:antlr工具将语法文件转换成可以识别该语法文件所描述的语言的程序.

例如:给定一个识别json的语法,antlr工具将会根据该语法生成一个程序,该程序可以通过antlr运行库来识别输入的json.

1.下载jar包,antlr-4.7.1-complete.jar

http://www.antlr.org/download/

2.将这个jar包移动到 /usr/local/lib 目录下

3.修改 ~.bashrc 文件

#Java
export JAVA_HOME=/usr/local/jdk1.8.0_121
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:/usr/local/lib/antlr-4.7.1-complete.jar
export PATH=${JAVA_HOME}/bin:$PATH
alias antlr4='java -Xmx500M -cp "/usr/local/lib/antlr-4.7.1-complete.jar:$CLASSPATH" org.antlr.v4.Tool'
alias grun='java org.antlr.v4.runtime.misc.TestRig'

其中的TestRig是一个antlr在运行库中提供的一个调试工具,它可以详细列出一个语言类应用程序在匹配输入文本过程中的信息,这些输入文本可以来自文件或者标准输入.TestRig使用java的反射机制来调用编译后的识别程序,这里使用grun作为别名.

4. source ~/.bashrc

5. 在idea中安装antlr插件

6. 建立一个 Hello.g4 文件进行测试

//Define a grammar called Hello
grammar Hello;
r : 'hello' ID; // match keyword hello followed by an identifier
ID : [a-z]+; // match lower-case identifiers
WS : [ \t\r\n]+ -> skip; // skip spaces, tabs, newlines

7. 生成java文件和编译java文件

antlr4 Hello.g4
javac Hello*.java

xxxParser.java 该文件包含一个语法分析器类的定义,这个语法分析器专门用来识别语法xxx的.

在该类中,每条规则都有对应的方法,此外还有一些辅助代码

xxxLexer.java 该文件包含的是词法分析器的类定义,它是由antlr通过分析词法规则,以及语法中的字面值'{' ',' '}'等生成的.词法分析器的作用是将输入字符序列分解成词汇符号

xxx.tokens antlr会给每个我们定义的词法符号指定一个数字形式的类型,然后将它们的对应关系存储于该文件中.

xxxListener.java xxxBaseListener.java 在遍历语法分析树的时候,遍历器能够触发一系列事件(回调),并通知我们提供的监听器对象.xxxListener接口给出了这些回调方法的定义,我们可以实现它来完成自定义的功能.

8.查看结果,注意输入hello world之后要ctrl+D

其他参数详情请参考ANTLR4权威指南28页

 - tokens #打印出token流
- tree #用LISP表单打印出解析树
- gui #在对话框中可视化地展示解析树

tokens 打印出词法符号流

grun  Hello r -tokens
Warning: TestRig moved to org.antlr.v4.gui.TestRig; calling automatically
hello world
[@0,0:4='hello',<'hello'>,1:0]
[@1,6:10='world',<ID>,1:6]
[@2,12:11='<EOF>',<EOF>,2:0]

tree 以LISP格式打印出词法分析树

grun Hello r -tree
Warning: TestRig moved to org.antlr.v4.gui.TestRig; calling automatically
hello world
(r hello world)

gui 显示语法分析树

grun Hello r -gui
Warning: TestRig moved to org.antlr.v4.gui.TestRig; calling automatically
hello world

antlr提供两种遍历语法分析树的方式:1.监听器2.访问者模式

antlr的jar包中,有两个关键部分:1.antlr工具2.antlr运行库(运行时语法分析)api

antlr工具:使用org.antlr.v3.Tool类来生成一些代码(语法分析器和词法分析器)

antlr运行库:是一个由若干类和方法组成的库,这些类和方法是自动生成的代码(如parse,lexer和token)运行所必须的

Ubuntu下安装antlr-4.7.1的更多相关文章

  1. 在Ubuntu下安装ovs-dpdk

    在Ubuntu下安装ovs-dpdk 参考资料:https://software.intel.com/zh-cn/articles/using-open-vswitch-with-dpdk-on-ub ...

  2. Ubuntu 下安装QT

    Ubuntu 下安装QT 本文使用的环境 QT Library: qt-everywhere-opensource-src-4.7.4.tar.gz QT Creator: qt-creator-li ...

  3. Ubuntu下安装JDK以及相关配置

    1.查看系统位数,输入以下命令即可 getconf LONG_BIT 2.下载对应的JDK文件,我这里下载的是jdk-8u60-linux-64.tar.gz 3.创建目录作为JDK的安装目录,这里选 ...

  4. Ubuntu下安装mod_python报错(GIT错误)

    Ubuntu下安装mod_python3.4.1版本报出如下错误: writing byte-compilation script '/tmp/tmpE91VXZ.py' /usr/bin/pytho ...

  5. TODO:Ubuntu下安装Node

    TODO:Ubuntu下安装Node Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高 ...

  6. Ubuntu杂记——Ubuntu下安装VMware

    转战Ubuntu,不知道能坚持多久,但是自己还是要努力把转战过程中的学习到的给记录下来.这次就来记录一下,Ubuntu下如何安装VMware. 就我所知,Linux下有VirtualBox和VMwar ...

  7. 来杯Caffe——在ubuntu下安装Caffe框架并测试

    Caffe是一种深度学习框架...blablabla...... Caffe要在ubuntu下安装 1. 安装依赖 sudo apt-get install libatlas-base-dev sud ...

  8. Ubuntu 下安装 Mysql

    这里讲用Ubuntu下安装MySql ubuntu上安装mysql非常简单只需要几条命令就可以完成. 1. sudo apt-get install mysql-server   2. apt-get ...

  9. ubuntu下安装配置OpenCV

    Cmake的安装 我用的是ubuntu-software自动下载安装的. Ubuntu 下安装 OpenCV 首先下载安装相关包,然后下载OpenCV 系统:ubuntu16.04 OpenCV:2. ...

  10. ubuntu下安装rpm 文件

      正想着如何把rpm package 安装到ubuntu上, 发现了这篇文章,转载一下 Ubuntu的软件包格式是deb,如果要安装rpm的包,则要先用alien把rpm转换成deb. sudo a ...

随机推荐

  1. kindeditor富文本编辑器初步使用教程

    下载kindeditor 可以选择去官网下载(http://kindeditor.net/down.php),不过要FQ:或者直接CSDNhttp://download.csdn.net/downlo ...

  2. 关于#!/bin/bash和#!/bin/sh

    关于#!/bin/bash和#!/bin/sh   #!/bin/bash是指此脚本使用/bin/bash来解释执行. 其中,#!是一个特殊的表示符,其后,跟着解释此脚本的shell路径. bash只 ...

  3. [原创]RedisDesktopManager工具使用介绍

    [原创]RedisDesktopManager工具使用介绍 1 RedisDesktopManager简介 一款能够跨平台使用的开源性redis可视化工具.redis desktop manager主 ...

  4. ArcGIS中国工具,版权声明,本人没有授权任何单位和个人销售,其他都是盗版,为了你个人和单位利益,请勿购买。 销售QQ:27652980,853740877,电话:18987281928,13108507190,qq群310964401

    ArcGIS中国工具,版权声明,本人没有授权任何单位和个人销售,其他都是盗版,为了你个人和单位利益,请勿购买.销售QQ:27652980,853740877,电话:18987281928,131085 ...

  5. Creating an LMDB database in Python

    LMDB is the database of choice when using Caffe with large datasets. This is a tutorial of how to cr ...

  6. VUE温习:style层次分析

    一.vue样式style层次分析 1.样式可以在main.js.模块js文件.组件style.组件script标签内,index.html文件内引入,不同位置引入的样式有什么关系. 2.总结: (1) ...

  7. redis 简单使用总结

    作者:王清培(Plen wang)  沪江Java资深架构师 最近一段时间与redis接触比较频繁.发现有些东西还是工作中经常会用到的,自己也花了点时间巩固下.本篇文章主要是以总结性的方式梳理,因为r ...

  8. 怎样在 Ubuntu 16.04 强制 APT 包管理器使用 IPv4 | Linux 中国

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/F8qG7f9YD02Pe/article/details/82879401 https://mmbi ...

  9. ThunderBird对只有回复地址的邮件过滤

    回复地址,其实就是reply-to 增加一个自定义的字段:reply-to即可

  10. github和gitlab并存

    原先在自己电脑中配置github的全局变量,只用它来玩github和码云的项目.现在用自己的电脑开发公司项目,公司项目使用的是gitlab,结果拉取代码时还需要手动输入用户名和密码,这还能忍受几次,但 ...