graphviz - сравнить графические деревья

Я должен сделать работу с графвизом. Мне нужно визуализировать графическое представление нескольких деревьев, но в любом случае мне нужно сравнить два дерева, чтобы увидеть их различия: что-то вроде этого, у меня есть дерево A и дерево B. После создания их представления и сравнения их мне нужно видеть только узлы, которые не имеют общего. Кто-то сказал мне использовать EMF Compare, но, к сожалению, я не знаю, как заставить этот плагин принимать расширение graphviz.

Любой совет или любое другое возможное решение для этой работы?

С уважением.

1 ответ

Решение

Учитывая два .dot файлы, a1.dot:

digraph g1 {
    A -> B -> D -> E
    A -> C -> E
    }

... а также a2.dot:

digraph g2 {
    A -> B -> F -> E
    A -> C -> F
    }

... вы можете найти узлы, которые отличаются между ними, следующим образом:

$ dot -Tplain a1.dot | sed -ne 's/^node \([^ ]\+\).*$/\1/p' | sort >a1.nodes
$ dot -Tplain a2.dot | sed -ne 's/^node \([^ ]\+\).*$/\1/p' | sort >a2.nodes
$ diff a1.nodes a2.nodes
4d3
< D
5a5
> F

я использую sed раздеть список имен узлов для каждого .dot файл из plain вывод из dot, сортировка узлов в порядке, а затем с помощью diff чтобы найти различия. Этот подход не представляет различия графически, но это сложная вещь, которую нужно сделать в лучшие времена.

Другие вопросы по тегам