32 if (general.isVerboseSet()) {
35 if (general.isDebugOutputSet()) {
38 if (general.isTraceOutputSet()) {
58 auto conversionTime =
startStopwatch(
"Converting PRISM Program to JANI model ... ");
67 std::string outputFilename =
"";
68 if (output.isJaniOutputFilenameSet()) {
69 outputFilename = output.getJaniOutputFilename();
70 }
else if (input.isPrismInputSet()) {
71 outputFilename = input.getPrismInputFilename();
73 auto dotPos = outputFilename.rfind(
'.');
74 if (dotPos != std::string::npos) {
75 outputFilename.erase(dotPos);
77 std::string suffix =
"";
78 if (input.isConstantsSet()) {
79 suffix = input.getConstantDefinitionString();
80 std::replace(suffix.begin(), suffix.end(),
',',
'_');
81 std::replace(suffix.begin(), suffix.end(),
'=',
'-');
83 suffix = suffix +
".jani";
84 outputFilename += suffix;
88 auto startOfFilename = outputFilename.rfind(
"/");
89 if (startOfFilename == std::string::npos) {
94 auto endOfFilename = outputFilename.rfind(
".");
95 if (endOfFilename == std::string::npos) {
96 endOfFilename = outputFilename.size();
98 options.
janiOptions.
modelName = outputFilename.substr(startOfFilename, endOfFilename - startOfFilename);
105 if (outputFilename !=
"") {
118 auto conversionTime =
startStopwatch(
"Processing Prism Program ... ");
121 std::string outputFilename =
"";
122 if (output.isPrismOutputFilenameSet()) {
123 outputFilename = output.getPrismOutputFilename();
124 }
else if (input.isPrismInputSet()) {
125 outputFilename = input.getPrismInputFilename();
127 auto dotPos = outputFilename.rfind(
'.');
128 if (dotPos != std::string::npos) {
129 outputFilename.erase(dotPos);
131 std::string suffix =
"";
132 if (input.isConstantsSet()) {
133 suffix = input.getConstantDefinitionString();
134 std::replace(suffix.begin(), suffix.end(),
',',
'_');
135 std::replace(suffix.begin(), suffix.end(),
'=',
'-');
137 suffix +=
"_converted.prism";
138 outputFilename += suffix;
142 std::vector<storm::jani::Property> outputProperties = properties;
146 auto exportingTime =
startStopwatch(
"Exporting Prism program ... ");
148 if (outputFilename !=
"") {
165 std::vector<storm::jani::Property> properties;
166 if (input.isPropertyInputSet()) {
172 std::string constantDefinitionString = input.getConstantDefinitionString();
182 if (output.isJaniOutputSet()) {
184 }
else if (output.isPrismOutputSet()) {
188 "There is either no outputformat specified or the provided combination of input and output format is not compatible.");
193 auto conversionTime =
startStopwatch(
"Performing transformations on JANI model ... ");
202 std::string outputFilename =
"";
203 if (output.isJaniOutputFilenameSet()) {
204 outputFilename = output.getJaniOutputFilename();
205 }
else if (input.isJaniInputSet()) {
206 outputFilename = input.getJaniInputFilename();
208 auto dotPos = outputFilename.rfind(
'.');
209 if (dotPos != std::string::npos) {
210 outputFilename.erase(dotPos);
212 outputFilename +=
"_converted.jani";
216 auto startOfFilename = outputFilename.rfind(
"/");
217 if (startOfFilename == std::string::npos) {
222 auto endOfFilename = outputFilename.rfind(
".");
223 if (endOfFilename == std::string::npos) {
224 endOfFilename = outputFilename.size();
226 options.
modelName = outputFilename.substr(startOfFilename, endOfFilename - startOfFilename);
228 auto transformedJaniModel = janiModel;
229 auto transformedProperties = properties;
235 if (outputFilename !=
"") {
249 boost::optional<std::vector<std::string>> janiPropertyFilter;
250 if (input.isJaniPropertiesSet()) {
251 if (input.areJaniPropertiesSelected()) {
252 janiPropertyFilter = input.getSelectedJaniProperties();
254 janiPropertyFilter = boost::none;
257 if (input.isPropertyInputSet()) {
258 janiPropertyFilter = std::vector<std::string>();
261 janiPropertyFilter = boost::none;
267 std::vector<storm::jani::Property> properties = std::move(janiModelProperties.second);
268 if (input.isPropertyInputSet()) {
271 properties.insert(properties.end(), additionalProperties.begin(), additionalProperties.end());
277 std::string constantDefinitionString = input.getConstantDefinitionString();
279 auto janiModel = janiModelProperties.first.defineUndefinedConstants(constantDefinitions).substituteConstants();
280 if (!properties.empty()) {
287 if (output.isJaniOutputSet()) {
290 STORM_LOG_THROW(!output.isPrismOutputSet(), storm::exceptions::InvalidSettingsException,
"Conversion from Jani to Prism is not supported.");
292 "There is either no outputformat specified or the provided combination of input and output format is not compatible.");
303 STORM_LOG_THROW(!(input.isPrismInputSet() && input.isJaniInputSet()), storm::exceptions::InvalidSettingsException,
"Multiple input options were set.");
304 if (input.isPrismInputSet()) {
306 }
else if (input.isJaniInputSet()) {
316 }
catch (storm::exceptions::OptionParserException& e) {
317 STORM_LOG_ERROR(
"Unable to parse command line options. Type '" + std::string(argv[0]) +
" --help' or '" + std::string(argv[0]) +
318 " --help all' for help.");
325 if (general.isConfigSet()) {
330 if (general.isHelpSet()) {
335 if (general.isVersionSet()) {
346int main(
const int argc,
const char** argv) {
361 STORM_LOG_ERROR(
"An exception caused Storm-conv to terminate. The message of the exception is: " << exception.
what());
363 }
catch (std::exception
const& exception) {
364 STORM_LOG_ERROR(
"An unexpected exception occurred and caused Storm-conv to terminate. The message of this exception is: " << exception.
what());
This class represents the base class of all exception classes.
virtual const char * what() const NOEXCEPT override
Retrieves the message associated with this exception.
Program defineUndefinedConstants(std::map< storm::expressions::Variable, storm::expressions::Expression > const &constantDefinitions) const
Defines the undefined constants according to the given map and returns the resulting program.
void setFromCommandLine(int const argc, char const *const argv[])
This function parses the given command line arguments and sets all registered options accordingly.
void setFromConfigurationFile(std::string const &configFilename)
This function parses the given file and sets all registered options accordingly.
void printHelp(std::string const &filter="frequent") const
This function prints a help message to the standard output.
std::map< storm::expressions::Variable, storm::expressions::Expression > parseConstantDefinitions(std::string const &constantDefinitionString) const
storm::prism::Program const & asPrismProgram() const
A class that provides convenience operations to display run times.
void stop()
Stop stopwatch and add measured time to total time.
#define STORM_LOG_ERROR(message)
#define STORM_LOG_THROW(cond, exception, message)
#define STORM_PRINT_AND_LOG(message)
storm::prism::Program parseProgram(std::string const &filename, bool prismCompatibility, bool simplify)
void transformPrism(storm::prism::Program &prismProgram, std::vector< storm::jani::Property > &properties, bool simplify, bool flatten)
std::pair< storm::jani::Model, std::vector< storm::jani::Property > > parseJaniModel(std::string const &filename, boost::optional< std::vector< std::string > > const &propertyFilter)
void exportJaniToFile(storm::jani::Model const &model, std::vector< storm::jani::Property > const &properties, std::string const &filename, bool compact)
std::vector< storm::jani::Property > parsePropertiesForSymbolicModelDescription(std::string const &inputString, storm::storage::SymbolicModelDescription const &modelDescription, boost::optional< std::set< std::string > > const &propertyFilter)
void transformJani(storm::jani::Model &janiModel, std::vector< storm::jani::Property > &properties, storm::converter::JaniConversionOptions const &options)
boost::optional< std::set< std::string > > parsePropertyFilter(std::string const &propertyFilter)
std::pair< storm::jani::Model, std::vector< storm::jani::Property > > convertPrismToJani(storm::prism::Program const &program, storm::converter::PrismToJaniConverterOptions options)
void exportPrismToFile(storm::prism::Program const &program, std::vector< storm::jani::Property > const &properties, std::string const &filename)
std::vector< storm::jani::Property > substituteConstantsInProperties(std::vector< storm::jani::Property > const &properties, std::map< storm::expressions::Variable, storm::expressions::Expression > const &substitution)
void printHeader(std::string const &name, const int argc, const char **argv)
storm::utility::Stopwatch startStopwatch(std::string const &message)
void processPrismInputJaniOutput(storm::prism::Program const &prismProg, std::vector< storm::jani::Property > const &properties)
void processPrismInputPrismOutput(storm::prism::Program const &prismProg, std::vector< storm::jani::Property > const &properties)
void stopStopwatch(storm::utility::Stopwatch &stopWatch)
void processJaniInputJaniOutput(storm::jani::Model const &janiModel, std::vector< storm::jani::Property > const &properties)
ModelFeatures getAllKnownModelFeatures()
void initializeConvSettings(std::string const &name, std::string const &executableName)
SettingsType const & getModule()
Get module.
SettingsManager const & manager()
Retrieves the settings manager.
SettingsManager & mutableManager()
Retrieves the settings manager.
void cleanUp()
Performs some necessary clean-up.
void setLogLevel(l3pp::LogLevel level)
Set the global log level.
void setUp()
Performs some necessary initializations.
bool parseOptions(const int argc, const char *argv[])
int main(const int argc, const char **argv)
Main entry point of the executable storm-conv.
boost::optional< std::string > modelName
If given, the model will get this name.
bool substituteConstants
If set, constants in expressions are substituted with their definition.
JaniConversionOptions janiOptions