Commit b048f65d authored by Alexandre Duret-Lutz's avatar Alexandre Duret-Lutz
Browse files

bin: --dot=s display SCCs

* src/tgbaalgos/dotty.cc: Add option 's' to display SCCs.
* src/bin/dstar2tgba.cc, src/bin/common_aoutput.cc: Document it.
* src/tgbatest/neverclaimread.test: Test it.
parent 5b723bf8
...@@ -51,7 +51,8 @@ static const argp_option options[] = ...@@ -51,7 +51,8 @@ static const argp_option options[] =
{ "dot", OPT_DOT, "c|h|n|N|t|v", OPTION_ARG_OPTIONAL, { "dot", OPT_DOT, "c|h|n|N|t|v", OPTION_ARG_OPTIONAL,
"GraphViz's format (default). Add letters to chose (c) circular nodes, " "GraphViz's format (default). Add letters to chose (c) circular nodes, "
"(h) horizontal layout, (v) vertical layout, (n) with name, " "(h) horizontal layout, (v) vertical layout, (n) with name, "
"(N) without name, (t) always transition-based acceptance.", 0 }, "(N) without name, (s) with SCCs, "
"(t) always transition-based acceptance.", 0 },
{ "hoaf", 'H', "s|t|m|l", OPTION_ARG_OPTIONAL, { "hoaf", 'H', "s|t|m|l", OPTION_ARG_OPTIONAL,
"Output the automaton in HOA format. Add letters to select " "Output the automaton in HOA format. Add letters to select "
"(s) state-based acceptance, (t) transition-based acceptance, " "(s) state-based acceptance, (t) transition-based acceptance, "
......
// -*- coding: utf-8 -*- // -*- coding: utf-8 -*-
// Copyright (C) 2013, 2014 Laboratoire de Recherche et Développement // Copyright (C) 2013, 2014, 2015 Laboratoire de Recherche et
// de l'Epita (LRDE). // Développement de l'Epita (LRDE).
// //
// This file is part of Spot, a model checking library. // This file is part of Spot, a model checking library.
// //
...@@ -73,7 +73,8 @@ static const argp_option options[] = ...@@ -73,7 +73,8 @@ static const argp_option options[] =
{ "dot", OPT_DOT, "c|h|n|N|t|v", OPTION_ARG_OPTIONAL, { "dot", OPT_DOT, "c|h|n|N|t|v", OPTION_ARG_OPTIONAL,
"GraphViz's format (default). Add letters to chose (c) circular nodes, " "GraphViz's format (default). Add letters to chose (c) circular nodes, "
"(h) horizontal layout, (v) vertical layout, (n) with name, " "(h) horizontal layout, (v) vertical layout, (n) with name, "
"(N) without name, (t) always transition-based acceptance.", 0 }, "(N) without name, (s) with SCCs, "
"(t) always transition-based acceptance.", 0 },
{ "hoaf", 'H', "s|t|m|l", OPTION_ARG_OPTIONAL, { "hoaf", 'H', "s|t|m|l", OPTION_ARG_OPTIONAL,
"Output the automaton in HOA format. Add letters to select " "Output the automaton in HOA format. Add letters to select "
"(s) state-based acceptance, (t) transition-based acceptance, " "(s) state-based acceptance, (t) transition-based acceptance, "
......
// -*- coding: utf-8 -*- // -*- coding: utf-8 -*-
// Copyright (C) 2011, 2012, 2014 Laboratoire de Recherche et // Copyright (C) 2011, 2012, 2014, 2015 Laboratoire de Recherche et
// Developpement de l'Epita (LRDE). // Developpement de l'Epita (LRDE).
// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6), // Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre // département Systèmes Répartis Coopératifs (SRC), Université Pierre
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include "misc/escape.hh" #include "misc/escape.hh"
#include "tgba/tgbagraph.hh" #include "tgba/tgbagraph.hh"
#include "tgba/formula2bdd.hh" #include "tgba/formula2bdd.hh"
#include "tgbaalgos/sccinfo.hh"
namespace spot namespace spot
{ {
...@@ -43,6 +44,7 @@ namespace spot ...@@ -43,6 +44,7 @@ namespace spot
bool opt_name_ = true; bool opt_name_ = true;
bool opt_circles_ = false; bool opt_circles_ = false;
bool mark_states_ = false; bool mark_states_ = false;
bool opt_scc_ = false;
const_tgba_digraph_ptr aut_; const_tgba_digraph_ptr aut_;
public: public:
...@@ -65,6 +67,9 @@ namespace spot ...@@ -65,6 +67,9 @@ namespace spot
case 'N': case 'N':
opt_name_ = false; opt_name_ = false;
break; break;
case 's':
opt_scc_ = true;
break;
case 'v': case 'v':
opt_horizontal_ = false; opt_horizontal_ = false;
break; break;
...@@ -128,11 +133,25 @@ namespace spot ...@@ -128,11 +133,25 @@ namespace spot
{ {
aut_ = aut; aut_ = aut;
mark_states_ = !opt_force_acc_trans_ && aut_->has_state_based_acc(); mark_states_ = !opt_force_acc_trans_ && aut_->has_state_based_acc();
auto si =
std::unique_ptr<scc_info>(opt_scc_ ? new scc_info(aut) : nullptr);
start(); start();
if (si)
{
unsigned sccs = si->scc_count();
for (unsigned i = 0; i < sccs; ++i)
{
os_ << " subgraph cluster_" << i << " {\n";
for (auto s: si->states_of(i))
process_state(s);
os_ << " }\n";
}
}
unsigned ns = aut_->num_states(); unsigned ns = aut_->num_states();
for (unsigned n = 0; n < ns; ++n) for (unsigned n = 0; n < ns; ++n)
{ {
process_state(n); if (!si)
process_state(n);
for (auto& t: aut_->out(n)) for (auto& t: aut_->out(n))
process_link(t); process_link(t);
} }
......
#!/bin/sh #!/bin/sh
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Copyright (C) 2010, 2011, 2012, 2013, 2014 Laboratoire de Recherche # Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015 Laboratoire de
# et Développement de l'Epita (LRDE). # Recherche et Développement de l'Epita (LRDE).
# #
# This file is part of Spot, a model checking library. # This file is part of Spot, a model checking library.
# #
...@@ -322,16 +322,21 @@ accept_all: ...@@ -322,16 +322,21 @@ accept_all:
skip skip
} }
EOF EOF
../../bin/autfilt --dot <input >stdout 2>stderr && exit 1 ../../bin/autfilt --dot=sc <input >stdout 2>stderr && exit 1
cat >expected <<EOF cat >expected <<EOF
digraph G { digraph G {
rankdir=LR rankdir=LR
node [shape="circle"]
I [label="", style=invis, width=0] I [label="", style=invis, width=0]
I -> 0 I -> 0
subgraph cluster_0 {
1 [label="1", peripheries=2]
}
subgraph cluster_1 {
0 [label="0"] 0 [label="0"]
}
0 -> 1 [label="b"] 0 -> 1 [label="b"]
0 -> 0 [label="0"] 0 -> 0 [label="0"]
1 [label="1", peripheries=2]
1 -> 1 [label="1"] 1 -> 1 [label="1"]
} }
EOF EOF
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment