我使用DOT可视化lisp AST,目前生成的图片如下所示:
目前,垂直线通常指定为parent -> child;
,并且使用constraint
指定倾斜线,如下所示:parent -> child [constraint=false];
。
这种作品,但我真正想要的是一种方法,使垂直连接保持不变,每个连接将孩子向下放一行,但使水平连接实际上是水平的。这会产生看起来更像这样的东西:
这可能吗?
答案 0 :(得分:2)
你可能会把它变得太复杂 - 这个简单的基本代码可以完成这项工作:
digraph so
{
# nodes
A[ label = "list" ];
B[ label = "ident: +" ];
C[ label = "literal: 1" ];
D[ label = "list" ];
E[ label = "ident: *" ];
F[ label = "literal: 3" ];
G[ label = "literal: 2" ];
# layout
{ rank = same; B C D }
{ rank = same; E F G }
# edges
A -> B;
B -> C -> D;
D -> E;
E -> F -> G;
}
用dot -T png -o so.png so.dot
编译的产生你想要的东西: