Browse Source

translate prism to jani with a suffix for location names etc when doing this for multiple models

main
Sebastian Junges 7 years ago
parent
commit
1c9f7b0f2f
  1. 8
      src/storm/storage/prism/Program.cpp
  2. 4
      src/storm/storage/prism/Program.h
  3. 8
      src/storm/storage/prism/ToJaniConverter.cpp
  4. 2
      src/storm/storage/prism/ToJaniConverter.h

8
src/storm/storage/prism/Program.cpp

@ -1711,16 +1711,16 @@ namespace storm {
return Command(newCommandIndex, false, actionIndex, actionName, newGuard, newUpdates, this->getFilename(), 0); return Command(newCommandIndex, false, actionIndex, actionName, newGuard, newUpdates, this->getFilename(), 0);
} }
storm::jani::Model Program::toJani(bool allVariablesGlobal) const {
storm::jani::Model Program::toJani(bool allVariablesGlobal, std::string suffix) const {
ToJaniConverter converter; ToJaniConverter converter;
storm::jani::Model resultingModel = converter.convert(*this, allVariablesGlobal);
storm::jani::Model resultingModel = converter.convert(*this, allVariablesGlobal, suffix);
STORM_LOG_WARN_COND(!converter.labelsWereRenamed(), "Labels were renamed in PRISM-to-JANI conversion, but the mapping is not stored."); STORM_LOG_WARN_COND(!converter.labelsWereRenamed(), "Labels were renamed in PRISM-to-JANI conversion, but the mapping is not stored.");
return resultingModel; return resultingModel;
} }
std::pair<storm::jani::Model, std::map<std::string, std::string>> Program::toJaniWithLabelRenaming(bool allVariablesGlobal) const {
std::pair<storm::jani::Model, std::map<std::string, std::string>> Program::toJaniWithLabelRenaming(bool allVariablesGlobal, std::string suffix) const {
ToJaniConverter converter; ToJaniConverter converter;
storm::jani::Model resultingModel = converter.convert(*this, allVariablesGlobal);
storm::jani::Model resultingModel = converter.convert(*this, allVariablesGlobal, suffix);
return std::make_pair(resultingModel, converter.getLabelRenaming()); return std::make_pair(resultingModel, converter.getLabelRenaming());
} }

4
src/storm/storage/prism/Program.h

@ -603,13 +603,13 @@ namespace storm {
/*! /*!
* Converts the PRISM model into an equivalent JANI model. * Converts the PRISM model into an equivalent JANI model.
*/ */
storm::jani::Model toJani(bool allVariablesGlobal = false) const;
storm::jani::Model toJani(bool allVariablesGlobal = false, std::string suffix = "") const;
/*! /*!
* Converts the PRISM model into an equivalent JANI model and retrieves possible label renamings that had * Converts the PRISM model into an equivalent JANI model and retrieves possible label renamings that had
* to be performed in the process. * to be performed in the process.
*/ */
std::pair<storm::jani::Model, std::map<std::string, std::string>> toJaniWithLabelRenaming(bool allVariablesGlobal = false) const;
std::pair<storm::jani::Model, std::map<std::string, std::string>> toJaniWithLabelRenaming(bool allVariablesGlobal = false, std::string suffix = "") const;
private: private:
/*! /*!

8
src/storm/storage/prism/ToJaniConverter.cpp

@ -13,7 +13,7 @@
namespace storm { namespace storm {
namespace prism { namespace prism {
storm::jani::Model ToJaniConverter::convert(storm::prism::Program const& program, bool allVariablesGlobal) {
storm::jani::Model ToJaniConverter::convert(storm::prism::Program const& program, bool allVariablesGlobal, std::string suffix) {
std::shared_ptr<storm::expressions::ExpressionManager> manager = program.getManager().getSharedPointer(); std::shared_ptr<storm::expressions::ExpressionManager> manager = program.getManager().getSharedPointer();
// Start by creating an empty JANI model. // Start by creating an empty JANI model.
@ -95,11 +95,11 @@ namespace storm {
} }
} }
// Go through the labels and construct assignments to transient variables that are added to the loctions.
// Go through the labels and construct assignments to transient variables that are added to the locations.
std::vector<storm::jani::Assignment> transientLocationAssignments; std::vector<storm::jani::Assignment> transientLocationAssignments;
for (auto const& label : program.getLabels()) { for (auto const& label : program.getLabels()) {
bool renameLabel = manager->hasVariable(label.getName()) || program.hasRewardModel(label.getName()); bool renameLabel = manager->hasVariable(label.getName()) || program.hasRewardModel(label.getName());
std::string finalLabelName = renameLabel ? "label_" + label.getName() : label.getName();
std::string finalLabelName = renameLabel ? "label_" + label.getName() + suffix : label.getName();
if (renameLabel) { if (renameLabel) {
STORM_LOG_WARN_COND(!renameLabel, "Label '" << label.getName() << "' was renamed to '" << finalLabelName << "' in PRISM-to-JANI conversion, as another variable with that name already exists."); STORM_LOG_WARN_COND(!renameLabel, "Label '" << label.getName() << "' was renamed to '" << finalLabelName << "' in PRISM-to-JANI conversion, as another variable with that name already exists.");
labelRenaming[label.getName()] = finalLabelName; labelRenaming[label.getName()] = finalLabelName;
@ -161,7 +161,7 @@ namespace storm {
// Keep track of the action indices contained in this module. // Keep track of the action indices contained in this module.
std::set<uint_fast64_t> actionIndicesOfModule; std::set<uint_fast64_t> actionIndicesOfModule;
storm::jani::Automaton automaton(module.getName(), manager->declareIntegerVariable("_loc_prism2jani_" + module.getName()));
storm::jani::Automaton automaton(module.getName(), manager->declareIntegerVariable("_loc_prism2jani_" + module.getName() + "_" + suffix));
for (auto const& variable : module.getIntegerVariables()) { for (auto const& variable : module.getIntegerVariables()) {
storm::jani::BoundedIntegerVariable newIntegerVariable = *storm::jani::makeBoundedIntegerVariable(variable.getName(), variable.getExpressionVariable(), variable.hasInitialValue() ? boost::make_optional(variable.getInitialValueExpression()) : boost::none, false, variable.getLowerBoundExpression(), variable.getUpperBoundExpression()); storm::jani::BoundedIntegerVariable newIntegerVariable = *storm::jani::makeBoundedIntegerVariable(variable.getName(), variable.getExpressionVariable(), variable.hasInitialValue() ? boost::make_optional(variable.getInitialValueExpression()) : boost::none, false, variable.getLowerBoundExpression(), variable.getUpperBoundExpression());
std::set<uint_fast64_t> const& accessingModuleIndices = variablesToAccessingModuleIndices[variable.getExpressionVariable()]; std::set<uint_fast64_t> const& accessingModuleIndices = variablesToAccessingModuleIndices[variable.getExpressionVariable()];

2
src/storm/storage/prism/ToJaniConverter.h

@ -14,7 +14,7 @@ namespace storm {
class ToJaniConverter { class ToJaniConverter {
public: public:
storm::jani::Model convert(storm::prism::Program const& program, bool allVariablesGlobal = false);
storm::jani::Model convert(storm::prism::Program const& program, bool allVariablesGlobal = false, std::string suffix = "");
bool labelsWereRenamed() const; bool labelsWereRenamed() const;
std::map<std::string, std::string> const& getLabelRenaming() const; std::map<std::string, std::string> const& getLabelRenaming() const;

Loading…
Cancel
Save