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;
33 case BinaryBooleanStateFormula::OperatorType::Or:
34 return std::string(
"| ") + left +
" " + right;
44 case BinaryBooleanPathFormula::OperatorType::And:
45 return std::string(
"& ") + left +
" " + right;
47 case BinaryBooleanPathFormula::OperatorType::Or:
48 return std::string(
"| ") + left +
" " + right;
57 return std::string(
"t ");
59 return std::string(
"f ");
66 "Can not convert multi dimensional bounded until formula '" << f <<
"' to prefix string.");
68 "Can not convert reward-bounded until formula '" << f <<
"' to prefix string.");
76 std::ostringstream out;
77 auto repeat = [&out](uint64_t
const& n, std::string
const& str) {
78 for (uint64_t i = 0; i < n; ++i) {
85 repeat(lowerBound,
"X ");
87 repeat(lowerBound,
"& " + left +
" X ");
92 STORM_LOG_THROW(upperBound >= lowerBound, storm::exceptions::InvalidPropertyException,
93 "step-bounded formula " << f <<
" considers an empty step-range.");
94 repeat(upperBound - lowerBound,
"| " + right +
" & " + left +
" X ");
99 out <<
"U " + left +
" " + right;
105 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string");
109 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string");
113 std::string subexpression = boost::any_cast<std::string>(f.
getSubformula().
accept(*
this, data));
114 return std::string(
"F ") + subexpression;
118 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string");
122 std::string subexpression = boost::any_cast<std::string>(f.
getSubformula().
accept(*
this, data));
123 return std::string(
"G ") + subexpression;
127 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string");
131 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string");
135 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string");
139 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string");
143 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string");
147 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string");
151 std::string subexpression = boost::any_cast<std::string>(f.
getSubformula().
accept(*
this, data));
152 return std::string(
"X ") + subexpression;
156 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string");
160 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string");
164 STORM_LOG_THROW(
false, storm::exceptions::InvalidOperationException,
"Can not convert to prefix string");
168 std::string subexpression = boost::any_cast<std::string>(f.
getSubformula().
accept(*
this, data));
170 case UnaryBooleanStateFormula::OperatorType::Not:
171 return std::string(
"! ") + subexpression;
178 std::string subexpression = boost::any_cast<std::string>(f.
getSubformula().
accept(*
this, data));
180 case UnaryBooleanPathFormula::OperatorType::Not:
181 return std::string(
"! ") + subexpression;
190 return std::string(
"U ") + left +
" " + right;
194 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)