M1芯片Mac安装Java环境使用antlr4

前言

前段时间更换了M1的Mac笔记本电脑,在学习编译原理相关知识的时候使用到了antlr这个工具,这是一款基于Java开发的开源的语法分析器生成工具,能够根据语法规则文件生成对应的语法分析器,所以安装工具前需要安装java,而M1版本的安装使用有所不同。

安装java环境

截止2021年10月,甲骨文(Oracle)的JDK针对macOS只有Java17提供了arm版本,而X86版本虽然也能安装,但是将会使用Rosetta2对其进行转译运行,导致生产力性能大幅下跌,同时开发过程中还可能会遇到兼容性问题。

另外可以选择使用Azul Zulu的Java JDK来解决问题。他们提供了基本所有Java版本arm版本

antlr4官方要求的Java版本是1.7版本以上,所以可以自行选择需要的版本安装。

下载完成点击安装后,在命令行输入java -version就可以查看安装的版本号了,如下图所示 image.png

安装antlr4

打开官网后就可以看到安装方法 image.png 在M1版本Mac上也是同样依次执行相关命令就可以安装antlr4工具了

另外需要注意的是alias为命令提供别名,但是只能在当前的命令行窗口生效,关闭或者新建窗口都需要重新声明别名,我们可以将其写进shell解释器的配置文件当中,这样每次新建窗口都能默认生效

## zsh修改的是.zshrc脚本,bash修改的是.bashrc脚本
vim ~/.zshrc

## 在文本最末尾添加以下两行命令
alias antlr4='java -jar /usr/local/lib/antlr-4.9.2-complete.jar'
alias grun='java org.antlr.v4.gui.TestRig'
复制代码

用Antlr生成语法分析器

创建一个文件夹,目录结构如下

|——grammmars
| |——src
|     |——PlayScript.g4
|     |——CommonLexer.g4
复制代码

Antlr通过解析规则文件来生成编译器。规则文件以.g4结尾,词法规则和语法规则可以放在同一个文件里。我们将其分开,CommonLexer.g4存放词法规则,PlayScript.g4存放语法规则。github地址

移至src目录下,依次输入命令,生成语法分析器

antlr4 PlayScript.g4 -o ./antlrtest
javac antlrtest/*.java
复制代码

然后测试一下生成的语法分析器,运行以下命令

grun antlrtest.PlayScript expression -gui
复制代码

这个命令的意思是:测试PlayScript这个类的expression方法,也就是解析表达式的方法,结果用图形化界面显示。

接下来在控制台输入

age + 10 * 2 + 10
复制代码

然后按下^ + D,之后语法分析器会分析这句话语法,并弹出一个窗口来展示AST image.png 可以看到得到了语法分析的树形结构,之后就可以专心来写语法规则了

参考资料

www.winsonlo.com/it/howto/zu…

猜你喜欢

转载自juejin.im/post/7017353428393263141