void print_sub_tree(FILE* f, node_t* node){ if(node->value==V_NODE){ fprintf(f, " n%p -> n%p [label=\"0\"]\n", (void*)node, node->left); fprintf(f, " n%p -> n%p [label=\"1\"]\n", (void*)node, node->right); print_sub_tree(f, node->left); print_sub_tree(f, node->right); }else{ int v; v = node->value; fprintf(f, " n%p [label=\"%2.2X (%c)\", fillcolor=green,style=filled]\n", (void*)node, v, (v>32&&v<128&&v!='"')?v:' '); } }
void print_sub_tree(node_t* node, int depth) { assert(node); print_tabs(depth); print_node(node); printf("\n"); if (node->n1) print_sub_tree(node->n1, depth+1); if (node->n2) print_sub_tree(node->n2, depth+1); if (node->n3) print_sub_tree(node->n3, depth+1); if (node->n4) print_sub_tree(node->n4, depth+1); if ( node->next ) print_sub_tree(node->next, depth); }
void print_ast(node_t* ast) { assert ( ast->nodetype == NODE_PROGRAM ); print_sub_tree(ast, 0); }
void print_tree(FILE* f){ fprintf(f, "digraph G{\n"); print_sub_tree(f, tree); fprintf(f, "}\n"); }