antlr java_Antlr4 入门
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 入门相关推荐
- antlr idea 入门_ANTLR入门:构建简单的表达语言
antlr idea 入门 这是该系列的第一篇文章. 本系列的目的是描述如何创建有用的语言和所有支持工具. 在本文中,我们将开始研究一种非常简单的表达语言. 我们将在语言沙箱中构建它,因此我们将其称为 ...
- antlr idea 入门_ANTLR:入门
antlr idea 入门 这篇文章使您了解ANTLR的基础知识. 以前,我们已经了解了如何将ANTLR设置为外部工具. 在这里: ANTLR外部工具 :) 所以,我们开始-. 什么是ANTLR? • ...
- Antlr g4 入门+深入
一.ANTLR概述 ANTLR是一款强大的语法分析器生成工具,可用于读取.处理.执行和翻译结构化的文本或二进制文件. ANTLR 是用JAVA写的语言识别工具,它用来声明语言的语法,简称为" ...
- Antlr v4入门教程和实践
一.ANTRL 是什么 当我们实现一种语言时,我们需要构建读取句子(sentence)的应用,并对输入中的元素做出反应.如果应用计算或执行句子,我们就叫它解释器(interpreter),包括计算器. ...
- mysql血缘 表级血缘 字段级血缘GUDU GSP,JSQL PARSER,ANTLR MYSQL,DRUID
** 目的: ** 分析mysql的表级和字段级血缘,本文给出他人源码或示例 工具 GUDU-SQLPARSER GSP JSQL-PARSER antlr DRUID 横向对比 名称 开源 功能 优 ...
- 快速上手ANTLR--在Windows环境下解析计算器指令语法
文章目录 前言 一.antlr是什么? 二.使用步骤 1.引入库 2.写一个EvalVisitor.java类 3.写一个Calc.java类(主类) 4.写一个自定义的calc.txt文件 4.执行 ...
- 数仓工具—Hive源码之SQL解析Antlr入门(7)
文章目录 ANTLR 入门 谁在使用 ANTLR 的发展 基本概念 ANTLR 做了什么 规则基本语法和关键字 语法文件的整体结构及写法示例 入门案例-打招呼 只能对一个人打招呼 对多个人打招呼 对多 ...
- 使用ANTLR和Go实现DSL入门
一. 引子 设计与实现一门像Go这样的通用编程语言的确很难!那是世界上少数程序员从事的事业,但是实现一门领域特定语言(Domain Specific Language, DSL)[1]似乎是可行的. ...
- ANTLR学习(二):ANTLR入门项目
文章目录 前言 一.项目简介 二.ANTLR工具.运行库以及自动生成的代码 三.将生成的语法分析器与Java程序集成 四.构建一个语言类应用程序 前言 通过一个入门项目学习到: 一些ANTLR语法的语 ...
最新文章
- leetcode解题报告:198 House Robber
- 桌面图标计算机的意义,关于电脑桌面图标的3个古老问题,答对一个都是高手,你会几个?...
- 中南月赛 1313: ZZY的宠物
- oracle 日志切换太频繁,诊断一次Oracle日志切换频繁的问题
- android+proguard目录,Android proguard问题:路径可能不是null或空字符串.路径=“空”...
- PCA(主成分分析)的工作原理
- 关于支持FLV、HLS、RTSP、WS-FLV/WS-RTSP、WEBRTC、HEVC/H265的永久免费H5直播点播播放器SkeyeWebPlayer.js断线重连问题
- java课程设计小组分工_java课程设计---团体
- 向 Linux kernel 社区提交patch补丁步骤总结(已验证成功)
- 彻底理解线性代数; 特征值,特征向量; 线性代数的本质 矩阵的逆矩阵的实质: 行列式值为0的实质: Essense Of Linear Algebra的理解
- 【马克思主义基本原理】--第一章--【世界的物质性及发展规律】
- FxFactory 7 Mac版(Mac视觉特效插件包)
- TensorFlow 2019
- Java项目实现文件上传FTP
- 在mac上通过Homebrew安装redis
- 双圆环环布带系法图解_魔术(连环扣)两个环之间是怎样穿过去的
- Qt对word文档操作总结
- 游戏html登录注册,HTML5 点击开锁小游戏(反应能力测试)
- 专访首汽租车魏东:人工智能时代,车不再只是机械设备,而是“第三空间”
- 创建销毁对象(第八条:杜绝使用FINALIZERS和CLEANERS)