使用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猫"公众号作者) 声明 ...
随机推荐
- 在Unity3D中开发的Sketch Shader
Pencil Sketch Shader 特点 此素描渲染风格的Shader是顶点片元Shader,由本人手动编写完成. 此素描渲染风格的Shader已经在移动设备真机上进行过测试,可以直接应用到您的 ...
- tomcat任务部署
tomcat项目部署 主机 IP 需求 web-1 192.168.78.144 tomcat+jenkins web-2 192.168.78.145 tomcat 在RHEL-1主机上部署的jen ...
- python3中的负数整除、求余问题
注:小白问题,大神们请忽略先看示例,非整除: >>> -10/3-3.3333333333333335>>> 10/-3-3.3333333333333335> ...
- vue、react配置gzip打包后,删除源文件deleteOriginalAssets: true,nginx需要的配置
1.删除源文件后,配置了gzip,当配置gzip删除源文件后,解决前端history问题,就会出现所有的都返回html,请求js.css也会返回html,页面会报错,如下配置即可 location / ...
- Chorme 兼容
Chorme自动更新,不知道什么时候版本 就变了.之前好用的代码,突然不好用了. 启动时提示Only local connections are allowed 检查一下兼容性参照下文,下载对应的Dr ...
- PVE联网及更换国内源
一.PVE联网 第一次安装PVE,正常情况下PVE的IP是在我们上网的网段的.没有网络有可能是没有配置DNS服务器地址或DNS地址是软路由网关地址.解决方法有3种: 1:设置DHCP自动获取网络地址和 ...
- Visual Studio快速清除程序中的空行 删除空行
Ctrl+H; 正则替换 ^(?([^\r\n])\s)*\r?$\r?\n 快速删除多个空行
- 2003031118-李伟-Python数据分析第三周作业-第一次作业
项目 NumPy数值计算基础 博客名称 2003031118-李伟-Python数据分析第三周作业-第一次作业 课程班级博客链接 https://edu.cnblogs.com/campus/pexy ...
- SSH、SFTP、FTP、Telnet、SCP、TFTP协议的原理
一.SSH协议1.什么是SSH?SSH全称 安全外壳协议(Secure Shell),,是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境. 如果一个用户从本地计算机,使用SSH ...
- 助教工作总结(高级语言程序设计C语言)
* { font-family: 宋体 } zw { font-size: 20px; line-height: 2em } 一.助教工作的具体职责和任务 在本学期担任陈欣老师的计科专业21级c语 ...