Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
storm-gspn.cpp
Go to the documentation of this file.
1#include <boost/algorithm/string.hpp>
2#include <fstream>
3#include <iostream>
4#include <string>
5
18#include "storm/api/storm.h"
32
49
52
53 // parse GSPN from file
54 if (!gspnSettings.isGspnFileSet()) {
55 // If no GSPN file is given, nothing needs to be done.
56 return;
57 }
58
59 std::string constantDefinitionString = "";
60 if (gspnSettings.isConstantsSet()) {
61 constantDefinitionString = gspnSettings.getConstantDefinitionString();
62 }
63
64 auto gspn = storm::parser::GspnParser::parse(gspnSettings.getGspnFilename(), constantDefinitionString);
65
66 std::string formulaString = "";
69 }
70 boost::optional<std::set<std::string>> propertyFilter;
71 storm::parser::FormulaParser formulaParser(gspn->getExpressionManager());
72 std::vector<storm::jani::Property> properties = storm::api::parseProperties(formulaParser, formulaString, propertyFilter);
73 properties = storm::api::substituteConstantsInProperties(properties, gspn->getConstantsSubstitution());
74
75 if (!gspn->isValid()) {
76 STORM_LOG_ERROR("The GSPN is not valid.");
77 }
78
79 if (gspnSettings.isCapacitiesFileSet()) {
80 auto capacities = storm::api::parseCapacitiesList(gspnSettings.getCapacitiesFilename(), *gspn);
81 gspn->setCapacities(capacities);
82 } else if (gspnSettings.isCapacitySet()) {
83 uint64_t capacity = gspnSettings.getCapacity();
84 std::unordered_map<std::string, uint64_t> capacities;
85 for (auto const& place : gspn->getPlaces()) {
86 capacities.emplace(place.getName(), capacity);
87 }
88 gspn->setCapacities(capacities);
89 }
90
92 if (exportSettings.isWriteToDotSet()) {
93 storm::api::exportGspnToDot(*gspn, exportSettings.getWriteToDotFilename());
94 }
95 if (exportSettings.isWriteToPnproSet()) {
96 storm::api::exportGspnToPnpro(*gspn, exportSettings.getWriteToPnproFilename());
97 }
98 if (exportSettings.isWriteToPnmlSet()) {
99 storm::api::exportGspnToPnml(*gspn, exportSettings.getWriteToPnmlFilename());
100 }
101 if (exportSettings.isWriteToJsonSet()) {
102 storm::api::exportGspnToJson(*gspn, exportSettings.getWriteToJsonFilename());
103 }
104 if (exportSettings.isDisplayStatsSet()) {
105 std::cout << "============GSPN Statistics==============\n";
106 storm::api::printGspnStatsToStream(*gspn, std::cout);
107 std::cout << "=========================================\n";
108 }
109 if (exportSettings.isWriteStatsToFileSet()) {
110 storm::api::exportGspnStatsToFile(*gspn, exportSettings.getWriteStatsFilename());
111 }
112 if (exportSettings.isWriteToJaniSet()) {
115 janiOptions.addDeadlockProperties = exportSettings.isAddJaniPropertiesSet();
117 janiOptions.compactJson = janiSettings.isCompactJsonSet();
118 janiOptions.smtSolverFactory = std::make_shared<storm::utility::solver::SmtSolverFactory>();
119 storm::api::exportGspnToJani(*gspn, exportSettings.getWriteToJaniFilename(), janiOptions,
120 [&](storm::builder::JaniGSPNBuilder const&) { return properties; });
121 }
122
123 // construct ma
124 // auto builder = storm::builder::ExplicitGspnModelBuilder<>();
125 // auto ma = builder.translateGspn(gspn, formula);
126
127 delete gspn;
128}
129
130int main(const int argc, const char** argv) {
131 try {
132 return storm::cli::process("Storm-GSPN", "storm-gspn", initializeSettings, processOptions, argc, argv);
133 } catch (storm::exceptions::BaseException const& exception) {
134 STORM_LOG_ERROR("An exception caused Storm to terminate. The message of the exception is: " << exception.what());
135 return 1;
136 } catch (std::exception const& exception) {
137 STORM_LOG_ERROR("An unexpected exception occurred and caused Storm to terminate. The message of this exception is: " << exception.what());
138 return 2;
139 }
140}
This class represents the base class of all exception classes.
virtual const char * what() const noexcept override
Retrieves the message associated with this exception.
static storm::gspn::GSPN * parse(std::string const &filename, std::string const &constantDefinitions="")
static storm::converter::JaniConversionOptions buildJaniConversionOptions()
void setName(std::string const &name, std::string const &executableName)
Sets the name of the tool.
#define STORM_LOG_ERROR(message)
Definition logging.h:36
void exportGspnToJani(storm::gspn::GSPN const &gspn, std::string const &filename, GspnJaniExportOptions const &options, std::function< std::vector< storm::jani::Property >(storm::builder::JaniGSPNBuilder const &)> const &janiPropertyGetter)
void exportGspnToPnpro(storm::gspn::GSPN const &gspn, std::string const &filename)
void exportGspnToPnml(storm::gspn::GSPN const &gspn, std::string const &filename)
void exportGspnToJson(storm::gspn::GSPN const &gspn, std::string const &filename)
void exportGspnToDot(storm::gspn::GSPN const &gspn, std::string const &filename)
std::unordered_map< std::string, uint64_t > parseCapacitiesList(std::string const &filename, storm::gspn::GSPN const &gspn)
void exportGspnStatsToFile(storm::gspn::GSPN const &gspn, std::string const &filename)
std::vector< storm::jani::Property > parseProperties(storm::parser::FormulaParser &formulaParser, std::string const &inputString, boost::optional< std::set< std::string > > const &propertyFilter)
void printGspnStatsToStream(storm::gspn::GSPN const &gspn, std::ostream &out)
std::vector< storm::jani::Property > substituteConstantsInProperties(std::vector< storm::jani::Property > const &properties, std::map< storm::expressions::Variable, storm::expressions::Expression > const &substitution)
int process(std::string const &name, std::string const &executableName, std::function< void(std::string const &, std::string const &)> initSettingsFunc, std::function< void(void)> processOptionsFunc, const int argc, const char **argv)
Processes the options and returns the exit code.
Definition cli.cpp:96
SettingsType const & getModule()
Get module.
void addModule(bool doRegister=true)
Add new module to use for the settings.
SettingsManager & mutableManager()
Retrieves the settings manager.
void processOptions()
Definition storm-cli.cpp:17
void processOptions()
void initializeSettings(std::string const &name, std::string const &executableName)
Initialize the settings manager.
int main(const int argc, const char **argv)
Options for exporting a GSPN as a JANI model.
Definition storm-gspn.h:30
storm::converter::JaniConversionOptions janiConversionOptions
Definition storm-gspn.h:34
std::shared_ptr< storm::utility::solver::SmtSolverFactory > smtSolverFactory
Definition storm-gspn.h:36