Python中使用Antlr4.7的JavaLexer和JavaParser提示未定义如何解决
解决方法
1. 安装匹配版本的ANTLR4 Python运行时
你使用4.7.1版本的ANTLR jar包生成Python代码,必须安装对应版本的运行时,否则会出现兼容错误:
pip install antlr4-python3-runtime==4.7.1
2. 补全导入语句
你生成的JavaLexer.py、JavaParser.py默认和语法文件在同一目录,先将这两个文件放到你的运行脚本同目录,或者将文件所在路径加入Python模块搜索路径,之后在代码开头导入对应的类即可。
3. 修正后的完整可运行代码
from antlr4 import InputStream, CommonTokenStream from JavaLexer import JavaLexer from JavaParser import JavaParser # 读取Java源文件 with open("sample.java", "r", encoding="utf-8") as f: input_stream = InputStream(f.read()) # 词法分析、语法分析生成AST lexer = JavaLexer(input_stream) token_stream = CommonTokenStream(lexer) parser = JavaParser(token_stream) tree = parser.compilationUnit() # 打印AST结构 print(tree.toStringTree(recog=parser))
额外注意事项
- 如果生成的Lexer、Parser文件不在脚本当前工作目录,在导入前先添加路径:
import sys # 替换为你的生成文件存放目录路径 sys.path.append("/path/to/your/generated/files") - 不要混用不同版本的ANTLR jar包和Python运行时,否则会出现未知的类缺失、方法调用错误。
内容的提问来源于stack exchange,提问作者Jimmy
相关产品推荐
相关产品推荐

