1.创建conda环境,python版本为3.8
conda create -n python3.8 python=3.8
2.检查能否使用原环境中的antlr4 jar包
grun
antlr4
2.2 如果不能用,重新安装
ubuntu换源
sudo gedit /etc/apt/sources.list
Ubuntu更换国内源_半月夏微凉的博客-CSDN博客_ubuntu更换国内源
安装java
sudo apt install openjdk-11-jdk
检查版本
java -version
安装antlr4的jar包
下载地址:https://www.antlr.org/download/antlr-4.10.1-complete.jar
将下载好的jar包放在/usr/local/lib下
sudo cp antlr-4.10.1-complete.jar /usr/local/lib
修改.bashrc文件, 配置快捷方式。
$ sudo vim ~/.bashrc
export CLASSPATH=".:/usr/local/lib/antlr-4.10.1-complete.jar:$CLASSPATH"
alias antlr4='java -jar /usr/local/lib/antlr-4.10.1-complete.jar'
alias grun='java org.antlr.v4.gui.TestRig'
重新加载.bashrc文件,使配置生效
source ~/.bashrc
3.安装antlr运行时
首先设置一下conda环境中的pip,因为容易与环境外的pip混淆。由于pip会将包安装在所属的python的site-packages下,如果错误的使用环境外的pip安装antlr运行时,会将运行时安装到错误的目录下,那么环境就使用不了运行时
注意运行时版本为4.8,使用conda的python3.8的pip安装(将pip别名设置为3.8,防止与原环境弄混)
查看pip的来源,可以看到来自python3.8环境下
pip -V
为防止和环境外的pip混淆,为pip设置别名
alias pip3.8='~/anaconda3/envs/python3.8/bin/pip'
此时使用pip3.8就能调用conad python3.8环境下的pip
使用pip3.8安装antlr4运行时
pip3.8 install antlr4-python3-runtime
安装好运行时后,目标目录下就会出现antlr4文件夹。如果删除该文件夹,运行时就被删除
4.测试
使用简单的Hello例子测试一下
Hello.g4
grammar Hello;
r : 'hello' ID ; // match keyword hello followed by an identifier
ID : [a-z]+ ; // match lower-case identifiers
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines
HelloPrintListener.py
import sys
from antlr4 import *
from HelloLexer import HelloLexer
from HelloParser import HelloParser
from HelloListener import HelloListener
class HelloPrintListener(HelloListener):
def enterR(self, ctx):
print("Hello: %s" % ctx.ID())
def main():
lexer = HelloLexer(StdinStream())
stream = CommonTokenStream(lexer)
parser = HelloParser(stream)
tree = parser.r()
printer = HelloPrintListener()
walker = ParseTreeWalker()
walker.walk(printer, tree)
if __name__ == '__main__':
main()
使用antlr4通过g4文件生成python目标语言的分析器
将上面的 HelloPrintListener.py复制过去,运行
python3 HelloPrintListener.py
成功运行,但是出现问题
ANTLR runtime and generated code versions disagree: 4.11.1!=4.10.1
解决:
1.卸载已安装的antlr4运行时
pip uninstall antlr4-python3-runtime
2.安装符合版本的运行时
pip install antlr4-python3-runtime==4.10