2

使用golang+antlr4构建一个自己的语言解析器(一) - ThirteenAnimation

 1 year ago
source link: https://www.cnblogs.com/thirteenAnimation/p/17252455.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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放入该文件夹中,如下图:


image

4. 设置antlr4命令:

新建antlr4.bat
输入
@ECHO OFF
"C:\Program Files\Java\jdk-11.0.17\bin\java" -jar "%~dp0antlr-4.12.0-complete.jar"

保存使用CMD执行下脚本,查看到如下图则证明antlr可以正常工作

image

新建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工具可以正常工作

image

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

image

5. 设置环境变量

  1. 设置系统变量CLASSPATH:.C:\Program Files\Java\jdk-11.0.17\bin(注意开头有个点)
  2. 设置系统变量JAVA_HOME:C:\Program Files\Java\jdk-11.0.17
  3. 在PATH中添加:%JAVA_HOME%\bin

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


image

image

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK