Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
FunctionCallExpressionFinder.cpp
Go to the documentation of this file.
2
7
8namespace storm {
9namespace jani {
10
11namespace detail {
13 public:
15 virtual boost::any visit(storm::expressions::IfThenElseExpression const& expression, boost::any const& data) override {
16 expression.getCondition()->accept(*this, data);
17 expression.getThenExpression()->accept(*this, data);
18 expression.getElseExpression()->accept(*this, data);
19 return boost::any();
20 }
21
22 virtual boost::any visit(storm::expressions::BinaryBooleanFunctionExpression const& expression, boost::any const& data) override {
23 expression.getFirstOperand()->accept(*this, data);
24 expression.getSecondOperand()->accept(*this, data);
25 return boost::any();
26 }
27
28 virtual boost::any visit(storm::expressions::BinaryNumericalFunctionExpression const& expression, boost::any const& data) override {
29 expression.getFirstOperand()->accept(*this, data);
30 expression.getSecondOperand()->accept(*this, data);
31 return boost::any();
32 }
33
34 virtual boost::any visit(storm::expressions::BinaryRelationExpression const& expression, boost::any const& data) override {
35 expression.getFirstOperand()->accept(*this, data);
36 expression.getSecondOperand()->accept(*this, data);
37 return boost::any();
38 }
39
40 virtual boost::any visit(storm::expressions::VariableExpression const&, boost::any const&) override {
41 return boost::any();
42 }
43
44 virtual boost::any visit(storm::expressions::UnaryBooleanFunctionExpression const& expression, boost::any const& data) override {
45 expression.getOperand()->accept(*this, data);
46 return boost::any();
47 }
48
49 virtual boost::any visit(storm::expressions::UnaryNumericalFunctionExpression const& expression, boost::any const& data) override {
50 expression.getOperand()->accept(*this, data);
51 return boost::any();
52 }
53
54 virtual boost::any visit(storm::expressions::BooleanLiteralExpression const&, boost::any const&) override {
55 return boost::any();
56 }
57
58 virtual boost::any visit(storm::expressions::IntegerLiteralExpression const&, boost::any const&) override {
59 return boost::any();
60 }
61
62 virtual boost::any visit(storm::expressions::RationalLiteralExpression const&, boost::any const&) override {
63 return boost::any();
64 }
65
66 virtual boost::any visit(storm::expressions::ValueArrayExpression const& expression, boost::any const& data) override {
67 STORM_LOG_ASSERT(expression.size()->isIntegerLiteralExpression(),
68 "unexpected kind of size expression of ValueArrayExpression (" << expression.size()->toExpression() << ").");
69 uint64_t size = expression.size()->evaluateAsInt();
70 for (uint64_t i = 0; i < size; ++i) {
71 expression.at(i)->accept(*this, data);
72 }
73 return boost::any();
74 }
75
76 virtual boost::any visit(storm::expressions::ConstructorArrayExpression const& expression, boost::any const& data) override {
77 expression.getElementExpression()->accept(*this, data);
78 expression.size()->accept(*this, data);
79 return boost::any();
80 }
81
82 virtual boost::any visit(storm::expressions::ArrayAccessExpression const& expression, boost::any const& data) override {
83 expression.getFirstOperand()->accept(*this, data);
84 expression.getSecondOperand()->accept(*this, data);
85 return boost::any();
86 }
87
88 virtual boost::any visit(storm::expressions::FunctionCallExpression const& expression, boost::any const& data) override {
89 auto& set = *boost::any_cast<std::unordered_set<std::string>*>(data);
90 set.insert(expression.getFunctionIdentifier());
91 for (uint64_t i = 0; i < expression.getNumberOfArguments(); ++i) {
92 expression.getArgument(i)->accept(*this, data);
93 }
94 return boost::any();
95 }
96
97 virtual boost::any visit(storm::expressions::TranscendentalNumberLiteralExpression const&, boost::any const&) override {
98 return boost::any();
99 }
100};
101
103 public:
104 virtual void traverse(Model const& model, boost::any const& data) override {
105 ConstJaniTraverser::traverse(model, data);
106 }
107
108 virtual void traverse(storm::expressions::Expression const& expression, boost::any const& data) override {
109 auto& res = *boost::any_cast<bool*>(data);
110 res = res || !getOccurringFunctionCalls(expression).empty();
111 }
112};
113} // namespace detail
114
116 bool result = false;
118 return result;
119}
120
121std::unordered_set<std::string> getOccurringFunctionCalls(storm::expressions::Expression const& expression) {
123 std::unordered_set<std::string> result;
124 expression.accept(v, &result);
125 return result;
126}
127} // namespace jani
128} // 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.
Represents an array of the given size, where the i'th entry is determined by the elementExpression,...
virtual std::shared_ptr< BaseExpression const > size() const override
std::shared_ptr< BaseExpression const > const & getElementExpression() const
boost::any accept(ExpressionVisitor &visitor, boost::any const &data) const
Accepts the given visitor.
virtual boost::any visit(IfThenElseExpression const &expression, boost::any const &data)=0
Represents an array with a given list of elements.
std::shared_ptr< BaseExpression const > getArgument(uint64_t i) const
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.
Represents an array with a given list of elements.
virtual std::shared_ptr< BaseExpression const > size() const override
virtual std::shared_ptr< BaseExpression const > at(uint64_t i) const override
virtual void traverse(Model const &model, boost::any const &data)
virtual boost::any visit(storm::expressions::ConstructorArrayExpression const &expression, boost::any const &data) override
virtual boost::any visit(storm::expressions::FunctionCallExpression const &expression, boost::any const &data) override
virtual boost::any visit(storm::expressions::IntegerLiteralExpression const &, boost::any const &) override
virtual boost::any visit(storm::expressions::BooleanLiteralExpression const &, boost::any const &) override
virtual boost::any visit(storm::expressions::RationalLiteralExpression const &, boost::any const &) override
virtual boost::any visit(storm::expressions::BinaryBooleanFunctionExpression const &expression, boost::any const &data) override
virtual boost::any visit(storm::expressions::BinaryNumericalFunctionExpression const &expression, boost::any const &data) override
virtual boost::any visit(storm::expressions::IfThenElseExpression const &expression, boost::any const &data) override
virtual boost::any visit(storm::expressions::BinaryRelationExpression const &expression, boost::any const &data) override
virtual boost::any visit(storm::expressions::VariableExpression const &, boost::any const &) override
virtual boost::any visit(storm::expressions::ValueArrayExpression const &expression, boost::any const &data) override
virtual boost::any visit(storm::expressions::TranscendentalNumberLiteralExpression const &, boost::any const &) override
virtual boost::any visit(storm::expressions::UnaryBooleanFunctionExpression const &expression, boost::any const &data) override
virtual boost::any visit(storm::expressions::UnaryNumericalFunctionExpression const &expression, boost::any const &data) override
virtual boost::any visit(storm::expressions::ArrayAccessExpression const &expression, boost::any const &data) override
virtual void traverse(storm::expressions::Expression const &expression, boost::any const &data) override
virtual void traverse(Model const &model, boost::any const &data) override
#define STORM_LOG_ASSERT(cond, message)
Definition macros.h:11
std::unordered_set< std::string > getOccurringFunctionCalls(storm::expressions::Expression const &expression)
bool containsFunctionCallExpression(Model const &model)
LabParser.cpp.
Definition cli.cpp:18