1 Star 0 Fork 0

幽径吴宫/program-slicing

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
graph_to_dot.c 1.42 KB
一键复制 编辑 原始数据 按行查看 历史
幽径吴宫 提交于 2023-11-14 11:06 . my initial commit
#include <stdio.h>
#include <stdlib.h>
#include "graph_to_dot.h"
char *enum_to_string[] = {
"Entry",
"Assign_express_jump",
"Select",
"Iteration",
"Exit"
};
void graph_to_dot(CfgNode *root)
{
FILE *dotfile;
RecordCfgNode *visited_node_list = NULL, *p;
if ((dotfile = fopen("cfg.dot", "w")) == NULL)
{
printf("open file failed!\n");
return;
}
fprintf(dotfile, "digraph CFG {\n");
DFSTraverse(root, dotfile, &visited_node_list);
fprintf(dotfile, "}\n");
fclose(dotfile);
while (visited_node_list)
{
visited_node_list->node_cfg->visited = false;
p = visited_node_list;
visited_node_list = visited_node_list->next;
free(p);
}
/*编译产生图片*/
system("dot -Tpng -o cfg.png cfg.dot");
}
void DFSTraverse(CfgNode *node, FILE *dotfile, RecordCfgNode **visited_node)
{
CfgNodeList *p;
RecordCfgNode *q;
node->visited = true;
q = (RecordCfgNode *)malloc(sizeof(RecordCfgNode));
q->node_cfg = node;
q->next = *visited_node;
*visited_node = q;
for (p = node->successor; p ; p = p->next)
{
fprintf(dotfile, " %s%d -> %s%d\n",
enum_to_string[node->nodetype_cfg], node->node_of_ast ? node->node_of_ast->linenumber : 0,
enum_to_string[p->node_cfg->nodetype_cfg],
p->node_cfg->node_of_ast ? p->node_cfg->node_of_ast->linenumber : 0 );
if ( !p->node_cfg->visited)
DFSTraverse(p->node_cfg, dotfile, visited_node);
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/mole-h-6011/program-slicing.git
git@gitee.com:mole-h-6011/program-slicing.git
mole-h-6011
program-slicing
program-slicing
master

搜索帮助