Поэтому решил написать свой велосипед. В качестве языка для реализации взял ruby. Для отображения использовал graphviz. Принцип работы прост: скрипт парсит исходники и создает свою базу типов. То что не получается определить - пропускается, при этом о проблеме пишем в консоль. Получившуюся базу типов сохраняем в формате, понимаемом языком DOT, в отдельный файл. На основе этого файла получаем картинку. Такой вариант не позволяет изменять код снаружи, но на мой взгляд это и к лучшему. Не доверяю я кодогенераторам)
В результате имеем картинку с чем-то похожим на UML диаграмму. Именно похожим, потому что там много отсебятины. Например отображение условия наличия типа после компиляции (version keyword) или указание alias/typedef'ов для данного модуля. Это все сделано для упрощения визуального восприятия текущего состояния кода, и многое из этого либо не покрывает всех вариантов, либо вообще не корректно, но пока я готов на это пойти.
Собственно то, что есть на данный момент:
- Class, struct, enum, union.
- Переменные и методы, включая immutable типы и контракты.
- Наследование.
- Композиция(агрегирование).
- version, import, module.
- alias/typedef.
- TODO lists.
А вот часть кода проекта xomb(я в проекте участия не принимаю, поэтому моего кода там нет, а значит это более живой пример):
Но еще раз напомню, на данный момент DSourceParser больше не парсит, чем парсит. Так что если вам нужен результат здесь и сейчас, то у меня есть 2 предложения: либо подключайтесь к разработке и добавляйте нужные Вам вещи, либо ищите что-то другое:)
Комментариев нет:
Отправить комментарий