近日想用Antlr4实现一个Parser来做点静态分析,需要安装一下。
首先检查一下是否安装了Java:
@ubuntu:~$ java -version
openjdk version "17.0.1" 2021-10-19
OpenJDK Runtime Environment (build 17.0.1+12-Ubuntu-120.04)
OpenJDK 64-Bit Server VM (build 17.0.1+12-Ubuntu-120.04, mixed mode, sharing)
显示版本号即表明安装好了。否则需要先安装java,直接apt install即可(版本号可能有变,也可以安装其他版本的Java,我选择的是openjdk-17-jdk):
@ubuntu:~$ sudo apt install openjdk-17-jdk
现在已经装好Java了,先去官网上下载antlr4的.jar,并且放到系统的lib里面:
@ubuntu:~$ wget https://www.antlr.org/download/antlr-4.9.3-complete.jar
@ubuntu:~$ sudo cp antlr-4.9.3-complete.jar /usr/local/lib/
可能会没有权限把文件拷贝到/usr/local/lib,可以sudo。当然,放在其他目录下也不是不行,只不过在lib里更符合常理。
然后在~/.bashrc中加入如下几行来配置环境变量和创建别名,以便可以方便地从命令行使用antlr4。
export CLASSPATH=".:/usr/local/lib/antlr-4.9.3-complete.jar:$CLASSPATH"
alias antlr4='java -jar /usr/local/lib/antlr-4.9.3-complete.jar'
alias grun='java org.antlr.v4.gui.TestRig'
如果上一步没有放在/usr/local/lib而是别的目录,需要做相应的修改。不要忘了source一下,来让修改立即生效:
@ubuntu:~$ source ~/.bashrc
现在应该已经安装好了,尝试一下:
@ubuntu:~$ antlr4
ANTLR Parser Generator Version 4.9.3
-o ___ specify output directory where all output is generated
-lib ___ specify location of grammars, tokens files
-atn generate rule augmented transition network diagrams
-encoding ___ specify grammar file encoding; e.g., euc-jp
-message-format ___ specify output style for messages in antlr, gnu, vs2005
-long-messages show exception details when available for errors and warnings
-listener generate parse tree listener (default)
-no-listener don't generate parse tree listener
-visitor generate parse tree visitor
-no-visitor don't generate parse tree visitor (default)
-package ___ specify a package/namespace for the generated code
-depend generate file dependencies
-D<option>=value set/override a grammar-level option
-Werror treat warnings as errors
-XdbgST launch StringTemplate visualizer on generated code
-XdbgSTWait wait for STViz to close before continuing
-Xforce-atn use the ATN simulator for all predictions
-Xlog dump lots of logging info to antlr-timestamp.log
-Xexact-output-dir all output goes into -o dir regardless of paths/package
大功告成!