示例#1
0
文件: Lexem.cpp 项目: hleclerc/Stela
void display_graph( const Lexem *t, const char *file_name, const Lexem *avoid ) {
    std::ofstream f(file_name);
    f << "digraph popoterie {";
    unsigned max_level = 1;
    display_graph_rec( f, t, 1, max_level, avoid );

    for( unsigned i = 1; i <= max_level; ++i )
        f << "  " << i << " [ shape=plaintext ];\n  ";
    for( unsigned i = 1; i <= max_level; ++i )
        f << i << ( i<max_level ? " -> " : ";" );

    f << "}";
    f.close();

    int res = system( ("dot -Tps "+std::string(file_name)+" > "+std::string(file_name)+".eps && gv "+std::string(file_name)+".eps").c_str() );
    if ( res )
        res = 0;
}
示例#2
0
文件: lexem.cpp 项目: fpled/METIL
void display_graph_rec( std::ostream &os, const Lexem *t, unsigned level, unsigned &max_level ) {
    unsigned j;
    max_level = std::max( max_level, level );
    const Lexem *old_t = t;
    // nodes
    for(;t;t=t->next) {
        os << "{ rank = same; " << level << " node" << t << " [label=\"";
        for(unsigned i=0;i<t->si;++i) {
            if ( t->s[i]=='\n' )
                os << "\\n";
            else if ( t->s[i]=='"' )
                os << "\\\"";
            else
                os << t->s[i];
        }
        os << '(' << t->type << ')' << "\"] }\n";
        
        // children
        for(j=0;j<2;++j) {
            if ( t->children[j] ) {
                display_graph_rec( os, t->children[j], level+1, max_level );
                os << "  node" << t << " -> node" << t->children[j] << ";\n";
            }
        }
        // ascending edge
        if ( t->parent )
            os << "  node" << t << " -> node" << t->parent << " [color=red];\n";
    }
    // edges
    t = old_t;
    for(;t;t=t->next) {
        if ( t->next )
            os << "  node" << t << " -> node" << t->next << " [color=green];\n";
        if ( t->prev ) //
            os << "  node" << t << " -> node" << t->prev << " [color=yellow];\n";
    }
}