前言
前段时间更换了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
就可以查看安装的版本号了,如下图所示
安装antlr4
打开官网后就可以看到安装方法 在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 可以看到得到了语法分析的树形结构,之后就可以专心来写语法规则了