Так что я провожу весь день, пытаясь понять, как работать с ANTLR. У меня есть куча Java файлов исходного кода. Моя цель - использовать ANTLR для создания AST для каждого из этих файлов. В конце концов, AST будет преобразован в JSON, так что будет проще проанализировать каждый из них с помощью динамического c языка, такого как python. Преобразование будет использовать решение в этом topi c (хотя, если у кого-то есть лучшее решение, я буду рад услышать). Мне удалось запустить пример basi c на странице Getting-Start * . Теперь я пытаюсь выяснить, как создать AST для одного из моих Java файлов исходного кода. Как сказано на странице Getting-Start * , я могу использовать для этого Java грамматику . Я скачал JavaParser.g4
и JavaLexer.g4
. Я попытался запустить:
java -Xmx500M -cp "/p/antlr-4.8-complete.jar:$CLASSPATH" org.antlr.v4.Tool JavaParser.g4
Но я получаю ошибку:
JavaParser.g4:32:21: cannot find tokens file ./JavaLexer.tokens
Я думаю, мне нужно как-то создать этот файл, но я не мог понять, как, из документов. Поэтому я попытался найти этот файл в Github и нашел его здесь . Я скачал его, и оно выглядело нормально:
java -Xmx500M -cp "/p/antlr-4.8-complete.jar:$CLASSPATH" org.antlr.v4.Tool JavaParser.g4
javac JavaP*.java // Also tried javac Java*.java
java -Xmx500M -cp "/p/antlr-4.8-complete.jar:$CLASSPATH" org.antlr.v4.gui.TestRig JavaParser r -gui
Но я получаю:
Exception in thread "main" java.lang.ClassCastException: class JavaParser
at java.lang.Class.asSubclass(Class.java:3404)
at org.antlr.v4.gui.TestRig.process(TestRig.java:135)
at org.antlr.v4.gui.TestRig.main(TestRig.java:119)
Не уверен, что я делаю неправильно или я делаю правильные вещи, чтобы решить моя проблема. Все, что я хочу сделать, это создать AST файла /tmp/file.java
, и я даже не уверен, где мне следует включить его в команды. Итак, мои вопросы:
- Как мне создать AST для файла
/tmp/file.java
? - Можно ли создать файл AST без фактической записи Java кода? Я видел много мест, где они предлагают написать Java код и скомпилировать его с Maven или другим инструментом. Я предпочитаю не делать этого, если это возможно, лучше использовать параметр командной строки.
- Прошло много времени с тех пор, как JSON topi c (упоминалось выше) был обновлен. Что-то изменилось? Можно ли создать отчет JSON без фактического запуска Java?
Как вы можете видеть, я действительно запутался, поэтому я ценю любую помощь!
РЕДАКТИРОВАТЬ : небольшое уточнение - мне не нужно изображение AST, скорее, чтобы создать отчет JSON. Если нет простого способа сделать это, я уверен, что в ANTLR есть какой-то необработанный файл с этой информацией, который я мог бы проанализировать и преобразовать в JSON. Хотя, где находятся эти необработанные данные?