19 changed files with 770 additions and 291 deletions
-
600src/storm-parsers/parser/JaniParser.cpp
-
62src/storm-parsers/parser/JaniParser.h
-
17src/storm/storage/jani/Automaton.cpp
-
20src/storm/storage/jani/Automaton.h
-
30src/storm/storage/jani/FunctionDefinition.cpp
-
61src/storm/storage/jani/FunctionDefinition.h
-
82src/storm/storage/jani/JSONExporter.cpp
-
6src/storm/storage/jani/JSONExporter.h
-
15src/storm/storage/jani/Model.cpp
-
19src/storm/storage/jani/Model.h
-
6src/storm/storage/jani/ModelFeatures.cpp
-
3src/storm/storage/jani/ModelFeatures.h
-
75src/storm/storage/jani/expressions/FunctionCallExpression.cpp
-
42src/storm/storage/jani/expressions/FunctionCallExpression.h
-
9src/storm/storage/jani/expressions/JaniExpressionSubstitutionVisitor.cpp
-
1src/storm/storage/jani/expressions/JaniExpressionSubstitutionVisitor.h
-
1src/storm/storage/jani/expressions/JaniExpressionVisitor.h
-
1src/storm/storage/jani/expressions/JaniExpressions.h
-
9src/storm/storage/jani/traverser/ArrayExpressionFinder.cpp
600
src/storm-parsers/parser/JaniParser.cpp
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,30 @@ |
|||||
|
#include "storm/storage/jani/FunctionDefinition.h"
|
||||
|
|
||||
|
namespace storm { |
||||
|
namespace jani { |
||||
|
|
||||
|
FunctionDefinition::FunctionDefinition(std::string const& name, storm::expressions::Type const& type, std::vector<storm::expressions::Variable> const& parameters, storm::expressions::Expression const& functionBody) : name(name), type(type), parameters(parameters), functionBody(functionBody) { |
||||
|
// Intentionally left empty.
|
||||
|
} |
||||
|
|
||||
|
std::string const& FunctionDefinition::getName() const { |
||||
|
return name; |
||||
|
} |
||||
|
|
||||
|
storm::expressions::Type const& FunctionDefinition::getType() const { |
||||
|
return type; |
||||
|
} |
||||
|
|
||||
|
std::vector<storm::expressions::Variable> const& FunctionDefinition::getParameters() const { |
||||
|
return parameters; |
||||
|
} |
||||
|
|
||||
|
storm::expressions::Expression const& FunctionDefinition::getFunctionBody() const { |
||||
|
return functionBody; |
||||
|
} |
||||
|
|
||||
|
void FunctionDefinition::setFunctionBody(storm::expressions::Expression const& body) { |
||||
|
functionBody = body; |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,61 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
#include <string> |
||||
|
#include <vector> |
||||
|
|
||||
|
#include <boost/optional.hpp> |
||||
|
|
||||
|
#include "storm/storage/expressions/Variable.h" |
||||
|
#include "storm/storage/expressions/Expression.h" |
||||
|
|
||||
|
namespace storm { |
||||
|
namespace jani { |
||||
|
|
||||
|
class FunctionDefinition { |
||||
|
public: |
||||
|
/*! |
||||
|
* Creates a functionDefinition. |
||||
|
*/ |
||||
|
FunctionDefinition(std::string const& name, storm::expressions::Type const& type, std::vector<storm::expressions::Variable> const& parameters, storm::expressions::Expression const& functionBody); |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves the name of the function. |
||||
|
*/ |
||||
|
std::string const& getName() const; |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves the type of the function. |
||||
|
*/ |
||||
|
storm::expressions::Type const& getType() const; |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves the parameters of the function |
||||
|
*/ |
||||
|
std::vector<storm::expressions::Variable> const& getParameters() const; |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves the expression that defines the function |
||||
|
*/ |
||||
|
storm::expressions::Expression const& getFunctionBody() const; |
||||
|
|
||||
|
/*! |
||||
|
* sets the expression that defines the function |
||||
|
*/ |
||||
|
void setFunctionBody(storm::expressions::Expression const& body); |
||||
|
|
||||
|
private: |
||||
|
// The name of the function. |
||||
|
std::string name; |
||||
|
|
||||
|
// The type of the function |
||||
|
storm::expressions::Type type; |
||||
|
|
||||
|
// The parameters |
||||
|
std::vector<storm::expressions::Variable> parameters; |
||||
|
|
||||
|
// The body of the function |
||||
|
storm::expressions::Expression functionBody; |
||||
|
}; |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,75 @@ |
|||||
|
#include "storm/storage/jani/expressions/FunctionCallExpression.h"
|
||||
|
|
||||
|
#include "storm/storage/jani/expressions/JaniExpressionVisitor.h"
|
||||
|
#include "storm/storage/expressions/ExpressionManager.h"
|
||||
|
|
||||
|
#include "storm/exceptions/InvalidArgumentException.h"
|
||||
|
#include "storm/exceptions/UnexpectedException.h"
|
||||
|
|
||||
|
namespace storm { |
||||
|
namespace expressions { |
||||
|
|
||||
|
FunctionCallExpression::FunctionCallExpression(ExpressionManager const& manager, Type const& type, std::string const& functionIdentifier, std::vector<std::shared_ptr<BaseExpression const>> const& arguments) : BaseExpression(manager, type), identifier(functionIdentifier), arguments(arguments) { |
||||
|
// Intentionally left empty
|
||||
|
} |
||||
|
|
||||
|
void FunctionCallExpression::gatherVariables(std::set<storm::expressions::Variable>& variables) const { |
||||
|
for (auto const& a : arguments) { |
||||
|
a->gatherVariables(variables); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
bool FunctionCallExpression::containsVariables() const { |
||||
|
for (auto const& a : arguments) { |
||||
|
if (a->containsVariables()) { |
||||
|
return true; |
||||
|
} |
||||
|
} |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
std::shared_ptr<BaseExpression const> FunctionCallExpression::simplify() const { |
||||
|
std::vector<std::shared_ptr<BaseExpression const>> simplifiedArguments; |
||||
|
simplifiedArguments.reserve(arguments.size()); |
||||
|
for (auto const& a : arguments) { |
||||
|
simplifiedArguments.push_back(a->simplify()); |
||||
|
} |
||||
|
return std::shared_ptr<BaseExpression const>(new FunctionCallExpression(getManager(), getType(), identifier, simplifiedArguments)); |
||||
|
} |
||||
|
|
||||
|
boost::any FunctionCallExpression::accept(ExpressionVisitor& visitor, boost::any const& data) const { |
||||
|
auto janiVisitor = dynamic_cast<JaniExpressionVisitor*>(&visitor); |
||||
|
STORM_LOG_THROW(janiVisitor != nullptr, storm::exceptions::UnexpectedException, "Visitor of jani expression should be of type JaniVisitor."); |
||||
|
return janiVisitor->visit(*this, data); |
||||
|
} |
||||
|
|
||||
|
void FunctionCallExpression::printToStream(std::ostream& stream) const { |
||||
|
stream << identifier; |
||||
|
if (getNumberOfArguments() > 0) { |
||||
|
stream << "("; |
||||
|
bool first = true; |
||||
|
for (auto const& a : arguments) { |
||||
|
stream << *a; |
||||
|
if (!first) { |
||||
|
stream << ", "; |
||||
|
} |
||||
|
first = false; |
||||
|
} |
||||
|
stream << ")"; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
std::string const& FunctionCallExpression::getFunctionIdentifier() const { |
||||
|
return identifier; |
||||
|
} |
||||
|
|
||||
|
uint64_t FunctionCallExpression::getNumberOfArguments() const { |
||||
|
return arguments.size(); |
||||
|
} |
||||
|
|
||||
|
std::shared_ptr<BaseExpression const> FunctionCallExpression::getArgument(uint64_t i) const { |
||||
|
STORM_LOG_THROW(i < arguments.size(), storm::exceptions::InvalidArgumentException, "Tried to access the argument with index " << i << " of a function call with " << arguments.size() << " arguments."); |
||||
|
return arguments[i]; |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,42 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
#include "storm/storage/expressions/BaseExpression.h" |
||||
|
|
||||
|
namespace storm { |
||||
|
namespace expressions { |
||||
|
/*! |
||||
|
* Represents an array with a given list of elements. |
||||
|
*/ |
||||
|
class FunctionCallExpression : public BaseExpression { |
||||
|
public: |
||||
|
|
||||
|
FunctionCallExpression(ExpressionManager const& manager, Type const& type, std::string const& functionIdentifier, std::vector<std::shared_ptr<BaseExpression const>> const& arguments); |
||||
|
|
||||
|
|
||||
|
// Instantiate constructors and assignments with their default implementations. |
||||
|
FunctionCallExpression(FunctionCallExpression const& other) = default; |
||||
|
FunctionCallExpression& operator=(FunctionCallExpression const& other) = delete; |
||||
|
FunctionCallExpression(FunctionCallExpression&&) = default; |
||||
|
FunctionCallExpression& operator=(FunctionCallExpression&&) = delete; |
||||
|
|
||||
|
virtual ~FunctionCallExpression() = default; |
||||
|
|
||||
|
virtual void gatherVariables(std::set<storm::expressions::Variable>& variables) const override; |
||||
|
virtual bool containsVariables() const override; |
||||
|
virtual std::shared_ptr<BaseExpression const> simplify() const override; |
||||
|
virtual boost::any accept(ExpressionVisitor& visitor, boost::any const& data) const override; |
||||
|
|
||||
|
std::string const& getFunctionIdentifier() const; |
||||
|
uint64_t getNumberOfArguments() const; |
||||
|
std::shared_ptr<BaseExpression const> getArgument(uint64_t i) const; |
||||
|
|
||||
|
|
||||
|
protected: |
||||
|
virtual void printToStream(std::ostream& stream) const override; |
||||
|
|
||||
|
private: |
||||
|
std::string identifier; |
||||
|
std::vector<std::shared_ptr<BaseExpression const>> arguments; |
||||
|
}; |
||||
|
} |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue