2#include <boost/any.hpp>
14 boost::any result = f.
accept(*
this, boost::any());
15 return boost::any_cast<std::string>(result);
19 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string.");
23 return std::string(
"\"" + f.
getLabel() +
"\" ");
30 case BinaryBooleanStateFormula::OperatorType::And:
31 return std::string(
"& ") + left +
" " + right;
32 case BinaryBooleanStateFormula::OperatorType::Or:
33 return std::string(
"| ") + left +
" " + right;
42 case BinaryBooleanPathFormula::OperatorType::And:
43 return std::string(
"& ") + left +
" " + right;
44 case BinaryBooleanPathFormula::OperatorType::Or:
45 return std::string(
"| ") + left +
" " + right;
53 return std::string(
"t ");
55 return std::string(
"f ");
61 "Can not convert multi dimensional bounded until formula '" << f <<
"' to prefix string.");
63 "Can not convert reward-bounded until formula '" << f <<
"' to prefix string.");
71 std::ostringstream out;
72 auto repeat = [&out](uint64_t
const& n, std::string
const& str) {
73 for (uint64_t i = 0; i < n; ++i) {
80 repeat(lowerBound,
"X ");
82 repeat(lowerBound,
"& " + left +
" X ");
87 STORM_LOG_THROW(upperBound >= lowerBound, storm::exceptions::InvalidPropertyException,
88 "Step-bounded formula " << f <<
" considers an empty step-range.");
89 repeat(upperBound - lowerBound,
"| " + right +
" & " + left +
" X ");
94 out <<
"U " + left +
" " + right;
100 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string.");
104 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string.");
108 std::string subexpression = boost::any_cast<std::string>(f.
getSubformula().
accept(*
this, data));
109 return std::string(
"F ") + subexpression;
113 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string.");
117 std::string subexpression = boost::any_cast<std::string>(f.
getSubformula().
accept(*
this, data));
118 return std::string(
"G ") + subexpression;
122 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string.");
126 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string.");
130 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string.");
134 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string.");
138 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string.");
142 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string.");
146 std::string subexpression = boost::any_cast<std::string>(f.
getSubformula().
accept(*
this, data));
147 return std::string(
"X ") + subexpression;
151 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string.");
155 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string.");
159 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string.");
163 std::string subexpression = boost::any_cast<std::string>(f.
getSubformula().
accept(*
this, data));
165 case UnaryBooleanStateFormula::OperatorType::Not:
166 return std::string(
"! ") + subexpression;
172 std::string subexpression = boost::any_cast<std::string>(f.
getSubformula().
accept(*
this, data));
174 case UnaryBooleanPathFormula::OperatorType::Not:
175 return std::string(
"! ") + subexpression;
183 return std::string(
"U ") + left +
" " + right;
187 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string.");
191 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string.");
195 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string.");
bool isRewardBound() const
virtual boost::any visit(AtomicExpressionFormula const &f, boost::any const &data) const override
std::string toPrefixString(Formula const &f) const
#define STORM_LOG_THROW(cond, exception, message)