12#ifndef MCRL2_LPS_PRINT_H
13#define MCRL2_LPS_PRINT_H
28template <
typename Derived>
37 using super::print_action_declarations;
38 using super::print_assignments;
39 using super::print_condition;
40 using super::print_expression;
41 using super::print_list;
42 using super::print_variables;
55 template <
typename Container>
57 const std::string& separator =
", ",
58 const std::string& number_separator =
"",
59 std::size_t index = 0,
60 bool print_start_separator =
false,
61 bool print_empty_container =
false
64 if (container.empty() && !print_empty_container)
68 for (
auto i = container.begin(); i != container.end(); ++i)
70 derived().print(
"\n");
71 derived().print(number_separator);
75 derived().print(
"\n");
76 if (i == container.begin() && !print_start_separator)
78 derived().print(number_separator);
82 derived().print(separator);
91 derived().print(
"delta");
94 derived().print(
" @ ");
105 derived().print(
"tau");
109 print_list(x.
actions(),
"",
"",
"|");
113 derived().print(
" @ ");
123 print_condition(x.
condition(),
" ->\n ");
135 derived().print(
"dist ");
136 print_variables(x.
variables(),
true,
true,
false,
"",
"");
137 derived().print(
"[");
139 derived().print(
"]");
151 derived().print(
" .\n ");
155 template <
typename ActionSummand>
159 print_variables(x.summation_variables(),
true,
true,
false,
"sum ",
".\n ",
",");
160 print_condition(x.condition(),
" ->\n ");
161 derived().apply(x.multi_action());
162 derived().print(
" .\n ");
164 derived().print(
"P(");
165 print_assignments(x.assignments(),
true,
"",
"",
", ");
166 derived().print(
")");
183 derived().print(
"init P");
185 derived().print(
";");
192 derived().print(
"init ");
196 derived().print(
" . ");
198 derived().print(
"P");
200 derived().print(
";");
205 template <
typename LinearProcess>
209 derived().print(
"proc P");
210 print_variables(x.process_parameters(),
true,
true,
false,
"(",
")",
", ");
214 derived().print(
" =");
216 std::string separator =
" + ";
217 std::string number_separator =
" ";
223 print_numbered_list(x.deadlock_summands(), separator, number_separator, x.action_summands().size() + 1,
true);
226 if (x.action_summands().empty() && (x.deadlock_summands().empty()))
235 derived().print(
" =\n ");
238 std::string opener =
"";
239 std::string closer =
"";
240 std::string separator =
"\n + ";
241 print_list(x.action_summands(), opener, closer, separator);
244 if (!x.action_summands().empty())
248 print_list(x.deadlock_summands(), opener, closer, separator);
251 if (x.action_summands().empty() && (x.deadlock_summands().empty()))
255 print_list(v, opener, closer, separator);
259 derived().print(
";\n");
273 template <
typename Specification>
277 derived().apply(x.data());
278 print_action_declarations(x.action_labels(),
"act ",
";\n\n",
";\n ");
279 print_variables(x.global_variables(),
true,
true,
true,
"glob ",
";\n\n",
";\n ");
280 derived().apply(x.process());
281 derived().print(
"\n");
282 derived().apply(x.initial_process());
283 derived().print(
"\n");
321 template <
typename T>
324 core::detail::apply_printer<lps::detail::printer> printer(out);
331std::string
pp(
const T& x)
333 std::ostringstream out;
bool empty() const
Returns true if the list's size is 0.
LPS summand containing a multi-action.
LPS summand containing a deadlock.
const lps::deadlock & deadlock() const
Returns the deadlock of this summand.
bool has_time() const
Returns true if time is available.
const data::data_expression & time() const
Returns the time.
\brief A timed multi-action
bool has_time() const
Returns true if time is available.
const process::action_list & actions() const
const data::data_expression & time() const
data::data_expression_list expressions() const
Linear process specification.
LPS summand containing a multi-action.
const stochastic_distribution & distribution() const
Returns the distribution of this summand.
\brief A stochastic distribution
const data::variable_list & variables() const
bool is_defined() const
Returns true if the distribution is defined, i.e. it contains a valid distribution....
const data::data_expression & distribution() const
A stochastic process initializer.
const stochastic_distribution & distribution() const
Linear process specification.
const data::data_expression & condition() const
Returns the condition expression.
data::variable_list & summation_variables()
Returns the sequence of summation variables.
Parser for data specifications.
add your file description here.
const function_symbol & true_()
Constructor for function symbol true.
data_expression parse_data_expression(std::istream &in, const VariableContainer &variables, const data_specification &dataspec=detail::default_specification(), bool type_check=true, bool translate_user_notation=true, bool normalize_sorts=true)
Parses and type checks a data expression.
int precedence(const data_expression &x)
std::string pp(const action_summand &x)
std::vector< deadlock_summand > deadlock_summand_vector
\brief vector of deadlock_summands
void number2string(std::size_t number, std::string &buffer, std::size_t start_position)
Convert a number to a string in the buffer starting at position start_position.
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
add your file description here.
void apply(const lps::deadlock &x)
bool & print_summand_numbers()
void print_distribution(const lps::stochastic_action_summand &x)
void print_numbered_list(const Container &container, const std::string &separator=", ", const std::string &number_separator="", std::size_t index=0, bool print_start_separator=false, bool print_empty_container=false)
void apply(const lps::stochastic_action_summand &x)
void print_linear_process(const LinearProcess &x)
void apply(const lps::deadlock &x)
bool m_print_summand_numbers
void apply(const stochastic_linear_process &x)
void apply(const lps::action_summand &x)
void apply(const lps::stochastic_process_initializer &x)
void apply(const lps::stochastic_distribution &x)
void apply(const lps::process_initializer &x)
void print_specification(const Specification &x)
void print_distribution(const lps::action_summand &)
void apply(const stochastic_specification &x)
void apply(const specification &x)
void apply(const lps::deadlock_summand &x)
void print_action_summand(const ActionSummand &x)
void apply(const linear_process &x)
void apply(const lps::multi_action &x)
lps::add_traverser_sort_expressions< process::detail::printer, Derived > super
Prints the object x to a stream.
void operator()(const T &x, std::ostream &out)