Я попытался использовать модуль Javalang, доступный в python, чтобы получить исходный код AST для Java, но для создания AST требуется целый класс. Передача блока кода, такого как оператор «if», вызывает ошибку. Есть ли другой способ сделать это? PS: Я предпочитаю использовать модуль python для выполнения задачи. ThanksЕсть ли способ получить AST (абстрактное синтаксическое дерево) блока кода в Java, а не всего класса?
ответ
ОП заинтересован в ответе, отличном от Python.
Наш DMS Software Reengineering Toolkit с его Java Front End может выполнить это.
DMS - это инструмент общего назначения для анализа/анализа/преобразования кода, параметризованный определениями langauge (включая грамматики). Учитывая определение langauge, DMS можно легко вызвать в исходном файле/потоке, представляющем символ цели для грамматики, вызывая метод Parse, предложенный параметром langauge, а DMS будет строить дерево для проанализированной строки. Специальная поддержка предоставляется для синтаксического анализа исходного файла/потоков для произвольных нетерминалов, как определено грамматикой языка; DMS построит AST, корень которого является нетерминальным, разобрав источник в соответствии с подграмой, определите этим нетерминалом.
После того, как у вас есть AST, DMS обеспечивает большую поддержку для посещения AST, проверки/модификации узлов, выполнения преобразований источника в источник в AST с использованием правил перезаписи синтаксиса. Наконец, вы можете отпечатать модифицированный AST и вернуть действительный исходный код. (Если вы только разобрали фрагмент кода для нетерминала, то вы вернетесь - это действительный код для этого нетерминала).
Если OP желает сравнить полные файлы вместо фрагментов, наш Smart Differencer может быть полезен из коробки. SmartDifferencer создает АСТ двух своих входных файлов, находит наименьший набор концептуальных изменений (вставлять, удалять, перемещать, копировать, переименовывать) по структурированным элементам кода, что объясняет различия и сообщает о различиях.
Javalang может анализировать фрагменты Java кода:
>>> tokens = javalang.tokenizer.tokenize('System.out.println("Hello " + "world");')
>>> parser = javalang.parser.Parser(tokens)
>>> parser.parse_expression()
MethodInvocation
- 1. AST (абстрактное синтаксическое дерево) в Netbeans
- 2. Анализ кода взлома в абстрактное синтаксическое дерево
- 3. Как построить абстрактное синтаксическое дерево
- 4. Представление множественного прохода Абстрактное синтаксическое дерево (AST) в C++?
- 5. Как получить абстрактное синтаксическое дерево из ParseResults
- 6. Как разработать AST (абстрактное синтаксическое дерево) для XPath?
- 7. Parser и абстрактное синтаксическое дерево
- 8. python: получить абстрактное синтаксическое дерево импортируемой функции?
- 9. Как генерировать AST (абстрактное синтаксическое дерево) для исходного кода Python с использованием antlr
- 10. абстрактное синтаксическое дерево для императивных языков
- 11. анализ кода JavaScript, абстрактное синтаксическое дерево и прочее
- 12. Абстрактное синтаксическое дерево в C++: classes vs. structs
- 13. Как уменьшить дерево синтаксического анализа в абстрактное синтаксическое дерево?
- 14. Как создать абстрактное синтаксическое дерево для * (b + c) * d
- 15. LR (1) разобрать прямо на абстрактное синтаксическое дерево
- 16. Как получить абстрактное синтаксическое дерево программы `c` в` GCC`
- 17. Интерпретатор бэкэнда, как вы проходите свое абстрактное синтаксическое дерево?
- 18. код генерации JUnit на основе абстрактное синтаксическое дерево ходьбы
- 19. Мне нужна помощь в построении AST (абстрактное синтаксическое дерево) в файле XML
- 20. Синтаксический разметки в абстрактное синтаксическое дерево с помощью регулярного выражения
- 21. В Java, как получить абстрактное дерево синтаксиса из файлов классов?
- 22. Абстрактное синтаксическое дерево в компиляторе: как точно представлять функцию?
- 23. Как пропустить типизированное абстрактное синтаксическое дерево в компиляторе OCaml
- 24. Как получить Kotlin AST?
- 25. Как показать абстрактное синтаксическое дерево грамматики в бизоне?
- 26. Как перевести LR (1) Разбор в абстрактное синтаксическое дерево?
- 27. Есть ли анализатор SCSS, который выводит AST?
- 28. Здание Аннотация Синтаксическое дерево
- 29. Подготовить синтаксическое дерево (ast), чтобы легко выполнять операции короткого замыкания
- 30. ANTLR4 - с помощью Visitor превратить синтаксическое дерево в AST
«но это требует целого класса для генерации AST» Я думал, что это следует ожидать, так как сам Java требует, чтобы каждый кусок кода, чтобы быть внутри класс? – DeepSpace
Более конкретно, я хочу сравнить в двух фрагментах кода, является ли это просто рефакторинг другого или есть некоторые логические изменения? Так что, хотя я сравниваю их АСТ –
Если вы не настаиваете на решении Python, у меня есть практический ответ. –