diff --git a/src/storm-dft/parser/DFTJsonParser.cpp b/src/storm-dft/parser/DFTJsonParser.cpp index 0d6f312f2..6a8197fee 100644 --- a/src/storm-dft/parser/DFTJsonParser.cpp +++ b/src/storm-dft/parser/DFTJsonParser.cpp @@ -82,7 +82,7 @@ namespace storm { } else if (type == "or") { success = builder.addOrElement(name, childNames); } else if (type == "vot") { - std::string votThreshold = data.at("voting"); + std::string votThreshold = parseJsonNumber(data.at("voting")); success = builder.addVotElement(name, boost::lexical_cast(votThreshold), childNames); } else if (type == "pand") { success = builder.addPandElement(name, childNames); @@ -95,11 +95,11 @@ namespace storm { } else if (type== "fdep") { success = builder.addDepElement(name, childNames, storm::utility::one()); } else if (type== "pdep") { - ValueType probability = parseRationalExpression(data.at("prob")); + ValueType probability = parseRationalExpression(parseJsonNumber(data.at("prob"))); success = builder.addDepElement(name, childNames, probability); } else if (type == "be") { - ValueType failureRate = parseRationalExpression(data.at("rate")); - ValueType dormancyFactor = parseRationalExpression(data.at("dorm")); + ValueType failureRate = parseRationalExpression(parseJsonNumber(data.at("rate"))); + ValueType dormancyFactor = parseRationalExpression(parseJsonNumber(data.at("dorm"))); bool transient = false; if (data.count("transient") > 0) { transient = data.at("transient"); @@ -123,12 +123,23 @@ namespace storm { STORM_LOG_THROW(success, storm::exceptions::FileIoException, "Error while adding element '" << element << "'."); } - std::string toplevelName = nameMapping[parsedJson.at("toplevel")]; + std::string toplevelName = nameMapping[parseJsonNumber(parsedJson.at("toplevel"))]; if(!builder.setTopLevel(toplevelName)) { STORM_LOG_THROW(false, storm::exceptions::FileIoException, "Top level id unknown."); } } + template + std::string DFTJsonParser::parseJsonNumber(json number) { + if (number.is_string()) { + return number.get(); + } else { + std::stringstream stream; + stream << number; + return stream.str(); + } + } + template ValueType DFTJsonParser::parseRationalExpression(std::string const& expr) { STORM_LOG_ASSERT(false, "Specialized method should be called."); diff --git a/src/storm-dft/parser/DFTJsonParser.h b/src/storm-dft/parser/DFTJsonParser.h index 3b6812a76..6100d69dc 100644 --- a/src/storm-dft/parser/DFTJsonParser.h +++ b/src/storm-dft/parser/DFTJsonParser.h @@ -41,6 +41,8 @@ namespace storm { std::string generateUniqueName(std::string const& id, std::string const& name); ValueType parseRationalExpression(std::string const& expr); + + std::string parseJsonNumber(json number); }; } }