Как генерировать AST от исходного кода Java? [закрытый]

Насколько я знаю, единственный способ проанализировать исходный код Java в AST (Абстрактное синтаксическое дерево) состоит в том, чтобы использовать API Дерева Компилятора Java: com.sun.source.tree

У меня есть два вопроса:

  1. Какие JDKs поддерживают com.sun.source.tree?
  2. Существует ли портативная замена, которая работает на весь JDKs?

36
задан Gili 28 December 2009 в 04:38
поделиться

4 ответа

Вы можете взять tools.jar и использовать его. javac с открытым исходным кодом, так что вы можете просто взять этот код (предполагая, что вы можете иметь дело с лицензией). Antlr также имеет грамматику для Java.

7
ответ дан 27 November 2019 в 06:11
поделиться

Что касается вашего второго вопроса, то в дополнение к Солнцу доступны десятки парсеров Java. Вот небольшой пример:

  • Eclipse's org.eclipse.jdt.core.dom пакет.
  • Spoon выводит очень красивое аннотированное дерево разбора с информацией о типах и привязкой к переменным (и использует парсер Eclipse внутри)
  • ANTLR - генератор парсеров, но для Java доступны грамматики
  • javaparser (которые я не использовал)

Мой лучший совет - попробуйте каждый из них, чтобы посмотреть, какой из них работает лучше всего для ваших нужд.

.
23
ответ дан 27 November 2019 в 06:11
поделиться

Я использовал парсер AST Эклипса. Я нашел его довольно хорошим (ну, он был частью плагина Eclipse, так что имело смысл его использовать). Смотрите Изучение ASTParser Eclipse.

.
7
ответ дан 27 November 2019 в 06:11
поделиться

Это не единственный путь.

См. наш Java Front End , который представляет собой полнофункциональный парсер Java, построенный на основе DMS Software Reengineering Toolkit . Он анализирует Java и строит AST как внутренние структуры данных.

Суть DMS заключается в том, что она предоставляет огромное количество дополнительных полезных машин (грамматические атрибуты, таблицы символов, анализ потока, манипуляции с AST, включая доступ и обновление, а также преобразования из исходного кода в исходный) для анализа и преобразования этого AST в результаты и/или модифицированный исходный код. Если вы получите "просто" парсер Java (например, JavaCC + грамматика Java), то вы, IMHO, не сможете многого с ним сделать. DMS позволяет делать много, без необходимости изобретать всю эту дополнительную технику самостоятельно.

Если вы действительно не хотите использовать дополнительную технику, предоставляемую DMS, то она выкинет дерево как XML.

.
1
ответ дан 27 November 2019 в 06:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: