Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
CheckIfThenElseGuardVisitor.cpp
Go to the documentation of this file.
2
4
5namespace storm {
6namespace expressions {
7
8CheckIfThenElseGuardVisitor::CheckIfThenElseGuardVisitor(std::set<storm::expressions::Variable> const& variables) : variables(variables) {
9 // Intentionally left empty.
10}
11
13 return boost::any_cast<bool>(expression.accept(*this, boost::none));
14}
15
16boost::any CheckIfThenElseGuardVisitor::visit(IfThenElseExpression const& expression, boost::any const& data) {
17 // check whether the 'if' condition depends on one of the variables
18 if (expression.getCondition()->toExpression().containsVariable(variables)) {
19 return true;
20 } else {
21 // recurse
22 return boost::any_cast<bool>(expression.getThenExpression()->accept(*this, data)) ||
23 boost::any_cast<bool>(expression.getElseExpression()->accept(*this, data));
24 }
25}
26
27boost::any CheckIfThenElseGuardVisitor::visit(BinaryBooleanFunctionExpression const& expression, boost::any const& data) {
28 return boost::any_cast<bool>(expression.getFirstOperand()->accept(*this, data)) ||
29 boost::any_cast<bool>(expression.getSecondOperand()->accept(*this, data));
30}
31
32boost::any CheckIfThenElseGuardVisitor::visit(BinaryNumericalFunctionExpression const& expression, boost::any const& data) {
33 return boost::any_cast<bool>(expression.getFirstOperand()->accept(*this, data)) ||
34 boost::any_cast<bool>(expression.getSecondOperand()->accept(*this, data));
35}
36
37boost::any CheckIfThenElseGuardVisitor::visit(BinaryRelationExpression const& expression, boost::any const& data) {
38 return boost::any_cast<bool>(expression.getFirstOperand()->accept(*this, data)) ||
39 boost::any_cast<bool>(expression.getSecondOperand()->accept(*this, data));
40}
41
42boost::any CheckIfThenElseGuardVisitor::visit(VariableExpression const&, boost::any const&) {
43 return false;
44}
45
46boost::any CheckIfThenElseGuardVisitor::visit(UnaryBooleanFunctionExpression const& expression, boost::any const& data) {
47 return expression.getOperand()->accept(*this, data);
48}
49
50boost::any CheckIfThenElseGuardVisitor::visit(UnaryNumericalFunctionExpression const& expression, boost::any const& data) {
51 return expression.getOperand()->accept(*this, data);
52}
53
54boost::any CheckIfThenElseGuardVisitor::visit(BooleanLiteralExpression const&, boost::any const&) {
55 return false;
56}
57
58boost::any CheckIfThenElseGuardVisitor::visit(IntegerLiteralExpression const&, boost::any const&) {
59 return false;
60}
61
63 return false;
64}
65
66} // namespace expressions
67} // namespace storm
std::shared_ptr< BaseExpression const > const & getSecondOperand() const
Retrieves the second operand of the expression.
std::shared_ptr< BaseExpression const > const & getFirstOperand() const
Retrieves the first operand of the expression.
virtual boost::any visit(IfThenElseExpression const &expression, boost::any const &data) override
CheckIfThenElseGuardVisitor(std::set< storm::expressions::Variable > const &variables)
bool check(storm::expressions::Expression const &expression)
boost::any accept(ExpressionVisitor &visitor, boost::any const &data) const
Accepts the given visitor.
std::shared_ptr< BaseExpression const > getElseExpression() const
Retrieves the else expression of the if-then-else expression.
std::shared_ptr< BaseExpression const > getCondition() const
Retrieves the condition expression of the if-then-else expression.
std::shared_ptr< BaseExpression const > getThenExpression() const
Retrieves the then expression of the if-then-else expression.
virtual std::shared_ptr< BaseExpression const > getOperand(uint_fast64_t operandIndex) const override
Retrieves the given operand from the expression.
LabParser.cpp.
Definition cli.cpp:18