Подтвердить что ты не робот

Анализаторы/генераторы исходного кода Java

Мне нужны инструменты для:

  • Удобно разобрать исходный код Java и легко получить доступ к данным элементам.

  • Легко создавать файлы исходного кода, легко преобразовывать структуры данных в код

Любые хорошие советы, библиотеки, рамки, инструменты? Благодарим вас за помощь.

4b9b3361

Ответ 1

Начиная с Java 6, у компилятора есть API, включенный в JDK. Через него вы можете получить доступ к результатам парсера Java через API javax.lang.model. Та же функциональность присутствовала в JDK5 в виде Mirror API. Там хорошая вводная статья здесь.

Лучший инструмент генерации кода, который я видел, CodeModel. Он имеет очень простой API и может генерировать сразу несколько исходных файлов Java.

Ответ 2

Если вам нужно проанализировать существующий исходный код, используйте JavaParser.. Это дает посетителю доступ к AST. Вы можете написать новый код, но многие вещи являются болью (например, ссылки на другие классы)

Если вам нужно генерировать исходный код, используйте CodeModel.. Он позволяет вам программно создавать классы, пакеты, методы и т.д., и это очень проста в использовании. Однако я не думаю, что он может импортировать существующий код.

Оба являются довольно устрашающими в своих соответствующих доменах.

Ответ 3

Наш DMS Software Reengineering Toolkit и его Java Front End может это сделать. Они предназначены для создания пользовательских анализаторов и генераторов кода.

DMS предоставляет общий синтаксический анализ, дерево абстрактного синтаксиса (с комментариями) и построение таблиц символов, средства навигации по дереву/проверки/модификации и возможность регенерации полного исходного кода из измененного дерева. Дополнительные возможности включают в себя правила преобразования источника в источник ( "если вы видите этот синтаксис, замените его на этот синтаксис" ) и шаблоны (используемые для построения или распознавания поддерева), оценщики грамматики атрибутов, анализ управления и анализа потоков данных, графа. Java Front End специализирует DMS, чтобы сделать все это для Java 1.4-1.6 с 1.7 рядом.

(EDIT май 2016: теперь обрабатывает Java 1.8)

DMS также предназначен для обработки масштабирования: он часто используется для обработки многих единиц компиляции (исходных файлов) одновременно, что позволяет анализировать и преобразовывать границы, пересекающие границы файлов. Он также может обрабатывать несколько языков одновременно; DMS имеет передние концы для самых разных языков.

Ответ 4

Отъезд Antlr. Один из его примеров - грамматика Java.