Я написал простой компилятор на C ++ и хочу визуализировать абстрактное синтаксическое дерево, которое оно создает.В настоящее время я добавляю AST в супер длинную строку, похожую на следующую:
Program(decls=[ConstDecl(type=BasicTypeKind::Int, value=Num(n=1, loc=Location(1, 21)), name=positive, loc=Location(1, 10)), ConstDecl(type=BasicTypeKind::Int, value=Num(n=-1, loc=Location(2, 21)), name=negative, loc=Location(2, 10)), ConstDecl(type=BasicTypeKind::Int, value=Num(n=100, loc=Location(3, 26)), name=max_heap_size, loc=Location(3, 10)), ConstDecl(type=BasicTypeKind::Character, value=Char(c=99, loc=Location(4, 23)), name=...
Как видите, этот дамп не очень удобен для человека с точки зрения визуализации.Естественно, нельзя связать понятие дерево с такой длинной цепочкой.Я попробовал подход к симпатичной печати AST и нашел astpretty , который предназначен для Python.Он нацелен на отладку, но что, если я хочу иллюстрацию AST?Графический формат, безусловно, подходит лучше.
На самом деле у меня есть картина о том, какой вывод я с нетерпением жду.Graphviz
отлично справляется с этой задачей, и различные графики, которые генерирует инструмент документа C ++ Doxygen
, концептуально очень близки к моей цели.
Собирая их вместе, я хочу, чтобы AST превратился в память какC ++ объекты в приличный графический вывод (статический в порядке).Любая хорошая отправная точка?
Редактировать: , как сказано в комментариях, дамп моего AST в формате Graphviz
признает хорошей отправной точкой.Я постараюсь сделать это так, пока не возникнут новые и более конкретные проблемы.Спасибо, ребята.