11#include "mcrl2/lts/lts_io.h"
12#include "mcrl2/lts/parse.h"
13#include "mcrl2/lts/detail/liblts_swap_to_from_probabilistic_lts.h"
37 if (i==number_of_initial_state)
43 return number_of_initial_state;
51 mCRL2log(log::verbose) <<
"writing parameter table..." << std::endl;
52 for (std::size_t i = 0; i < fsm.process_parameters().size(); i++)
54 const std::vector<std::string>& values = fsm.state_element_values(i);
55 out << fsm.process_parameter(i).first <<
"(" << values.size() <<
") " << fsm.process_parameter(i).second <<
" ";
56 for (
const std::string& s: values)
58 out <<
" \"" << s <<
"\"";
66 mCRL2log(log::verbose) <<
"writing states..." << std::endl;
67 for (std::size_t i = 0; i < fsm.num_states(); i++)
69 if (fsm.has_state_info())
71 const state_label_fsm& state_parameters = fsm.state_label(swap_initial_state(i));
72 for (std::size_t j = 0; j < state_parameters.size(); j++)
78 out << state_parameters[j];
89 if (probabilistic_state.size()<=1)
91 out << swap_initial_state(probabilistic_state.get())+1;
95 assert(probabilistic_state.size()>1);
98 for(
const lps::state_probability_pair< std::size_t, utilities::probabilistic_arbitrary_precision_fraction>& p: probabilistic_state)
108 out << swap_initial_state(p.state()) + 1 <<
" " << p.probability();
116 mCRL2log(log::verbose) <<
"writing transitions..." << std::endl;
117 for (
const transition& t: fsm.get_transitions())
120 out << swap_initial_state(t.from()) + 1 <<
" ";
121 write_probabilistic_state(fsm.probabilistic_state(t.to()));
122 out <<
" \"" << mcrl2::lts::pp(fsm.action_label(fsm.apply_hidden_label_map(t.label()))) <<
"\"" << std::endl;
129 out <<
"---" << std::endl;
131 out <<
"---" << std::endl;
134 if (
fsm.initial_probabilistic_state().size()>1)
136 out <<
"---" << std::endl;
137 write_probabilistic_state(fsm.initial_probabilistic_state());
138 out <<
"\n" << std::endl;
145 if (filename.empty() || filename==
"-")
149 parse_fsm_specification(std::cin, *
this);
151 catch (mcrl2::runtime_error& e)
153 throw mcrl2::runtime_error(std::string(
"Error parsing .fsm file from standard input.\n") + e.what());
158 std::ifstream is(filename.c_str());
162 throw mcrl2::runtime_error(
"Cannot open .fsm file " + filename +
".");
166 parse_fsm_specification(is, *
this);
168 catch (mcrl2::runtime_error& e)
170 throw mcrl2::runtime_error(std::string(
"Error parsing .fsm file.\n") + e.what());
178 if (filename.empty() || filename==
"-")
180 fsm_writer(std::cout, *
this).write();
184 std::ofstream os(filename.c_str());
188 throw mcrl2::runtime_error(
"Cannot create .fsm file '" + filename +
".");
192 fsm_writer(os, *
this).write();
201 detail::swap_to_non_probabilistic_lts
204 detail::lts_fsm_base::probabilistic_state,
205 detail::lts_fsm_base>(l,*
this);
211 detail::translate_to_probabilistic_lts
214 detail::lts_fsm_base::probabilistic_state,
215 detail::lts_fsm_base>(*
this,l);
The class lts_fsm_t contains labelled transition systems in .fsm format.
void load(const std::string &filename)
Save the labelled transition system to file.
void save(const std::string &filename) const
Save the labelled transition system to file.
The class lts_fsm_t contains labelled transition systems in .fsm format.
#define mCRL2log(LEVEL)
mCRL2log(LEVEL) provides the stream used to log.
std::size_t swap_initial_state(const std::size_t i)
std::size_t number_of_initial_state
void write_probabilistic_state(const detail::lts_fsm_base::probabilistic_state &probabilistic_state)
fsm_writer(std::ostream &out_, const probabilistic_lts_fsm_t &fsm_)
const probabilistic_lts_fsm_t & fsm