使用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猫"公众号作者) 声明 ...
随机推荐
- ZSTUOJ刷题④:Problem B.--输出双层金字塔
Problem B: 输出双层金字塔 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 7860 Solved: 5834 Description 输出双层 ...
- IIS 7.0、IIS 7.5 和 IIS 8.0 中的 HTTP 状态代码
https://support.microsoft.com/zh-cn/help/943891/the-http-status-code-in-iis-7-0--iis-7-5--and-iis-8- ...
- 不可错过的JS代码优化技巧(持续更新)
1. 带有多个条件的 if 语句 把多个值放在一个数组中,然后调用数组的 includes 方法. //longhand if (x === 'abc' || x === 'def' || x === ...
- vue3 ts vite
npm init vite@latest npm install -D sassnpm i vantnpm i vite-plugin-style-import@1.4.1 -Dvite.config ...
- #Python #密码管理器 无需再记住密码,使用Python实现个人密码管理器
本文在CSDN"彭_Yu的博客"同步发表 目录 1.要点 2.运行原理 3.异或算法简介 4.运行效果 5.实现过程 5.1文件结构 5.2建立数据库 5.3 Python代码 ...
- Latex Algorithm 语法错误导致无法编译
遇到了几种情况: 1. for 循环没加{} 2. $\textbf{T_i}$, 想要加粗T,但是把i也扩进去了,latex就不懂了,于是一直recompile不出来说超时什么什么的,把i放到外面就 ...
- WebApi 下载三维zip文件并预览
// 异步加载 const LoadObj = async (key?: string) => { LoadState.value = true var objStr, mtlStr var i ...
- 社团管理系统(AMS)个人总结
一.展示 所在小组:13组 源代码链接:https://github.com/xupppp/ams 博文链接: https://www.cnblogs.com/xupppp/p/11795218.ht ...
- Docker In Action 学习笔记 根据第二版有所更新
第一章 最简单的 hello_world/Dockerfile FROM busybox:latest CMD ["echo", "hello world"] ...
- win10系统格式化后进行虚拟分区
1. 目的 目前win10磁盘分区多数人采用两种方式: 1:只分一个C盘,文件在C盘以目录区分. 缺点:所有文件都在一起,区分查找比较麻烦. 2:物理分区,分多个盘,如C,D,E等等 缺点:容量固定, ...