12#ifndef MCRL2_MODAL_FORMULA_ADD_BINDING_H
13#define MCRL2_MODAL_FORMULA_ADD_BINDING_H
15#include "mcrl2/lps/add_binding.h"
16#include "mcrl2/modal_formula/state_formula.h"
25template <
template <
class>
class Builder,
class Derived>
59template <
template <
class>
class Builder,
class Derived>
73 static_cast<Derived&>(*
this).enter(x);
74 static_cast<Derived&>(*
this).apply(x
.body());
75 static_cast<Derived&>(*
this).leave(x);
80template <
template <
class>
class Builder,
class Derived>
95 static_cast<Derived&>(*
this).enter(x);
96 result = data::where_clause(
static_cast<Derived&>(*
this).apply(x.body()), declarations);
97 static_cast<Derived&>(*
this).leave(x);
107template <
template <
class>
class Builder,
class Derived>
121template <
template <
class>
class Builder,
class Derived>
135 static_cast<Derived&>(*
this).enter(x);
136 static_cast<Derived&>(*
this).apply(x
.body());
137 static_cast<Derived&>(*
this).leave(x);
142template <
template <
class>
class Builder,
class Derived>
157 static_cast<Derived&>(*
this).enter(x);
158 result = data::where_clause(
static_cast<Derived&>(*
this).apply(x.body()), declarations);
159 static_cast<Derived&>(*
this).leave(x);
169template <
template <
class>
class Builder,
class Derived>
203template <
template <
class>
class Builder,
class Derived>
217 static_cast<Derived&>(*
this).enter(x);
218 static_cast<Derived&>(*
this).apply(x
.body());
219 static_cast<Derived&>(*
this).leave(x);
224template <
template <
class>
class Builder,
class Derived>
239 static_cast<Derived&>(*
this).enter(x);
240 result = data::where_clause(
static_cast<Derived&>(*
this).apply(x.body()), declarations);
241 static_cast<Derived&>(*
this).leave(x);
246template <
template <
class>
class Builder,
class Derived>
aterm_string(const aterm_string &t) noexcept=default
aterm()
Default constructor.
bool operator==(const unprotected_aterm_core &t) const
Comparison operator.
parse_node_unexpected_exception(const parser &p, const parse_node &node)
\brief Assignment of a data expression to a variable
assignment(const variable &lhs, const data_expression &rhs)
\brief Constructor Z14.
const sort_expression & element_sort() const
sort_expression sort() const
Returns the sort of the data expression.
void translate_user_notation()
Translate user notation within the equations of the data specification.
data_equation_vector & user_defined_equations()
data_specification()
Default constructor. Generate a data specification that contains only booleans and positive numbers.
const data_specification operator()() const
Yields a type checked data specification, provided typechecking was successful. If not successful an ...
void operator()(data_equation_vector &eqns)
Yields a type checked equation list, and sets the types in the equations right. If not successful an ...
data_type_checker(const data_specification &data_spec)
make a data type checker. Throws a mcrl2::runtime_error exception if the data_specification is not we...
const data_specification & typechecked_data_specification() const
Identifier generator that stores the identifiers of the context in a set. Using the operator()() and ...
void add_identifier(const core::identifier_string &s) override
Adds the identifier s to the context.
\brief An untyped parameter
const core::identifier_string & name() const
const data_expression_list & arguments() const
const core::identifier_string & name() const
variable(const core::identifier_string &name, const sort_expression &sort)
Constructor.
\brief A where expression
const data_expression & body() const
const assignment_expression_list & declarations() const
logger(const log_level_t l)
Default constructor.
Linear process specification.
Linear process specification.
stochastic_specification(const specification &other)
Constructor. This constructor is explicit as implicit conversions of this kind is a source of bugs.
\brief An untyped multi action or data application
Standard exception class for reporting runtime errors.
std::map< core::identifier_string, data::sort_expression_list > m_state_variables
bool is_declared(const core::identifier_string &name) const
data::sort_expression_list matching_state_variable_sorts(const core::identifier_string &name, const data::data_expression_list &arguments) const
void add_state_variable(const core::identifier_string &name, const data::variable_list ¶meters, const data::sort_type_checker &sort_typechecker)
Identifier generator that generates names consisting of a prefix followed by a number....
D_ParserTables parser_tables_mcrl2
#define mCRL2log(LEVEL)
mCRL2log(LEVEL) provides the stream used to log.
The main namespace for the aterm++ library.
void syntax_error_fn(struct D_Parser *ap)
Custom syntax error function that prints both the line number and the column.
D_ParseNode * ambiguity_fn(struct D_Parser *, int n, struct D_ParseNode **v)
Function for resolving parser ambiguities.
void warn_left_merge_merge(const parse_node &)
Prints a warning for each occurrence of 'x ||_ y || z' in the parse tree.
std::string pp(const core::identifier_string &x)
atermpp::aterm_string identifier_string
String type of the LPS library. Identifier strings are represented internally as ATerms.
void warn_and_or(const parse_node &)
Prints a warning for each occurrence of 'x && y || z' in the parse tree.
Namespace for system defined sort bag.
bool is_union_application(const atermpp::aterm &e)
Recogniser for application of +.
application union_(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol +.
Namespace for system defined sort bool_.
const basic_sort & bool_()
Constructor for sort expression Bool.
application not_(const data_expression &arg0)
Application of function symbol !.
Namespace for system defined sort fbag.
application union_(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol +.
bool is_union_application(const atermpp::aterm &e)
Recogniser for application of +.
Namespace for system defined sort fset.
application union_(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol +.
bool is_union_application(const atermpp::aterm &e)
Recogniser for application of +.
Namespace for system defined sort int_.
application plus(const data_expression &arg0, const data_expression &arg1)
Application of function symbol +.
bool is_int(const sort_expression &e)
Recogniser for sort expression Int.
Namespace for system defined sort list.
application element_at(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol ..
Namespace for system defined sort nat.
bool is_nat(const sort_expression &e)
Recogniser for sort expression Nat.
application plus(const data_expression &arg0, const data_expression &arg1)
Application of function symbol +.
Namespace for system defined sort pos.
bool is_pos(const sort_expression &e)
Recogniser for sort expression Pos.
application plus(const data_expression &arg0, const data_expression &arg1)
Application of function symbol +.
Namespace for system defined sort real_.
application negate(const data_expression &arg0)
Application of function symbol -.
bool is_real(const sort_expression &e)
Recogniser for sort expression Real.
application plus(const data_expression &arg0, const data_expression &arg1)
Application of function symbol +.
Namespace for system defined sort set_.
bool is_union_application(const atermpp::aterm &e)
Recogniser for application of +.
application union_(const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Application of function symbol +.
Namespace for all data library functionality.
atermpp::term_list< assignment_expression > assignment_expression_list
\brief list of assignment_expressions
int precedence(const data_expression &x)
bool is_data_expression(const atermpp::aterm &x)
Test for a data_expression expression.
data_specification merge_data_specifications(const data_specification &dataspec1, const data_specification &dataspec2)
Merges two data specifications. Throws an exception if conflicts are detected.
atermpp::term_list< sort_expression > sort_expression_list
\brief list of sort_expressions
std::string pp(const data::data_expression_list &x)
atermpp::term_list< data_expression > data_expression_list
\brief list of data_expressions
bool is_untyped_data_parameter(const atermpp::aterm &x)
atermpp::term_list< variable > variable_list
\brief list of variables
atermpp::term_list< assignment > assignment_list
\brief list of assignments
std::string pp(const data::data_expression &x)
The main namespace for the LPS library.
specification remove_stochastic_operators(const stochastic_specification &spec)
Converts a stochastic specification to a specification. Throws an exception if non-empty distribution...
The main namespace for the Process library.
action_label_list merge_action_specifications(const action_label_list &actspec1, const action_label_list &actspec2)
Merges two action specifications.
atermpp::term_list< action_label > action_label_list
\brief list of action_labels
atermpp::term_list< action > action_list
\brief list of actions
bool is_untyped_multi_action(const atermpp::aterm &x)
std::string read_text(std::istream &in)
Read text from a stream.
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
expression builder that visits all sub expressions
core::identifier_string parse_Id(const parse_node &node) const
parse_node child(int i) const
std::string symbol_name(const parse_node &node) const
Wrapper for D_Parser and its corresponding D_ParserTables.
parse_node parse(const std::string &text, unsigned int start_symbol_index=0, bool partial_parses=false)
Parses a string. N.B. The user is responsible for destruction of the returned value by calling destro...
parser(D_ParserTables &tables, D_AmbiguityFn ambiguity_fn=nullptr, D_SyntaxErrorFn syntax_error_fn=nullptr, std::size_t max_error_message_count=1)
unsigned int start_symbol_index(const std::string &name) const
expression traverser that visits all sub expressions
data::data_expression parse_DataValExpr(const core::parse_node &node) const
data::data_expression parse_DataExpr(const core::parse_node &node) const
bool callback_DataSpecElement(const core::parse_node &node, untyped_data_specification &result) const
normalize_sorts_function(const sort_specification &sort_spec)
data::sort_expression parse_SortExpr(const core::parse_node &node, data::sort_expression_list *product=nullptr) const
data_specification construct_data_specification() const
multi_action_actions(const core::parser &parser_)
std::size_t operator()(const atermpp::detail::reference_aterm< T > &t) const