Antlr是什么

ANTLR (ANother Tool for Language Recognition ) 是一种语言工具,它提供了一个框架,可以根据语法文件(语法描述语言编写的文件)生成该语法所对应的语言识别器、编译器和解释器。 例如,给定一个识别JSON的语法,ANTLR将会根据该语法生成一个程序,此程序可以通过ANTLR来识别输入的json字符串。

环境搭建

这里使用Antlr4(version 4.7.2)

下载

配置

假设将上面下载的jar放到路径/usr/local/lib下(当然随便你放到哪,只是举例)

在系统中加入调用ANTLR命令(可以不配,不过配了会更方便使用):

编辑文件vi ~/.bash_profile

输入并保存

export ANTLR4_HOME=/usr/local/lib/antlr-4.7.2-complete.jar

export CLASSPATH=$CLASSPATH:$ANTLR4_HOME

# 设置启动antlr4的别名

alias antlr4='java -jar /usr/local/lib/antlr-4.7.2-complete.jar'

alias grun='java org.antlr.v4.gui.TestRig'

执行命令source ~/.antlr_profile

Example

这个例子是将例如"hello abc"的字符串解析为抽象语法树。

假设工作目录是 /tmp/test,在目录下新建语法文件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

接着运行ANTLR,根据语法文件Hello.g4生成对应的词法分析和语法分析程序:

$ cd /tmp/test

$ antlr4 Hello.g4

这时候文件夹下会多出几个文件(只选择典型的2个文件说明)

HelloLexer.java 词法分析

HelloParser.java 语法分析

然后利用javac对Java文件进行编译:

$ javac Hello*.java

测试

首先是词法分析测试。启动grun,测试之前的语法:

$ grun Hello r -tokens

hello parrt # 输入要被识别的语句

EOF # 在UNIX系统上输入 Ctrl+D 来输入文件结束符

下面就会显示词法分析结果:

[@0,0:4='hello',,1:0]

[@1,6:10='parrt',,1:6]

[@2,12:11='',,2:0]

然后进行语法分析测试。

$ grun Hello r -tree

hello parrt

EOF

显示

(r hello parrt)

还可以将语法树可视化:

$ grun Hello r -gui

hello parrt

EOF

接着会弹出一个对话框。

hello-parrt.png

Ref

《ANTLR4 权威指南》

antlr java_Antlr4 入门相关推荐

  1. antlr idea 入门_ANTLR入门:构建简单的表达语言

    antlr idea 入门 这是该系列的第一篇文章. 本系列的目的是描述如何创建有用的语言和所有支持工具. 在本文中,我们将开始研究一种非常简单的表达语言. 我们将在语言沙箱中构建它,因此我们将其称为 ...

  2. antlr idea 入门_ANTLR:入门

    antlr idea 入门 这篇文章使您了解ANTLR的基础知识. 以前,我们已经了解了如何将ANTLR设置为外部工具. 在这里: ANTLR外部工具 :) 所以,我们开始-. 什么是ANTLR? • ...

  3. Antlr g4 入门+深入

    一.ANTLR概述 ANTLR是一款强大的语法分析器生成工具,可用于读取.处理.执行和翻译结构化的文本或二进制文件. ANTLR 是用JAVA写的语言识别工具,它用来声明语言的语法,简称为" ...

  4. Antlr v4入门教程和实践

    一.ANTRL 是什么 当我们实现一种语言时,我们需要构建读取句子(sentence)的应用,并对输入中的元素做出反应.如果应用计算或执行句子,我们就叫它解释器(interpreter),包括计算器. ...

  5. mysql血缘 表级血缘 字段级血缘GUDU GSP,JSQL PARSER,ANTLR MYSQL,DRUID

    ** 目的: ** 分析mysql的表级和字段级血缘,本文给出他人源码或示例 工具 GUDU-SQLPARSER GSP JSQL-PARSER antlr DRUID 横向对比 名称 开源 功能 优 ...

  6. 快速上手ANTLR--在Windows环境下解析计算器指令语法

    文章目录 前言 一.antlr是什么? 二.使用步骤 1.引入库 2.写一个EvalVisitor.java类 3.写一个Calc.java类(主类) 4.写一个自定义的calc.txt文件 4.执行 ...

  7. 数仓工具—Hive源码之SQL解析Antlr入门(7)

    文章目录 ANTLR 入门 谁在使用 ANTLR 的发展 基本概念 ANTLR 做了什么 规则基本语法和关键字 语法文件的整体结构及写法示例 入门案例-打招呼 只能对一个人打招呼 对多个人打招呼 对多 ...

  8. 使用ANTLR和Go实现DSL入门

    一. 引子 设计与实现一门像Go这样的通用编程语言的确很难!那是世界上少数程序员从事的事业,但是实现一门领域特定语言(Domain Specific Language, DSL)[1]似乎是可行的. ...

  9. ANTLR学习(二):ANTLR入门项目

    文章目录 前言 一.项目简介 二.ANTLR工具.运行库以及自动生成的代码 三.将生成的语法分析器与Java程序集成 四.构建一个语言类应用程序 前言 通过一个入门项目学习到: 一些ANTLR语法的语 ...

最新文章

  1. leetcode解题报告:198 House Robber
  2. 桌面图标计算机的意义,关于电脑桌面图标的3个古老问题,答对一个都是高手,你会几个?...
  3. 中南月赛 1313: ZZY的宠物
  4. oracle 日志切换太频繁,诊断一次Oracle日志切换频繁的问题
  5. android+proguard目录,Android proguard问题:路径可能不是null或空字符串.路径=“空”...
  6. PCA(主成分分析)的工作原理
  7. 关于支持FLV、HLS、RTSP、WS-FLV/WS-RTSP、WEBRTC、HEVC/H265的永久免费H5直播点播播放器SkeyeWebPlayer.js断线重连问题
  8. java课程设计小组分工_java课程设计---团体
  9. 向 Linux kernel 社区提交patch补丁步骤总结(已验证成功)
  10. 彻底理解线性代数; 特征值,特征向量; 线性代数的本质 矩阵的逆矩阵的实质: 行列式值为0的实质: Essense Of Linear Algebra的理解
  11. 【马克思主义基本原理】--第一章--【世界的物质性及发展规律】
  12. FxFactory 7 Mac版(Mac视觉特效插件包)
  13. TensorFlow 2019
  14. Java项目实现文件上传FTP
  15. 在mac上通过Homebrew安装redis
  16. 双圆环环布带系法图解_魔术(连环扣)两个环之间是怎样穿过去的
  17. Qt对word文档操作总结
  18. 游戏html登录注册,HTML5 点击开锁小游戏(反应能力测试)
  19. 专访首汽租车魏东:人工智能时代,车不再只是机械设备,而是“第三空间”
  20. 创建销毁对象(第八条:杜绝使用FINALIZERS和CLEANERS)

热门文章

  1. Python爬虫项目实例——爬取【乐彩网】双色球历史获奖红蓝球数据
  2. 软件测试之第六章 网络基础知识
  3. Java获取中文汉字拼音首字母方法一(更快速)
  4. 原创:新手快速熟悉IDEA快捷键方法:快捷键修改+背景图设置
  5. Scratch案例—— 母鸡保护鸡蛋
  6. 得物还是“毒物”?鉴别唯品会京东商品为假,得物商品却不支持退换货
  7. Linux shell脚本分割文件
  8. 赛门铁克软件(北京)有限公司:有关更新赛门铁克防病毒软件病毒定义代码的问题
  9. vc 屏幕上绘制透明矩形框(可设置颜色,宽度)
  10. 作为计算机专业学生,最应该学习的课程前五位是什么?