private static string BuildDotGraph(ControlFlowGraph cfg) { var sb = new StringBuilder(); sb.AppendLine("digraph CFG {"); sb.AppendLine("node[shape = record];\n"); sb.AppendLine("graph [splines=ortho, nodesep=1, overlap=false];"); foreach (var node in cfg.CFGNodes) { string name = GetNameForGuid(node.BlockId); // <ИМЯ_УЗЛА> [label = "<TEXT>\l<TEXT>"] sb.Append($"{name} [label = \""); foreach (var cmd in node.CodeList) { string cmdText = OutputSanitizer.Sanitize(cmd.ToString(), OutputSanitizer.SanitizeLevel.DotFile); sb.Append(cmdText + @"\l"); } sb.AppendLine("\"]"); } sb.AppendLine("\n"); // генерируем дуги foreach (var node in cfg.CFGNodes) { string name = GetNameForGuid(node.BlockId); // строим по потомкам foreach (var c in node.Children) { string cName = GetNameForGuid(c.BlockId); sb.AppendLine($"{name} -> {cName};"); } } sb.AppendLine("}"); return(sb.ToString()); }
private void PostProcess(TACode code) { string postProcessCode = OutputSanitizer.Sanitize(code.ToString(), OutputSanitizer.SanitizeLevel.TextBox); PrintableCodeGenerated(null, postProcessCode); }