Exemple #1
0
void dot_node (node* n, FILE* out) {
  if (!n) {
    puts("called dot_node with null");
    return;
  }

  if (!(n->left_sibling)) {
    puts("n has null for left sibling!");
    return;
  }

  if (!(n->right_sibling)) {
    puts("n has null for right sibling!");
    return;
  }

  node* curr = n;
  do {
    fprintf(out, "%s -> %s\n", curr->name, curr->right_sibling->name);
    fprintf(out, "%s -> %s\n", curr->name, curr->left_sibling->name);
    if (curr->child) {
      dot_node(curr->child, out);
      fprintf(out, "%s -> %s [color=\"red\"]\n", curr->name, curr->child->name);
    }

    if (curr->parent)
      fprintf(out, "%s -> %s [color=\"blue\"]\n", curr->name, curr->parent->name);
    curr = curr->left_sibling;
  }
  while (curr != n);
}
Exemple #2
0
dot_node &dot_visitor::create_node()
{
	node_list.push_back(dot_node(node_list.size()));
	dot_node &node = node_list.back();
	if(prev_id != dot_edge::INVALID)
	{
		edge_list.push_back(dot_edge(prev_id, node.id, next_edge_label));
		next_edge_label = "";
	}
	return node;
}
Exemple #3
0
void  to_dot (node* n, char* filename) {
  FILE * out_file = fopen(filename, "w");
  counter = 0;

  if (out_file == NULL) {
    fprintf(stderr, "Error, couldn't open file: %s!", filename);
    return;
  }
  node* curr = n;
  while (curr->parent != NULL)
    curr = curr->parent;

  fprintf(out_file, "digraph {\n");
  node_name(curr, out_file);
  dot_node(curr, out_file);
  fprintf(out_file, "}\n");
  fclose(out_file);
}