You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
3.2 KiB
82 lines
3.2 KiB
#pragma once
|
|
|
|
#include <string>
|
|
#include <cstdint>
|
|
#include <boost/optional.hpp>
|
|
|
|
#include "storm-parsers/parser/MappedFile.h"
|
|
#include "storm/models/sparse/StateLabeling.h"
|
|
#include "storm/models/sparse/ChoiceLabeling.h"
|
|
|
|
|
|
namespace storm {
|
|
namespace parser {
|
|
|
|
/*!
|
|
* This class can be used to parse a labeling file.
|
|
*/
|
|
class SparseItemLabelingParser {
|
|
|
|
public:
|
|
|
|
/*!
|
|
* Parses the given file and returns the resulting state labeling.
|
|
*
|
|
* @param stateCount The number of states of the model to be labeled.
|
|
* @param filename The path and name of the labeling (.lab) file.
|
|
* @return The parsed labeling as a StateLabeling object.
|
|
*/
|
|
static storm::models::sparse::StateLabeling parseAtomicPropositionLabeling(uint_fast64_t stateCount, std::string const &filename);
|
|
|
|
/*!
|
|
* Parses the given file and returns the resulting choice labeling.
|
|
*
|
|
* @param choiceCount the number of choices of the model.
|
|
* @param filename The name of the file to parse.
|
|
* @param nondeterministicChoiceIndices if given, the choices are assumed to be nondeterministic, i.e.,
|
|
* a choice is specified by a tuple of state index and (local) choice index.
|
|
* @return The resulting choice labeling.
|
|
*/
|
|
static storm::models::sparse::ChoiceLabeling parseChoiceLabeling(uint_fast64_t choiceCount, std::string const& filename, boost::optional<std::vector<uint_fast64_t>> const& nondeterministicChoiceIndices = boost::none);
|
|
|
|
private:
|
|
|
|
/*!
|
|
* Perform syntax checks of the file
|
|
* @param file The mapped file
|
|
*/
|
|
static void checkSyntax(std::string const & filename, storm::parser::MappedFile const& file);
|
|
|
|
/*!
|
|
* Parses the file header (i.e. the #DECLARATION ... #END construct) and adds the label names to the given labeling
|
|
*
|
|
* @param labeling the labeling to which label names are added
|
|
* @param buf the reference to the file contents
|
|
*/
|
|
static void parseLabelNames(std::string const & filename, storm::models::sparse::ItemLabeling& labeling, char const*& buf);
|
|
|
|
|
|
/*!
|
|
* Parses the label assignments assuming that each item is uniquely specified by a single index, e.g.,
|
|
* * 42 label1 label2 label3
|
|
*
|
|
* @param labeling the labeling to which file assignments are added
|
|
* @param buf the reference to the file contents
|
|
*/
|
|
static void parseDeterministicLabelAssignments(std::string const & filename, storm::models::sparse::ItemLabeling& labeling, char const*& buf);
|
|
|
|
/*!
|
|
* Parses the label assignments assuming that each item is specified by a tuple of indices, e.g.,
|
|
* * 42 0 label1 label2
|
|
* * 42 1 label2 label3
|
|
*
|
|
* @param labeling the labeling to which file assignments are added
|
|
* @param nondeterministicChoiceIndices The indices at which the choices of the states begin.
|
|
* @param buf the reference to the file contents
|
|
*/
|
|
static void parseNonDeterministicLabelAssignments(std::string const & filename, storm::models::sparse::ChoiceLabeling& labeling, std::vector<uint_fast64_t> const& nondeterministicChoiceIndices, char const*& buf);
|
|
|
|
};
|
|
|
|
} // namespace parser
|
|
} // namespace storm
|