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.
114 lines
4.5 KiB
114 lines
4.5 KiB
/*
|
|
* File: Statement.h
|
|
* Author: Lukas Westhofen
|
|
*
|
|
* Created on 11. April 2015, 17:41
|
|
*/
|
|
|
|
#ifndef STATEMENT_H
|
|
#define STATEMENT_H
|
|
|
|
#include <cstdint>
|
|
#include <memory>
|
|
#include "boost/optional/optional.hpp"
|
|
|
|
namespace storm {
|
|
namespace pgcl {
|
|
class PgclProgram;
|
|
/**
|
|
* A PGCL program consists of various statements. Statements can again
|
|
* save lists of statements as their children. To make life easier, the
|
|
* line number where that statement was parsed is stored. Additionaly,
|
|
* a unique non-negative index identifier (the location number) is
|
|
* saved.
|
|
*/
|
|
class Statement {
|
|
public:
|
|
Statement() = default;
|
|
Statement(const Statement& orig) = default;
|
|
virtual ~Statement() = default;
|
|
/**
|
|
* Returns true iff the statements are equal, thus having the same
|
|
* location number.
|
|
* @param other The other statement to check equality of.
|
|
* @return True iff the statements are equal.
|
|
*/
|
|
const bool operator==(const Statement& other) const;
|
|
/**
|
|
* Returns the line number inside the string where the PGCL program
|
|
* was parsed from.
|
|
* @return The line number of the statement.
|
|
*/
|
|
std::size_t getLineNumber();
|
|
/**
|
|
* Sets the line number during the parsing process.
|
|
* @param lineNumber The location number of the statement.
|
|
*/
|
|
void setLineNumber(std::size_t lineNumber);
|
|
/**
|
|
* Returns the unique location number of the statement.
|
|
* @return The line number of the statement.
|
|
*/
|
|
std::size_t getLocationNumber();
|
|
/**
|
|
* Sets the unique location number of the statement.
|
|
* @param lineNumber The location number of the statement.
|
|
*/
|
|
void setLocationNumber(std::size_t locationNumber);
|
|
/**
|
|
* Returns true if the statement is the last of its direct parent
|
|
* program.
|
|
* @return true Whether the statement is the last statement.
|
|
*/
|
|
bool isLast();
|
|
/**
|
|
* Sets the information whether the statement is the last of its
|
|
* direct parent program.
|
|
* @param isLast Whether the statement is the last statement.
|
|
*/
|
|
void setLast(bool isLast);
|
|
/**
|
|
* Returns wether the statements represents nondeterminism.
|
|
*/
|
|
virtual bool isNondet();
|
|
/**
|
|
* Returns the number of transitions this statement will produce.
|
|
*/
|
|
virtual std::size_t getNumberOfOutgoingTransitions();
|
|
virtual void accept(class AbstractStatementVisitor&) = 0;
|
|
/**
|
|
* Sets the parent program of the statement.
|
|
* @param parentProgram The parent program of the statement.
|
|
*/
|
|
void setParentProgram(std::shared_ptr<storm::pgcl::PgclProgram> parentProgram);
|
|
/**
|
|
* Returns the parent program of the statement.
|
|
* @return The parent program of the statement.
|
|
*/
|
|
boost::optional<std::shared_ptr<storm::pgcl::PgclProgram> > getParentProgram();
|
|
/**
|
|
* Sets the parent statement of the statement.
|
|
* @param parentProgram The parent statement of the statement.
|
|
*/
|
|
void setParentStatement(std::shared_ptr<storm::pgcl::Statement> parentStatement);
|
|
/**
|
|
* Returns the parent statement of the statement.
|
|
* @return The parent statement of the statement.
|
|
*/
|
|
boost::optional<std::shared_ptr<storm::pgcl::Statement> > getParentStatement();
|
|
protected:
|
|
/// The parent program of the statement.
|
|
boost::optional<std::shared_ptr<storm::pgcl::PgclProgram> > parentProgram;
|
|
/// The parent program of the statement.
|
|
boost::optional<std::shared_ptr<storm::pgcl::Statement> > parentStatement;
|
|
/// Represents the line number of the statement.
|
|
std::size_t lineNumber = 0;
|
|
/// Represents the unique statement location.
|
|
std::size_t locationNumber = 0;
|
|
/// If set to true, the statement is the last one of its (sub)program.
|
|
bool last = false;
|
|
};
|
|
}
|
|
}
|
|
#endif /* STATEMENT_H */
|
|
|