DJ/RDJ графы
Bool CFG_Node::IsDom(node1, tree_type)
{
    l = this->GetTreeLevel(tree_type);
    l1 = node1->GetTreeLevel(tree_type);
    if (l > l1) return False;
    l1 -= l
    while( l1--)
    {
        node1 = node1->GetTreePred(tree_type);
    }
    return (this == node1);
}

Bool CFG_Node::IsNotSDom(node1, tree_type)
{
    if ( this == node1) return True;

    return (!(this->IsDom(node1, tree_type)));
}

void CFG::SetTreeLevelsRec(node, tree_type)
{
    node->SetTreeLevel(tree_type, this->GetCurrentHeight());
    this->SetCurrentHeight(this->GetCurrentHeight()++);

    for ( edge = node->GetFirstTreeSucc(tree_type);
           edge != nullptr;
           edge = edge->GetNextTreeSucc())
    {
        succ = edge->GetSucc();
        this->SetTreeLevelsRec(tree_type);
    }
    return;
}
int CFG::SetTreeLevels(tree_type)
{
    root_node->this->GetTreeRootNode(tree_type);
    this->SetCurrentTreeHeight(0);
    this->SetTreeLevelsRec( root_node, tree_type);

    return (this->GetCurrentHeight()+1)
}

void CFG::BuildDJ(cfg, type)
{
    if (type == DJ_GRAPH)
    {
        edge_space = DJ_EDGE;
        dir = DOWN;
        tree_type = DOM_TREE;
    } else
    {
        edge_space = RDJ_EDGE;
        dir = UP;
        tree_type = PDOM_TREE;

    }
    cfg->SetTreeLevels(tree_type);

    for ( node = cfg->GetFirstNode();
           node != nullptr;
           node = node->GetPhysSucc() )
    {
        //Create J edges
        for ( edge = node->GetFirstEdge(dir);
               edge != nullptr;
               edge = edge->GetNextEdge(dir) )
        {
            node_1 = edge->GetNode(dir);
            if ( node->IsNotSDom( node_1, tree_type) )
            {
                edge1 = cfg->MakeDJEdge( node, node1, type);
                edge1->SetDJType(DJ_J_EDGE);
            }
        }
        //Create D edges
        node1 = node->GetTreePred(tree_type);
        if ( node1 != nullptr)
        {
            edge1 = cfg->MAkeDJEdge( node1, node, type);
            edge1->SetDJType(DJ_D_EDGE);
        }

    }
    cfg->SetDJGraphBuilt(type, True);
}
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Share Alike 2.5 License.