#java #python-3.x #antlr4 #abstract-syntax-tree
Вопрос:
Я скачал Antlr-4.7.1-complete.jar файл, а также скачал javalexer.g4 и javaparser.g4 с github и использовал следующую команду:
java -jar ./antlr-4.7.1-complete.jar -Dlanguage=Python3 ./JavaLexer.g4
java -jar ./antlr-4.7.1-complete.jar -Dlanguage=Python3 ./JavaParser.g4
и получил JavaLexer.py и JavaParser.py файл.
Когда я использую следующий код для создания AST из исходного кода java, он выдает ошибку, указывающую, что JavaLexer не определен.
Как импортировать/использовать javalexer и javaparser в следующем коде?
from antlr4 import FileStream, CommonTokenStream, ParseTreeWalker
source = open("sample.java", "r", encoding="utf-8")
input_stream = InputStream(source.read())
print(input_stream)
lexer = JavaLexer(input_stream)
token_stream = CommonTokenStream(lexer)
parser = JavaParser(token_stream)
tree = parser.compilationUnit()
print(tree.toStringTree(recog=parser))
Комментарии:
1. Давайте сначала начнем с вызова инструмента Antlr. Я не понимаю, почему вы используете версию 4.7.1 инструмента Antlr для создания лексера, а затем версию 4.6 инструмента Antlr для создания синтаксического анализатора. Вы не можете просто смешивать и сопоставлять версии. Но почему ты просто не используешь новейшие, antlr-4.9.2-complete.jar?
2. извините за версию 4.6, это была опечатка.
3. Основная проблема заключается в том, как включить javalexer и javaparser в код.
4. В вашей основной программе (Main.py), замените эту 1-ю строку на
from antlr4 import *; from JavaLexer import *; from JavaParser import *;
и поместите все ваши файлы в один каталог. Затем,pip install antlr4-python3-runtime; java -jar antlr-4.9.2-complete.jar -encoding utf-8 -Dlanguage=Python3 *.g4; python Main.py
. Смотрите код по адресу github.com/antlr/antlr4/blob/master/doc/…5. Теперь это работает. Огромное спасибо.