Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
model_descriptions.cpp
Go to the documentation of this file.
2
5
7
10
13
14namespace storm {
15namespace api {
16
17storm::prism::Program parseProgram(std::string const& filename, bool prismCompatibility, bool simplify) {
18 storm::prism::Program program = storm::parser::PrismParser::parse(filename, prismCompatibility);
19 if (simplify) {
20 program = program.simplify().simplify();
21 }
22 program.checkValidity();
23 return program;
24}
25
26std::pair<storm::jani::Model, std::vector<storm::jani::Property>> filterProperties(
27 std::pair<storm::jani::Model, std::vector<storm::jani::Property>>& modelAndFormulae, boost::optional<std::vector<std::string>> const& propertyFilter) {
28 // eliminate unselected properties.
29 if (propertyFilter.is_initialized()) {
30 std::vector<storm::jani::Property> newProperties;
31 // Make sure to preserve the provided order
32 for (auto const& propName : propertyFilter.get()) {
33 bool found = false;
34 for (auto const& property : modelAndFormulae.second) {
35 if (property.getName() == propName) {
36 newProperties.push_back(std::move(property));
37 found = true;
38 break;
39 }
40 }
41 STORM_LOG_ERROR_COND(found, "No JANI property with name '" << propName << "' is known.");
42 }
43 modelAndFormulae.second = std::move(newProperties);
44 }
45 modelAndFormulae.first.checkValid();
46 return modelAndFormulae;
47}
48
49std::pair<storm::jani::Model, std::vector<storm::jani::Property>> parseJaniModel(std::string const& filename,
50 boost::optional<std::vector<std::string>> const& propertyFilter) {
51 bool parseProperties = !propertyFilter.is_initialized() || !propertyFilter.get().empty();
53 filterProperties(modelAndFormulae, propertyFilter);
54 modelAndFormulae.second = storm::api::substituteConstantsInProperties(modelAndFormulae.second, modelAndFormulae.first.getConstantsSubstitution());
55 return modelAndFormulae;
56}
57
58std::pair<storm::jani::Model, std::vector<storm::jani::Property>> parseJaniModelFromString(std::string const& jsonstring,
59 boost::optional<std::vector<std::string>> const& propertyFilter) {
60 bool parseProperties = !propertyFilter.is_initialized() || !propertyFilter.get().empty();
62 filterProperties(modelAndFormulae, propertyFilter);
63 modelAndFormulae.second = storm::api::substituteConstantsInProperties(modelAndFormulae.second, modelAndFormulae.first.getConstantsSubstitution());
64 return modelAndFormulae;
65}
66
67std::pair<storm::jani::Model, std::vector<storm::jani::Property>> parseJaniModel(std::string const& filename,
68 storm::jani::ModelFeatures const& supportedFeatures,
69 boost::optional<std::vector<std::string>> const& propertyFilter) {
70 auto modelAndFormulae = parseJaniModel(filename, propertyFilter);
71 simplifyJaniModel(modelAndFormulae.first, modelAndFormulae.second, supportedFeatures);
72 return modelAndFormulae;
73}
74
75std::pair<storm::jani::Model, std::vector<storm::jani::Property>> parseJaniModelFromString(std::string const& jsonstring,
76 storm::jani::ModelFeatures const& supportedFeatures,
77 boost::optional<std::vector<std::string>> const& propertyFilter) {
78 auto modelAndFormulae = parseJaniModelFromString(jsonstring, propertyFilter);
79 simplifyJaniModel(modelAndFormulae.first, modelAndFormulae.second, supportedFeatures);
80 return modelAndFormulae;
81}
82
83void simplifyJaniModel(storm::jani::Model& model, std::vector<storm::jani::Property>& properties, storm::jani::ModelFeatures const& supportedFeatures) {
84 auto nonEliminatedFeatures = model.restrictToFeatures(supportedFeatures, properties);
85 STORM_LOG_THROW(nonEliminatedFeatures.empty(), storm::exceptions::NotSupportedException,
86 "The used model feature(s) " << nonEliminatedFeatures.toString() << " is/are not in the list of supported features.");
87}
88
89} // namespace api
90} // namespace storm
ModelFeatures restrictToFeatures(ModelFeatures const &modelFeatures)
Attempts to eliminate all features of this model that are not in the given set of features.
Definition Model.cpp:1243
static std::pair< storm::jani::Model, std::vector< storm::jani::Property > > parseFromString(std::string const &jsonstring, bool parseProperties=true)
static std::pair< storm::jani::Model, std::vector< storm::jani::Property > > parse(std::string const &path, bool parseProperties=true)
static storm::prism::Program parse(std::string const &filename, bool prismCompatability=false)
Parses the given file into the PRISM storage classes assuming it complies with the PRISM syntax.
void checkValidity(Program::ValidityCheckLevel lvl=Program::ValidityCheckLevel::READYFORPROCESSING) const
Checks the validity of the program.
Definition Program.cpp:1226
Program simplify()
Entry point for static analysis for simplify.
Definition Program.cpp:1803
#define STORM_LOG_ERROR_COND(cond, message)
Definition macros.h:52
#define STORM_LOG_THROW(cond, exception, message)
Definition macros.h:30
std::pair< storm::jani::Model, std::vector< storm::jani::Property > > filterProperties(std::pair< storm::jani::Model, std::vector< storm::jani::Property > > &modelAndFormulae, boost::optional< std::vector< std::string > > const &propertyFilter)
storm::prism::Program parseProgram(std::string const &filename, bool prismCompatibility, bool simplify)
std::pair< storm::jani::Model, std::vector< storm::jani::Property > > parseJaniModel(std::string const &filename, boost::optional< std::vector< std::string > > const &propertyFilter)
std::vector< storm::jani::Property > parseProperties(storm::parser::FormulaParser &formulaParser, std::string const &inputString, boost::optional< std::set< std::string > > const &propertyFilter)
void simplifyJaniModel(storm::jani::Model &model, std::vector< storm::jani::Property > &properties, storm::jani::ModelFeatures const &supportedFeatures)
std::pair< storm::jani::Model, std::vector< storm::jani::Property > > parseJaniModelFromString(std::string const &jsonstring, boost::optional< std::vector< std::string > > const &propertyFilter)
std::vector< storm::jani::Property > substituteConstantsInProperties(std::vector< storm::jani::Property > const &properties, std::map< storm::expressions::Variable, storm::expressions::Expression > const &substitution)
LabParser.cpp.
Definition cli.cpp:18