You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

53 lines
2.5 KiB

#pragma once
#include <set>
#include "storm/storage/dd/DdType.h"
#include "storm/storage/expressions/ExpressionVisitor.h"
#include "storm/storage/expressions/EquivalenceChecker.h"
#include "storm/solver/SmtSolver.h"
namespace storm {
namespace dd {
template<storm::dd::DdType DdType>
class Bdd;
}
namespace expressions {
class Expression;
}
namespace abstraction {
template<storm::dd::DdType DdType>
class AbstractionInformation;
template <storm::dd::DdType DdType>
class ExpressionTranslator : public storm::expressions::ExpressionVisitor {
public:
ExpressionTranslator(AbstractionInformation<DdType>& abstractionInformation, std::unique_ptr<storm::solver::SmtSolver>&& smtSolver);
storm::dd::Bdd<DdType> translate(storm::expressions::Expression const& expression);
virtual boost::any visit(storm::expressions::IfThenElseExpression const& expression, boost::any const& data);
virtual boost::any visit(storm::expressions::BinaryBooleanFunctionExpression const& expression, boost::any const& data);
virtual boost::any visit(storm::expressions::BinaryNumericalFunctionExpression const& expression, boost::any const& data);
virtual boost::any visit(storm::expressions::BinaryRelationExpression const& expression, boost::any const& data);
virtual boost::any visit(storm::expressions::VariableExpression const& expression, boost::any const& data);
virtual boost::any visit(storm::expressions::UnaryBooleanFunctionExpression const& expression, boost::any const& data);
virtual boost::any visit(storm::expressions::UnaryNumericalFunctionExpression const& expression, boost::any const& data);
virtual boost::any visit(storm::expressions::BooleanLiteralExpression const& expression, boost::any const& data);
virtual boost::any visit(storm::expressions::IntegerLiteralExpression const& expression, boost::any const& data);
virtual boost::any visit(storm::expressions::RationalLiteralExpression const& expression, boost::any const& data);
private:
std::reference_wrapper<AbstractionInformation<DdType>> abstractionInformation;
storm::expressions::EquivalenceChecker equivalenceChecker;
std::set<storm::expressions::Variable> locationVariables;
std::set<storm::expressions::Variable> abstractedVariables;
};
}
}