使用Anaconda搭建Antlr环境

发布于:2022-12-29 ⋅ 阅读:(624) ⋅ 点赞:(0)

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

 

本文含有隐藏内容,请 开通VIP 后查看