#ifndef STORM_JANIPARSER_H #define STORM_JANIPARSER_H #include "src/exceptions/FileIoException.h" #include "src/storage/expressions/ExpressionManager.h" // JSON parser #include "json.hpp" using json = nlohmann::json; namespace storm { namespace jani { class Model; class Automaton; class Variable; class Composition; } namespace parser { class JaniParser { json parsedStructure; std::shared_ptr expressionManager; public: JaniParser() : expressionManager(new storm::expressions::ExpressionManager()) {} JaniParser(std::string& jsonstring); static storm::jani::Model parse(std::string const& path); protected: void readFile(std::string const& path); storm::jani::Model parseModel(); storm::jani::Automaton parseAutomaton(json const& automatonStructure); std::shared_ptr parseVariable(json const& variableStructure, std::string const& scopeDescription, bool prefWithScope = false); storm::expressions::Expression parseExpression(json const& expressionStructure, std::string const& scopeDescription, std::unordered_map> const& localVars = std::unordered_map>()); private: /** * Helper for parsing the actions of a model. */ void parseActions(json const& actionStructure, storm::jani::Model& parentModel); std::shared_ptr parseComposition(json const& compositionStructure); }; } } #endif //STORM_JANIPARSER_H