使用golang+antlr4构建一个自己的语言解析器(一)
Antlr4 简介
ANTLR(全名:ANother Tool for Language Recognition)是基于LL(*)算法实现的语法解析器生成器(parser generator),用Java语言编写,使用自上而下(top-down)的递归下降LL剖析器方法。由旧金山大学的Terence Parr博士等人于1989年开始发展。
antlr4 是一款强大的语法分析器生成工具,可用于读取、处理、执行和翻译结构化的文本或二进制文件。它被广泛的应用于学术领域和工业生产实践,是众多语言、工具和框架的基石。Twitter 搜索使用 antlr 进行语法分析,hadoop 生态系统中的 Hive、Pig、数据仓库和分析系统所使用的语言都用到了 antlr,Lex Machina 将 antlr 用于分析法律文本,oracle 公司在 sql 开发者 IDE 和迁移工具中使用了 antlr,NetBeans 公司的 IDE 使用 antlr 来解析 c++,Hibernate 对象-关系映射框架 ORM 使用 antlr 来处理 HQL 语言。
Antlr4 使用
下载最新版Antlr4:https://www.antlr.org/download/antlr-4-12.0-complete.jar (这里下载得是12版本的Antlr4)
下载JDK11,因为Antlr4版本4.12使用的JDK最低使用11版本的,所以这里我们下载JDK11,下载链接:https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html
将下载的antlr4 jar包移动到JDK目录中
JDK一般安装在C:\Program Files\Java,新建文件夹:antlr,将antlr-4.12.0-complete.jar放入该文件夹中,如下图:
设置antlr4命令:
4.1.新建antlr4.bat,输入
@ECHO OFF
"C:\Program Files\Java\jdk-11.0.17\bin\java" -jar "%~dp0antlr-4.12.0-complete.jar"
保存使用CMD执行下脚本,查看到如下图则证明antlr可以正常工作
4.2.新建grun.bat,这个是Antlr4自带的用来检查自定义的语法树是否正确的工具,输入
@ECHO OFF
"C:\Program Files\Java\jdk-11.0.17\bin\java" -cp "%~dp0antlr-4.12.0-complete.jar" org.antlr.v4.gui.TestRig %*
保存使用CMD执行下脚本,查看到如下图则证明antlr工具可以正常工作
上述操作做完文件目录如图下
设置环境变量
设置系统变量CLASSPATH:.C:\Program Files\Java\jdk-11.0.17\bin(注意开头有个点)
设置系统变量JAVA_HOME:C:\Program Files\Java\jdk-11.0.17
在PATH中添加:%JAVA_HOME%\bin
设置好之后打开CMD,输入Java-version和Javac-version,验证Java环境是否正确
这里有的小伙伴输入java-version可以执行,输入javac-version不能执行,可以看下环境变量设置的是否正确,环境变量正确,可以重启电脑,有时候环境变量重启之后才会生效
到此,使用antlr4的环境就配置好了。接下来,就是学习使用antlr4。距离成功已经打开了大门!!!
使用golang+antlr4构建一个自己的语言解析器(一)的更多相关文章
- 自己动手写一个编译器Tiny语言解析器实现
然后,上一篇文章简介Tiny词法分析,实现语言.本文将介绍Tiny的语法分析器的实现. 1 Tiny语言的语法 下图是Tiny在BNF中的文法. 文法的定义能够看出.INNY语言有以下特点: 1 程序 ...
- atitit.java解析sql语言解析器解释器的实现
atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...
- 自己动手实现一个简单的JSON解析器
1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着诸多优点.比如易读性更好,占用空间更少等.在 ...
- 一个简单的json解析器
实现一个简单地json解析器. 两部分组成,词法分析.语法分析 词法分析 package com.mahuan.json; import java.util.LinkedList; import ja ...
- 用c#自己实现一个简单的JSON解析器
一.JSON格式介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着很多优点.例如易读性更好,占用空间更 ...
- VS Extension+NVelocity系列(一)——构建一个简单的NVelocity解析环境
一.前言 本节我们将实际实现一个简单的NVelocity解析环境,以便为以后的实例做一些基本工作,虽然NVelocity如何使用已经属于老掉牙的话题,但我只能专门挑出来一章来做铺垫.人生就是这样无奈啊 ...
- 用c#写一个json的万能解析器
CommonJsonModel .cs /// <summary> /// 万能JSON解析器 /// </summary> public class CommonJsonMo ...
- kotlin 写的一个简单 sql 查询解析器
package com.dx.efuwu.core import org.apache.commons.lang.StringUtils import java.sql.PreparedStateme ...
- 从零构建一个简单的 Python Web框架
为什么你想要自己构建一个 web 框架呢?我想,原因有以下几点: 你有一个新奇的想法,觉得将会取代其他的框架 你想要获得一些名气 你遇到的问题很独特,以至于现有的框架不太合适 你对 web 框架是如何 ...
- Python 之父的解析器系列之三:生成一个 PEG 解析器
原题 | Generating a PEG Parser 作者 | Guido van Rossum(Python之父) 译者 | 豌豆花下猫("Python猫"公众号作者) 声明 ...
随机推荐
- Typora激活时,提示【连接激活服务器失败】
购买了 Typora ,激活时提示[连接激活服务器失败] 按照步骤设置下,重新激活即可.(windows系统示例,mac 类似)
- matlab读写文件
dsp,fpga这些产生的文件大部分都是二进制存储的,知道格式后可以直接读取. 读取后的"可懂"数据如何以"可懂"的形式保存在.dat,.txt,.csv之类文 ...
- vue后台管理系统——权限管理模块
电商后台管理系统的功能--权限管理模块 1. 权限管理业务分析 通过权限管理模块控制不同的用户可以进行哪些操作,具体可以通过角色的方式进行控制,即每个用户分配一个特定的角色,角色包括不同的功能权限. ...
- obspy常用命令记录
如何使用obspy(适用于MAC.Linux.Windows)完全替代SAC(使用于Linux和MAC) 波形预处理 # 去均值 stream.detrend('demean') # 去线性趋势 st ...
- sql 字符串末尾空格不占长度
print len('qwer ');--4 print len('qwer ');--4 print len('qwer ' + 't');-- ...
- outlook2013 关闭后不能接收邮件了解决方法
本人装的是2013版的outlook亲测有用,其他版本的本人没试过. 下载KeepOutlookRunning.rar 链接:https://pan.baidu.com/s/1hcNorKDLbpzV ...
- ansible使用报错not possible
一.问题描述: 执行ansible webservers -m ping报错如下(hosts文件指定ssh_user,ssh_pass) 二.解决方案 vim /etc/ansible/ansible ...
- Java的mybatis随笔
什么是mybatis mybatis是一个优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可 ...
- oracle中的!=与<>和^=
oracle中的!=与<>和^=!= . <>.^= 三个符号都表示"不等于"的意思,在逻辑上没有本质区别但是要主义的是三个符号在表达"不等于&q ...
- 【javascript】fill()的坑
今天在开发过程中用到数组填充函数fill() //创建一个5X5的二维矩阵,全部填充1 let array = new Array(5).fill(new Array(5).fill(1)) //此时 ...