#ifndef STORM_PARSER_AUTOPARSER_H_ #define STORM_PARSER_AUTOPARSER_H_ #include "src/parser/Parser.h" #include "src/models/AbstractModel.h" #include <memory> #include <iostream> #include <utility> namespace storm { namespace parser { /*! * @brief Checks the given files and parses the model within these files. * * This parser analyzes the format hint in the first line of the transition * file. If this is a valid format, it will use the parser for this format, * otherwise it will throw an exception. * * When the files are parsed successfully, the parsed ModelType and Model * can be obtained via getType() and getModel<ModelClass>(). */ class AutoParser : Parser { public: AutoParser(std::string const & transitionSystemFile, std::string const & labelingFile, std::string const & stateRewardFile = "", std::string const & transitionRewardFile = ""); /*! * @brief Returns the type of model that was parsed. */ storm::models::ModelType getType() { if (this->model) return this->model->getType(); else return storm::models::Unknown; } /*! * @brief Returns the model with the given type. */ template <typename Model> std::shared_ptr<Model> getModel() { return this->model->as<Model>(); } private: /*! * @brief Open file and read file format hint. */ storm::models::ModelType analyzeHint(const std::string& filename); /*! * @brief Pointer to a parser that has parsed the given transition system. */ std::shared_ptr<storm::models::AbstractModel> model; }; } // namespace parser } // namespace storm #endif /* STORM_PARSER_AUTOPARSER_H_ */