Evgeny_CDАрхитектор (28.10.2012 23:28 - 23:36, просмотров: 288) ответил Evgeny_CD на Сбылась мечта идиота! Визуализация графов прямо из БД. Neo4j -> БД, которая все хранит как граф, и встроенная поддержка GraphViz -->
На самом деле от графовой БД до всех моих супермегатулзов, которыми я тут моск ипу уже 6 или 7 лет, полшага. Берем совокупность строк C кода и говорим - "это - узел графа!".
Парсим ее на теги. делим их на локальные (переменная внутри блока кода) и глобальные (для данного подмножества строк исходника).
Задаем порты трех типов:
* Прием управления - сюда можно войти (один порт)
* Передача управления - отсюда можно выйти (несколько)
* Вызов внешей сущности с возвратом (несколько)
Заносим все в БД в свойства узла (ГОТОВЫЙ МЕХАНИЗМ ДЛЯ ЭТОГО ЕСТЬ!!!) - строки текста, внешние теги, порты.
Берем совокупность узлов и говорим - "это файл исходника". Смотрим на список всех внешних тегов узлов и понимает, что есть локальные для данного файла теги, что глобальные.
Прописываем связи между портами узлов. Визуализируем граф.
Синтезируем файл исходника. Например, в свойствах узла ручкаи прописываем номер, который описывает его номер по порядку при генерации файла.
Делаем карту файла - строки с такой по такую - узел #1 и т.д.
Пишем скрипт практически для любого адекватного современного редактора, чтобы он по этой карте подсвечивал группу строк - узел.
В одном окне открыт редактор, в другом - графю. Стоя на строке жмакаем хоткей - узел графа подсветился.
Также подсвечиваем строки - порты внутри узла.
Составляем карту портов на уровне файла. Это будут внешние по отношению к файлу теги - вызовы функций, константы, макросы и тайпдефы, которые изначально были заданы в другом файле. а теперь просто требуют включения хидера.
Думаю, адеватный программер такое напитонит|натиклюет ваще за неделю.
Оно будет неказисто, негламурно, но зато работать будет (в умелых руках) просто на порядок лучше, чем самый-самый "сликедит".