12#ifndef MCRL2_DATA_BUILDER_H
13#define MCRL2_DATA_BUILDER_H
15#include "mcrl2/core/builder.h"
16#include "mcrl2/data/alias.h"
18#ifdef MCRL2_ENABLE_MACHINENUMBERS
19#include "mcrl2/data/bag64.h"
21#include "mcrl2/data/bag.h"
24#include "mcrl2/data/bag_comprehension.h"
25#include "mcrl2/data/exists.h"
26#include "mcrl2/data/lambda.h"
27#include "mcrl2/data/set_comprehension.h"
28#include "mcrl2/data/structured_sort.h"
29#include "mcrl2/data/machine_number.h"
30#include "mcrl2/data/untyped_data_parameter.h"
31#include "mcrl2/data/untyped_possible_sorts.h"
32#include "mcrl2/data/untyped_set_or_bag_comprehension.h"
33#include "mcrl2/data/untyped_sort_variable.h"
34#include "mcrl2/data/where_clause.h"
44template <
template <
class>
class Builder,
class Derived>
47 using super = Builder<Derived>;
56 static_cast<Derived&>(*
this).enter(x);
58 static_cast<Derived&>(*
this).leave(x);
64 static_cast<Derived&>(*
this).enter(x);
66 static_cast<Derived&>(*
this).leave(x);
72 static_cast<Derived&>(*
this).enter(x);
73 data::make_application(result,
78 static_cast<Derived&>(*
this).leave(x);
84 static_cast<Derived&>(*
this).enter(x);
85 data::make_where_clause(result, [&](
data_expression& result){
static_cast<Derived&>(*
this).apply(result, x
.body()); }, [&](assignment_expression_list& result){
static_cast<Derived&>(*
this).apply(result, x
.declarations()); });
86 static_cast<Derived&>(*
this).leave(x);
92 static_cast<Derived&>(*
this).enter(x);
94 static_cast<Derived&>(*
this).leave(x);
95 result = atermpp::down_cast<T>(x);
101 static_cast<Derived&>(*
this).enter(x);
103 static_cast<Derived&>(*
this).leave(x);
104 result = atermpp::down_cast<T>(x);
110 static_cast<Derived&>(*
this).enter(x);
111 data::make_assignment(result, [&](
variable& result){
static_cast<Derived&>(*
this).apply(result, x
.lhs()); }, [&](
data_expression& result){
static_cast<Derived&>(*
this).apply(result, x
.rhs()); });
112 static_cast<Derived&>(*
this).leave(x);
118 static_cast<Derived&>(*
this).enter(x);
120 static_cast<Derived&>(*
this).leave(x);
126 static_cast<Derived&>(*
this).enter(x);
128 static_cast<Derived&>(*
this).leave(x);
129 result = atermpp::down_cast<T>(x);
135 static_cast<Derived&>(*
this).enter(x);
137 static_cast<Derived&>(*
this).leave(x);
143 static_cast<Derived&>(*
this).enter(x);
144 data::make_structured_sort(result, [&](structured_sort_constructor_list& result){
static_cast<Derived&>(*
this).apply(result, x
.constructors()); });
145 static_cast<Derived&>(*
this).leave(x);
151 static_cast<Derived&>(*
this).enter(x);
152 data::make_function_sort(result, [&](sort_expression_list& result){
static_cast<Derived&>(*
this).apply(result, x
.domain()); }, [&](
sort_expression& result){
static_cast<Derived&>(*
this).apply(result, x
.codomain()); });
153 static_cast<Derived&>(*
this).leave(x);
159 static_cast<Derived&>(*
this).enter(x);
161 static_cast<Derived&>(*
this).leave(x);
162 result = atermpp::down_cast<T>(x);
168 static_cast<Derived&>(*
this).enter(x);
169 data::make_untyped_possible_sorts(result, [&](sort_expression_list& result){
static_cast<Derived&>(*
this).apply(result, x
.sorts()); });
170 static_cast<Derived&>(*
this).leave(x);
176 static_cast<Derived&>(*
this).enter(x);
178 static_cast<Derived&>(*
this).leave(x);
179 result = atermpp::down_cast<T>(x);
185 static_cast<Derived&>(*
this).enter(x);
186 data::make_forall(result, [&](variable_list& result){
static_cast<Derived&>(*
this).apply(result, x
.variables()); }, [&](
data_expression& result){
static_cast<Derived&>(*
this).apply(result, x
.body()); });
187 static_cast<Derived&>(*
this).leave(x);
193 static_cast<Derived&>(*
this).enter(x);
194 data::make_exists(result, [&](variable_list& result){
static_cast<Derived&>(*
this).apply(result, x
.variables()); }, [&](
data_expression& result){
static_cast<Derived&>(*
this).apply(result, x
.body()); });
195 static_cast<Derived&>(*
this).leave(x);
201 static_cast<Derived&>(*
this).enter(x);
202 data::make_lambda(result, [&](variable_list& result){
static_cast<Derived&>(*
this).apply(result, x
.variables()); }, [&](
data_expression& result){
static_cast<Derived&>(*
this).apply(result, x
.body()); });
203 static_cast<Derived&>(*
this).leave(x);
209 static_cast<Derived&>(*
this).enter(x);
210 data::make_set_comprehension(result, [&](variable_list& result){
static_cast<Derived&>(*
this).apply(result, x
.variables()); }, [&](
data_expression& result){
static_cast<Derived&>(*
this).apply(result, x
.body()); });
211 static_cast<Derived&>(*
this).leave(x);
217 static_cast<Derived&>(*
this).enter(x);
218 data::make_bag_comprehension(result, [&](variable_list& result){
static_cast<Derived&>(*
this).apply(result, x
.variables()); }, [&](
data_expression& result){
static_cast<Derived&>(*
this).apply(result, x
.body()); });
219 static_cast<Derived&>(*
this).leave(x);
225 static_cast<Derived&>(*
this).enter(x);
226 data::make_untyped_set_or_bag_comprehension(result, [&](variable_list& result){
static_cast<Derived&>(*
this).apply(result, x
.variables()); }, [&](
data_expression& result){
static_cast<Derived&>(*
this).apply(result, x
.body()); });
227 static_cast<Derived&>(*
this).leave(x);
233 static_cast<Derived&>(*
this).enter(x);
235 static_cast<Derived&>(*
this).leave(x);
241 static_cast<Derived&>(*
this).enter(x);
242 data::make_structured_sort_constructor(result, x
.name(), [&](structured_sort_constructor_argument_list& result){
static_cast<Derived&>(*
this).apply(result, x
.arguments()); }, x
.recogniser());
243 static_cast<Derived&>(*
this).leave(x);
249 static_cast<Derived&>(*
this).enter(x);
251 static_cast<Derived&>(*
this).leave(x);
257 static_cast<Derived&>(*
this).enter(x);
259 static_cast<Derived&>(*
this).leave(x);
265 static_cast<Derived&>(*
this).enter(x);
266 data::make_untyped_data_parameter(result, x
.name(), [&](data_expression_list& result){
static_cast<Derived&>(*
this).apply(result, x
.arguments()); });
267 static_cast<Derived&>(*
this).leave(x);
273 static_cast<Derived&>(*
this).enter(x);
276 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::abstraction>(x));
280 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::variable>(x));
284 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::function_symbol>(x));
288 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::application>(x));
292 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::where_clause>(x));
296 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::machine_number>(x));
300 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::untyped_identifier>(x));
302 static_cast<Derived&>(*
this).leave(x);
308 static_cast<Derived&>(*
this).enter(x);
311 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::assignment>(x));
315 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::untyped_identifier_assignment>(x));
317 static_cast<Derived&>(*
this).leave(x);
323 static_cast<Derived&>(*
this).enter(x);
326 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::basic_sort>(x));
330 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::container_sort>(x));
334 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::structured_sort>(x));
338 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::function_sort>(x));
342 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::untyped_sort>(x));
346 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::untyped_possible_sorts>(x));
350 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::untyped_sort_variable>(x));
352 static_cast<Derived&>(*
this).leave(x);
358 static_cast<Derived&>(*
this).enter(x);
361 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::forall>(x));
365 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::exists>(x));
369 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::lambda>(x));
373 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::set_comprehension>(x));
377 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::bag_comprehension>(x));
381 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::untyped_set_or_bag_comprehension>(x));
383 static_cast<Derived&>(*
this).leave(x);
389template <
typename Derived>
397template <
template <
class>
class Builder,
class Derived>
400 using super = Builder<Derived>;
409 static_cast<Derived&>(*
this).enter(x);
411 static_cast<Derived&>(*
this).leave(x);
412 result = atermpp::down_cast<T>(x);
418 static_cast<Derived&>(*
this).enter(x);
420 static_cast<Derived&>(*
this).leave(x);
421 result = atermpp::down_cast<T>(x);
427 static_cast<Derived&>(*
this).enter(x);
428 data::make_application(result,
433 static_cast<Derived&>(*
this).leave(x);
439 static_cast<Derived&>(*
this).enter(x);
440 data::make_where_clause(result, [&](
data_expression& result){
static_cast<Derived&>(*
this).apply(result, x
.body()); }, [&](assignment_expression_list& result){
static_cast<Derived&>(*
this).apply(result, x
.declarations()); });
441 static_cast<Derived&>(*
this).leave(x);
447 static_cast<Derived&>(*
this).enter(x);
449 static_cast<Derived&>(*
this).leave(x);
450 result = atermpp::down_cast<T>(x);
456 static_cast<Derived&>(*
this).enter(x);
458 static_cast<Derived&>(*
this).leave(x);
459 result = atermpp::down_cast<T>(x);
465 static_cast<Derived&>(*
this).enter(x);
467 static_cast<Derived&>(*
this).leave(x);
473 static_cast<Derived&>(*
this).enter(x);
475 static_cast<Derived&>(*
this).leave(x);
481 static_cast<Derived&>(*
this).enter(x);
483 static_cast<Derived&>(*
this).leave(x);
489 static_cast<Derived&>(*
this).enter(x);
491 static_cast<Derived&>(*
this).leave(x);
497 static_cast<Derived&>(*
this).enter(x);
499 static_cast<Derived&>(*
this).leave(x);
505 static_cast<Derived&>(*
this).enter(x);
507 static_cast<Derived&>(*
this).leave(x);
513 static_cast<Derived&>(*
this).enter(x);
515 static_cast<Derived&>(*
this).leave(x);
521 static_cast<Derived&>(*
this).enter(x);
523 static_cast<Derived&>(*
this).leave(x);
529 static_cast<Derived&>(*
this).enter(x);
531 static_cast<Derived&>(*
this).leave(x);
537 static_cast<Derived&>(*
this).enter(x);
538 data::make_untyped_data_parameter(result, x
.name(), [&](data_expression_list& result){
static_cast<Derived&>(*
this).apply(result, x
.arguments()); });
539 static_cast<Derived&>(*
this).leave(x);
545 static_cast<Derived&>(*
this).enter(x);
548 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::abstraction>(x));
552 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::variable>(x));
556 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::function_symbol>(x));
560 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::application>(x));
564 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::where_clause>(x));
568 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::machine_number>(x));
572 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::untyped_identifier>(x));
574 static_cast<Derived&>(*
this).leave(x);
580 static_cast<Derived&>(*
this).enter(x);
583 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::assignment>(x));
587 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::untyped_identifier_assignment>(x));
589 static_cast<Derived&>(*
this).leave(x);
595 static_cast<Derived&>(*
this).enter(x);
598 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::forall>(x));
602 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::exists>(x));
606 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::lambda>(x));
610 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::set_comprehension>(x));
614 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::bag_comprehension>(x));
618 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::untyped_set_or_bag_comprehension>(x));
620 static_cast<Derived&>(*
this).leave(x);
626template <
typename Derived>
633template <
template <
class>
class Builder,
class Derived>
636 using super = Builder<Derived>;
645 static_cast<Derived&>(*
this).enter(x);
647 static_cast<Derived&>(*
this).leave(x);
648 result = atermpp::down_cast<T>(x);
654 static_cast<Derived&>(*
this).enter(x);
656 static_cast<Derived&>(*
this).leave(x);
657 result = atermpp::down_cast<T>(x);
663 static_cast<Derived&>(*
this).enter(x);
664 data::make_application(result,
669 static_cast<Derived&>(*
this).leave(x);
675 static_cast<Derived&>(*
this).enter(x);
676 data::make_where_clause(result, [&](
data_expression& result){
static_cast<Derived&>(*
this).apply(result, x
.body()); }, [&](assignment_expression_list& result){
static_cast<Derived&>(*
this).apply(result, x
.declarations()); });
677 static_cast<Derived&>(*
this).leave(x);
683 static_cast<Derived&>(*
this).enter(x);
685 static_cast<Derived&>(*
this).leave(x);
686 result = atermpp::down_cast<T>(x);
692 static_cast<Derived&>(*
this).enter(x);
694 static_cast<Derived&>(*
this).leave(x);
695 result = atermpp::down_cast<T>(x);
701 static_cast<Derived&>(*
this).enter(x);
702 data::make_assignment(result, [&](
variable& result){
static_cast<Derived&>(*
this).apply(result, x
.lhs()); }, [&](
data_expression& result){
static_cast<Derived&>(*
this).apply(result, x
.rhs()); });
703 static_cast<Derived&>(*
this).leave(x);
709 static_cast<Derived&>(*
this).enter(x);
711 static_cast<Derived&>(*
this).leave(x);
717 static_cast<Derived&>(*
this).enter(x);
718 data::make_forall(result, [&](variable_list& result){
static_cast<Derived&>(*
this).apply(result, x
.variables()); }, [&](
data_expression& result){
static_cast<Derived&>(*
this).apply(result, x
.body()); });
719 static_cast<Derived&>(*
this).leave(x);
725 static_cast<Derived&>(*
this).enter(x);
726 data::make_exists(result, [&](variable_list& result){
static_cast<Derived&>(*
this).apply(result, x
.variables()); }, [&](
data_expression& result){
static_cast<Derived&>(*
this).apply(result, x
.body()); });
727 static_cast<Derived&>(*
this).leave(x);
733 static_cast<Derived&>(*
this).enter(x);
734 data::make_lambda(result, [&](variable_list& result){
static_cast<Derived&>(*
this).apply(result, x
.variables()); }, [&](
data_expression& result){
static_cast<Derived&>(*
this).apply(result, x
.body()); });
735 static_cast<Derived&>(*
this).leave(x);
741 static_cast<Derived&>(*
this).enter(x);
742 data::make_set_comprehension(result, [&](variable_list& result){
static_cast<Derived&>(*
this).apply(result, x
.variables()); }, [&](
data_expression& result){
static_cast<Derived&>(*
this).apply(result, x
.body()); });
743 static_cast<Derived&>(*
this).leave(x);
749 static_cast<Derived&>(*
this).enter(x);
750 data::make_bag_comprehension(result, [&](variable_list& result){
static_cast<Derived&>(*
this).apply(result, x
.variables()); }, [&](
data_expression& result){
static_cast<Derived&>(*
this).apply(result, x
.body()); });
751 static_cast<Derived&>(*
this).leave(x);
757 static_cast<Derived&>(*
this).enter(x);
758 data::make_untyped_set_or_bag_comprehension(result, [&](variable_list& result){
static_cast<Derived&>(*
this).apply(result, x
.variables()); }, [&](
data_expression& result){
static_cast<Derived&>(*
this).apply(result, x
.body()); });
759 static_cast<Derived&>(*
this).leave(x);
765 static_cast<Derived&>(*
this).enter(x);
767 static_cast<Derived&>(*
this).leave(x);
773 static_cast<Derived&>(*
this).enter(x);
774 data::make_untyped_data_parameter(result, x
.name(), [&](data_expression_list& result){
static_cast<Derived&>(*
this).apply(result, x
.arguments()); });
775 static_cast<Derived&>(*
this).leave(x);
781 static_cast<Derived&>(*
this).enter(x);
784 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::abstraction>(x));
788 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::variable>(x));
792 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::function_symbol>(x));
796 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::application>(x));
800 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::where_clause>(x));
804 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::machine_number>(x));
808 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::untyped_identifier>(x));
810 static_cast<Derived&>(*
this).leave(x);
816 static_cast<Derived&>(*
this).enter(x);
819 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::assignment>(x));
823 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::untyped_identifier_assignment>(x));
825 static_cast<Derived&>(*
this).leave(x);
831 static_cast<Derived&>(*
this).enter(x);
834 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::forall>(x));
838 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::exists>(x));
842 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::lambda>(x));
846 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::set_comprehension>(x));
850 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::bag_comprehension>(x));
854 static_cast<Derived&>(*
this).apply(result, atermpp::down_cast<data::untyped_set_or_bag_comprehension>(x));
856 static_cast<Derived&>(*
this).leave(x);
862template <
typename Derived>
A unordered_map class in which aterms can be stored.
An abstraction expression.
const variable_list & variables() const
const data_expression & body() const
const basic_sort & name() const
const sort_expression & reference() const
\brief Assignment expression
\brief Assignment of a data expression to a variable
const data_expression & rhs() const
const variable & lhs() const
universal quantification.
container_sort(const container_type &container_name, const sort_expression &element_sort)
\brief Constructor Z14.
const container_type & container_name() const
const sort_expression & element_sort() const
container_sort(const atermpp::aterm &term)
const data_expression & lhs() const
const data_expression & condition() const
const data_expression & rhs() const
const variable_list & variables() const
sort_expression sort() const
Returns the sort of the data expression.
existential quantification.
universal quantification.
const sort_expression & codomain() const
const sort_expression_list & domain() const
const core::identifier_string & name() const
const sort_expression & sort() const
universal quantification.
sort_expression & operator=(sort_expression &&) noexcept=default
\brief An argument of a constructor of a structured sort
const core::identifier_string & name() const
const sort_expression & sort() const
\brief A constructor for a structured sort
const core::identifier_string & name() const
const core::identifier_string & recogniser() const
const structured_sort_constructor_argument_list & arguments() const
const structured_sort_constructor_list & constructors() const
\brief An untyped parameter
const core::identifier_string & name() const
const data_expression_list & arguments() const
\brief Assignment of a data expression to a string
const core::identifier_string & lhs() const
const data_expression & rhs() const
\brief An untyped identifier
\brief Multiple possible sorts
const sort_expression_list & sorts() const
universal quantification.
\brief Untyped sort variable
\brief Unknown sort expression
untyped_sort()
\brief Default constructor X3.
const core::identifier_string & name() const
const sort_expression & sort() const
\brief A where expression
const data_expression & body() const
const assignment_expression_list & declarations() const
D_ParserTables parser_tables_mcrl2
void warn_and_or(const parse_node &)
Prints a warning for each occurrence of 'x && y || z' in the parse tree.
data_expression parse_data_expression(const std::string &text)
data_specification parse_data_specification_new(const std::string &text)
variable_list parse_variable_declaration_list(const std::string &text)
variable_list parse_variables(const std::string &text)
sort_expression parse_sort_expression(const std::string &text)
Namespace for system defined sort bool_.
const basic_sort & bool_()
Constructor for sort expression Bool.
std::string pp(const data::structured_sort_constructor_argument &x, bool arg0)
data::data_equation normalize_sorts(const data::data_equation &x, const data::sort_specification &sortspec)
void normalize_sorts(data::data_equation_vector &x, const data::sort_specification &sortspec)
bool is_structured_sort(const atermpp::aterm &x)
Returns true if the term t is a structured sort.
data::data_equation_list normalize_sorts(const data::data_equation_list &x, const data::sort_specification &sortspec)
std::string pp(const data::exists &x, bool arg0)
std::string pp(const data::untyped_identifier_assignment &x, bool arg0)
std::set< data::variable > find_all_variables(const data::data_expression_list &x)
std::string pp(const data::list_container &x, bool arg0)
std::set< data::sort_expression > find_sort_expressions(const data::data_expression &x)
data::data_equation translate_user_notation(const data::data_equation &x)
bool is_application(const data_expression &t)
Returns true if the term t is an application.
std::string pp(const data::container_type &x, bool arg0)
std::set< data::variable > find_all_variables(const data::data_expression &x)
bool is_where_clause(const atermpp::aterm &x)
Returns true if the term t is a where clause.
std::string pp(const data::set_container &x, bool arg0)
bool is_untyped_possible_sorts(const atermpp::aterm &x)
Returns true if the term t is an expression for multiple possible sorts.
bool is_untyped_sort(const atermpp::aterm &x)
Returns true if the term t is the unknown sort.
std::string pp(const data::untyped_set_or_bag_comprehension_binder &x, bool arg0)
data::data_expression translate_user_notation(const data::data_expression &x)
std::string pp(const data::sort_expression_vector &x, bool arg0)
std::string pp(const data::untyped_sort &x, bool arg0)
std::string pp(const data::data_equation &x, bool arg0)
std::string pp(const data::forall &x, bool arg0)
bool is_abstraction(const atermpp::aterm &x)
Returns true if the term t is an abstraction.
std::string pp(const data::assignment_list &x, bool arg0)
std::string pp(const data::untyped_identifier &x, bool arg0)
std::string pp(const data::function_symbol_list &x, bool arg0)
bool is_untyped_identifier(const atermpp::aterm &x)
Returns true if the term t is an identifier.
std::string pp(const data::lambda_binder &x, bool arg0)
std::set< data::variable > find_all_variables(const data::function_symbol &x)
std::string pp(const data::application &x, bool arg0)
std::string pp(const data::function_sort &x, bool arg0)
std::string pp(const data::abstraction &x, bool arg0)
std::string pp(const data::bag_comprehension_binder &x, bool arg0)
std::string pp(const data::set_comprehension_binder &x, bool arg0)
std::string pp(const data::assignment &x, bool arg0)
std::string pp(const data::structured_sort &x, bool arg0)
std::string pp(const data::basic_sort &x, bool arg0)
std::string pp(const data::exists_binder &x, bool arg0)
std::string pp(const data::bag_comprehension &x, bool arg0)
bool is_container_sort(const atermpp::aterm &x)
Returns true if the term t is a container sort.
bool is_forall(const atermpp::aterm &x)
Returns true if the term t is a universal quantification.
std::string pp(const data::variable &x, bool arg0)
bool is_function_symbol(const atermpp::aterm &x)
Returns true if the term t is a function symbol.
bool is_basic_sort(const atermpp::aterm &x)
Returns true if the term t is a basic sort.
bool is_untyped_sort_variable(const atermpp::aterm &x)
std::string pp(const data::where_clause &x, bool arg0)
std::set< data::sort_expression > find_sort_expressions(const data::data_equation &x)
std::set< data::function_symbol > find_function_symbols(const data::data_equation &x)
std::string pp(const data::bag_container &x, bool arg0)
std::string pp(const data::alias &x, bool arg0)
std::set< data::variable > find_free_variables(const data::data_expression &x)
std::set< data::variable > find_all_variables(const data::variable_list &x)
bool is_untyped_set_or_bag_comprehension(const atermpp::aterm &x)
Returns true if the term t is a set/bag comprehension.
bool is_assignment(const atermpp::aterm &x)
std::string pp(const data::structured_sort_constructor &x, bool arg0)
std::set< data::sort_expression > find_sort_expressions(const data::sort_expression &x)
std::string pp(const data::data_specification &x, bool arg0)
std::string pp(const data::data_equation_list &x, bool arg0)
std::string pp(const data::fset_container &x, bool arg0)
std::string pp(const data::sort_expression &x, bool arg0)
std::string pp(const data::untyped_set_or_bag_comprehension &x, bool arg0)
std::pair< basic_sort_vector, alias_vector > parse_sort_specification(const std::string &text)
data::sort_expression normalize_sorts(const data::sort_expression &x, const data::sort_specification &sortspec)
bool is_exists(const atermpp::aterm &x)
Returns true if the term t is an existential quantification.
std::string pp(const data::variable_list &x, bool arg0)
bool is_function_sort(const atermpp::aterm &x)
Returns true if the term t is a function sort.
std::set< data::variable > find_free_variables(const data::data_expression_list &x)
std::string pp(const data::data_expression &x, bool arg0)
std::string pp(const data::lambda &x, bool arg0)
bool is_bag_comprehension(const atermpp::aterm &x)
Returns true if the term t is a bag comprehension.
std::string pp(const data::fbag_container &x, bool arg0)
bool is_set_comprehension(const atermpp::aterm &x)
Returns true if the term t is a set comprehension.
std::string pp(const data::structured_sort_constructor_list &x, bool arg0)
bool is_machine_number(const atermpp::aterm &x)
Returns true if the term t is a machine_number.
std::string pp(const data::container_sort &x, bool arg0)
data::variable_list normalize_sorts(const data::variable_list &x, const data::sort_specification &sortspec)
data::data_expression normalize_sorts(const data::data_expression &x, const data::sort_specification &sortspec)
std::string pp(const data::untyped_sort_variable &x, bool arg0)
std::string pp(const data::untyped_data_parameter &x, bool arg0)
std::string pp(const data::binder_type &x, bool arg0)
bool is_lambda(const atermpp::aterm &x)
Returns true if the term t is a lambda abstraction.
bool is_untyped_identifier_assignment(const atermpp::aterm &x)
std::set< data::variable > find_all_variables(const data::variable &x)
std::set< core::identifier_string > find_identifiers(const data::variable_list &x)
bool search_variable(const data::data_expression &x, const data::variable &v)
std::string pp(const data::sort_expression_list &x, bool arg0)
std::string pp(const data::forall_binder &x, bool arg0)
std::string pp(const data::untyped_possible_sorts &x, bool arg0)
std::string pp(const data::function_symbol &x, bool arg0)
std::set< data::variable > substitution_variables(const mutable_map_substitution<> &sigma)
std::string pp(const data::machine_number &x, bool arg0)
std::string pp(const data::assignment_expression &x, bool arg0)
bool is_variable(const atermpp::aterm &x)
Returns true if the term t is a variable.
std::string pp(const data::set_comprehension &x, bool arg0)
std::string pp(const data::data_expression_list &x, bool arg0)
void apply(T &result, const data::bag_comprehension &x)
void apply(T &result, const data::machine_number &x)
void apply(T &result, const data::untyped_identifier_assignment &x)
void apply(T &result, const data::assignment_expression &x)
void apply(T &result, const data::untyped_set_or_bag_comprehension &x)
void apply(T &result, const data::untyped_identifier &x)
void apply(T &result, const data::data_equation &x)
void apply(T &result, const data::function_symbol &x)
void apply(T &result, const data::assignment &x)
void apply(T &result, const data::abstraction &x)
void apply(T &result, const data::forall &x)
void apply(T &result, const data::untyped_data_parameter &x)
void apply(T &result, const data::exists &x)
void apply(T &result, const data::where_clause &x)
void apply(T &result, const data::application &x)
void apply(T &result, const data::variable &x)
void apply(T &result, const data::data_expression &x)
void apply(T &result, const data::set_comprehension &x)
void apply(T &result, const data::lambda &x)
void apply(T &result, const data::assignment &x)
void apply(T &result, const data::set_comprehension &x)
void apply(T &result, const data::structured_sort_constructor_argument &x)
void apply(T &result, const data::container_sort &x)
void apply(T &result, const data::alias &x)
void apply(T &result, const data::exists &x)
void apply(T &result, const data::machine_number &x)
void apply(T &result, const data::function_symbol &x)
void apply(T &result, const data::untyped_possible_sorts &x)
void apply(T &result, const data::forall &x)
void apply(T &result, const data::basic_sort &x)
void apply(T &result, const data::data_equation &x)
void apply(T &result, const data::untyped_sort &x)
void apply(T &result, const data::abstraction &x)
void apply(T &result, const data::application &x)
void apply(T &result, const data::variable &x)
void apply(T &result, const data::structured_sort &x)
void apply(T &result, const data::untyped_identifier_assignment &x)
void apply(T &result, const data::untyped_data_parameter &x)
void apply(T &result, const data::function_sort &x)
void apply(T &result, const data::untyped_identifier &x)
void apply(T &result, const data::structured_sort_constructor &x)
void apply(T &result, const data::lambda &x)
void apply(T &result, const data::untyped_set_or_bag_comprehension &x)
void apply(T &result, const data::where_clause &x)
void apply(T &result, const data::assignment_expression &x)
void apply(T &result, const data::data_expression &x)
void apply(T &result, const data::sort_expression &x)
void apply(T &result, const data::untyped_sort_variable &x)
void apply(T &result, const data::bag_comprehension &x)
void apply(T &result, const data::abstraction &x)
void apply(T &result, const data::application &x)
void apply(T &result, const data::untyped_data_parameter &x)
void apply(T &result, const data::untyped_identifier &x)
void apply(T &result, const data::data_expression &x)
void apply(T &result, const data::assignment_expression &x)
void apply(T &result, const data::where_clause &x)
void apply(T &result, const data::forall &x)
void apply(T &result, const data::function_symbol &x)
void apply(T &result, const data::exists &x)
void apply(T &result, const data::lambda &x)
void apply(T &result, const data::variable &x)
void apply(T &result, const data::assignment &x)
void apply(T &result, const data::untyped_identifier_assignment &x)
void apply(T &result, const data::untyped_set_or_bag_comprehension &x)
void apply(T &result, const data::set_comprehension &x)
void apply(T &result, const data::bag_comprehension &x)
void apply(T &result, const data::machine_number &x)
void apply(T &result, const data::data_equation &x)
data_expression_actions(const core::parser &parser_)
data::data_expression parse_DataExpr(const core::parse_node &node) const
data_specification_actions(const core::parser &parser_)
untyped_data_specification parse_DataSpec(const core::parse_node &node) const
normalize_sorts_function(const sort_specification &sort_spec)
sort_expression operator()(const sort_expression &e) const
Normalise sorts.
const std::map< sort_expression, sort_expression > & m_normalised_aliases
data::sort_expression parse_SortExpr(const core::parse_node &node, data::sort_expression_list *product=nullptr) const
data_specification construct_data_specification() const