#include #include "storm.h" // Headers related to parsing. #include "src/parser/PrismParser.h" #include "src/parser/FormulaParser.h" #include "src/utility/macros.h" #include "src/storage/jani/Property.h" namespace storm { storm::prism::Program parseProgram(std::string const& path) { storm::prism::Program program = storm::parser::PrismParser::parse(path).simplify().simplify(); program.checkValidity(); return program; } std::pair> parseJaniModel(std::string const& path) { std::pair> modelAndFormulae = storm::parser::JaniParser::parse(path); if(!modelAndFormulae.first.checkValidity(true)) { STORM_LOG_THROW(false, storm::exceptions::FileIoException, "Jani file parsing yields invalid model."); } return modelAndFormulae; } /** * Helper * @param FormulaParser * @return The formulas. */ std::vector> parseFormulas(storm::parser::FormulaParser & formulaParser, std::string const& inputString) { // If the given property looks like a file (containing a dot and there exists a file with that name), // we try to parse it as a file, otherwise we assume it's a property. if (inputString.find(".") != std::string::npos && std::ifstream(inputString).good()) { return formulaParser.parseFromFile(inputString); } else { return formulaParser.parseFromString(inputString); } } std::vector> parseFormulasForExplicit(std::string const& inputString) { storm::parser::FormulaParser formulaParser; return parseFormulas(formulaParser, inputString); } std::vector> parseFormulasForJaniModel(std::string const& inputString, storm::jani::Model const& model) { storm::parser::FormulaParser formulaParser(model.getManager().getSharedPointer()); return parseFormulas(formulaParser, inputString); } std::vector> parseFormulasForPrismProgram(std::string const& inputString, storm::prism::Program const& program) { storm::parser::FormulaParser formulaParser(program); return parseFormulas(formulaParser, inputString); } }