60 lines
2.7 KiB
60 lines
2.7 KiB
#ifndef STORM_JANIPARSER_H
|
|
#define STORM_JANIPARSER_H
|
|
|
|
#include <src/storage/jani/Constant.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<storm::expressions::ExpressionManager> 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, storm::jani::Model const& parentModel);
|
|
std::shared_ptr<storm::jani::Variable> 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<std::string, std::shared_ptr<storm::jani::Variable>> const& localVars = {});
|
|
private:
|
|
std::shared_ptr<storm::jani::Constant> parseConstant(json const& constantStructure, std::string const& scopeDescription = "global");
|
|
|
|
/**
|
|
* Helper for parsing the actions of a model.
|
|
*/
|
|
void parseActions(json const& actionStructure, storm::jani::Model& parentModel);
|
|
std::vector<storm::expressions::Expression> parseUnaryExpressionArguments(json const& expressionStructure, std::string const& opstring, std::string const& scopeDescription, std::unordered_map<std::string, std::shared_ptr<storm::jani::Variable>> const& localVars = {});
|
|
std::vector<storm::expressions::Expression> parseBinaryExpressionArguments(json const& expressionStructure, std::string const& opstring, std::string const& scopeDescription, std::unordered_map<std::string, std::shared_ptr<storm::jani::Variable>> const& localVars = {});
|
|
|
|
std::shared_ptr<storm::jani::Composition> parseComposition(json const& compositionStructure);
|
|
storm::expressions::Variable getVariableOrConstantExpression(std::string const& ident, std::string const& scopeDescription, std::unordered_map<std::string, std::shared_ptr<storm::jani::Variable>> const& localVars = {});
|
|
|
|
|
|
|
|
};
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#endif //STORM_JANIPARSER_H
|