使用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 使用


  1. 下载最新版Antlr4:https://www.antlr.org/download/antlr-4-12.0-complete.jar (这里下载得是12版本的Antlr4)

  2. 下载JDK11,因为Antlr4版本4.12使用的JDK最低使用11版本的,所以这里我们下载JDK11,下载链接:https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html

  3. 将下载的antlr4 jar包移动到JDK目录中
    JDK一般安装在C:\Program Files\Java,新建文件夹:antlr,将antlr-4.12.0-complete.jar放入该文件夹中,如下图:

  4. 设置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工具可以正常工作

上述操作做完文件目录如图下

  1. 设置环境变量

  2. 设置系统变量CLASSPATH:.C:\Program Files\Java\jdk-11.0.17\bin(注意开头有个点)

  3. 设置系统变量JAVA_HOME:C:\Program Files\Java\jdk-11.0.17

  4. 在PATH中添加:%JAVA_HOME%\bin

设置好之后打开CMD,输入Java-version和Javac-version,验证Java环境是否正确

这里有的小伙伴输入java-version可以执行,输入javac-version不能执行,可以看下环境变量设置的是否正确,环境变量正确,可以重启电脑,有时候环境变量重启之后才会生效

到此,使用antlr4的环境就配置好了。接下来,就是学习使用antlr4。距离成功已经打开了大门!!!

0 条评论
请不要发布违法违规有害信息,如发现请及时举报或反馈
还没有人评论呢,速度抢占沙发!
相关文章
  • 服务端 package main import ( "errors" "fmt" "log" "net" "net/rpc" "net/rpc/jsonrpc" "os" ) // ...

  • 包包名给包及其目录命名时,应该使用简洁、清晰且全小写的名字包的默认导入优先从go的安装目录查找,然后去go path找,找到既停,没找到报错工具go build执行编译操作,有main包的情况下生成可...

  • 往期回顾: Go语言开发小技巧&易错点100例(一) 本期看点(技巧类用【技】表示,易错点用【易】表示): (1)Go Module中对依赖库版本的升级与降级【技】 (2...

  • 前段时间一个需求涉及到给图片加水印,考虑图片安全性,决定放在后端加水印。记录一下代码。 思路 思路是先为水印文字生成一个仅包含水印文字的图片,把这个图片倾斜一定角度 (一般水印都是倾斜的),之后把倾斜...

  • 概述调用 time.NewTicker() 方法即可。例子package main import ( "fmt" "time" ) func main() { ticker...

  • 今日记录一下 学习 golang 这门语言遇到的一些比较特殊的细节,供大家参考。    所以,在我们输出内容的时候,可以包含很多的非 ASCII 码字符。实际上,Go 是天生支持 UTF...

  • 介绍 CabloyJS提供了一个内置模块a-wasmgo,将go wasm模块的异步加载运行机制进行了封装,使我们可以非常方便的在CabloyJS项目中引入go wasm,从而支持更多的业务场景开发 ...

  • 简单介绍一下Go中Gin使用get和post方法获取前端数据 1.使用get方法获取url中的参数 因为我使用的网页只需要在url上传一个参数,简单介绍一下,get方法的传参吧,可能不全,后续补充~ ...

  • 一 微服务项目介绍 账户功能是每一个系统都绕不开的一部分,所以本次搭建的微服务项目就是账户微服务项目,其中向外暴露的功能有: 登录 注册 查询用户信息 修改信息 发送注册邮件 发送重置密码邮件 ...

  • 概述标准库 error 数据类型本质上就是一个接口,原型如下:package builtin type error interface { Error() string }例子实现 erro...

  • 本文参与了思否技术征文,欢迎正在阅读的你也加入。前言这是Go常见错误系列的第15篇:interface使用的常见错误和最佳实践。素材来源于Go布道者,现Docker公司资深工程师Teiva Harsa...

  • msf生成的裸马现在已经不行了,加壳也只能加冷门壳了,VMP,Shielden,upx不是失效就是效果很差,所以当下,得用shellcode来免杀了 msfvenom -a x86 --platfo...

  • 概述关键字 goto 可以使程序跳转到指定的位置执行,那么这个位置如何表示呢?使用 标签 来表示 (可以理解为标签就是一个变量)。语法规则标签的名称大小写敏感,可以搭配 for, switch 语句使...

  • 了解过 Hex 六边形架构、Onion 洋葱架构、Clean 整洁架构的同学可以将本篇文章介绍的实践方法与自身项目代码架构对比并互通有无,共同改进。没了解过上述架构的同学可以学习一种新的架构方法,并尝...

  • Go创建Grpc链接池 转载请注明来源:https://janrs.com/2023/03/创建grpc链接池/ 常规用法 gRPC 四种基本使用 请求响应模式 客户端数据流模式 服务端数据流...

  • 概述调用 log 包即可,包里面的方法输出日志时会自动加上日期时间前缀字符。例子输出到终端package main import ( "log" "os" ) func main(...

  • 概述建议先阅读 字符串, 切片 两个小节。由于字符串不可变,如果每次以 重新赋值 的方式改变字符串,效率会非常低,这时应该使用 []byte 类型,[]byte 元素可以被修改。因为 byte 类型是...

  • 官方资料 官方解释: https://pkg.go.dev/cmd/go#hdr-Build_constraints ,go help buildconstraint 也能看到描述 根据官方描述,go...

  • 接口接口的定义这里用一个例子说明了golang中接口的含义与用法,先看代码 // Launch the goroutine to perform the search. ...

  • golang pprof监控系列(2) —— memory,block,mutex 使用 大家好,我是蓝胖子。 profile的中文被翻译轮廓,对于计算机程序而言,抛开业务逻辑不谈,它的轮廓是是啥...