mCRL2
Loading...
Searching...
No Matches
builder.h
Go to the documentation of this file.
1// Author(s): Wieger Wesselink
2// Copyright: see the accompanying file COPYING or copy at
3// https://github.com/mCRL2org/mCRL2/blob/master/COPYING
4//
5// Distributed under the Boost Software License, Version 1.0.
6// (See accompanying file LICENSE_1_0.txt or copy at
7// http://www.boost.org/LICENSE_1_0.txt)
8//
9/// \file mcrl2/core/builder.h
10/// \brief add your file description here.
11
12#ifndef MCRL2_CORE_BUILDER_H
13#define MCRL2_CORE_BUILDER_H
14
15#include "mcrl2/atermpp/aterm_list.h"
16
17namespace mcrl2
18{
19
20namespace core
21{
22
23#ifdef MCRL2_DEBUG_EXPRESSION_BUILDER
24inline void msg(const std::string& s)
25{
26 std::cout << "--- " << s << " ---" << std::endl;
27}
28#else
29inline void msg(const std::string&)
30{}
31#endif
32
33/**
34 * \brief expression builder that visits all sub expressions
35 *
36 * Types:
37 * \arg Derived the type of a derived class, as per CRTP
38 *
39 **/
40template <typename Derived>
41struct builder
42{
43 // Enter object
44 template <typename T>
45 void enter(const T&)
46 {}
47
48 // Leave object
49 template <typename T>
50 void leave(const T&)
51 {}
52
53 template <typename T>
54 void update(T& x, typename atermpp::disable_if_container<T>::type* = nullptr)
55 {
56 msg("non-container visit");
57 T result;
58 static_cast<Derived*>(this)->apply(result, x);
59 x = result;
60 }
61
62 // container visit
63 template <typename T>
64 void update(T& x, typename atermpp::enable_if_container<T>::type* = nullptr)
65 {
66 msg("container visit");
67 for (auto& v: x)
68 {
69 static_cast<Derived*>(this)->update(v);
70 }
71 }
72
73 // aterm set visit
74 template <typename T>
75 void update(std::set<T>& x)
76 {
77 msg("set visit");
78 std::set<T> result;
79 for (T v: x)
80 {
81 static_cast<Derived*>(this)->update(v);
82 result.insert(v);
83 }
84 result.swap(x);
85 }
86
87 // term_list visit copy
88 template <typename T, typename U>
89 void apply(atermpp::term_list<T>& result, const atermpp::term_list<U>& x)
90 {
91 msg("term_list traversal");
92 atermpp::make_term_list<T>(static_cast<atermpp::term_list<T>&>(result),
93 x.begin(),
94 x.end(),
95 [&](T& result, const U& v) { static_cast<Derived*>(this)->apply(result, v); } );
96 }
97};
98
99
100// apply a builder without additional template arguments
101template <template <class> class Builder>
103{
105
106 public:
107
108 using super::enter;
109 using super::leave;
110 using super::apply;
111 using super::update;
112};
113
114template <template <class> class Builder>
117{
118 return apply_builder<Builder>();
119}
120
121// apply a builder with one additional template argument
122template <template <class> class Builder, class Arg1>
124{
126
127 public:
128 using super::enter;
129 using super::leave;
130 using super::apply;
131 using super::update;
132
133 apply_builder_arg1(const Arg1& arg1):
134 super(arg1)
135 {}
136};
137
138template <template <class> class Builder, class Arg1>
141{
142 return apply_builder_arg1<Builder, Arg1>(arg1);
143}
144
145// apply a builder with two additional template arguments
146template <template <class> class Builder, class Arg1, class Arg2>
148{
150
151 public:
152 using super::enter;
153 using super::leave;
154 using super::apply;
155 using super::update;
156
157 apply_builder_arg2(const Arg1& arg1, const Arg2& arg2):
158 super(arg1, arg2)
159 {}
160};
161
162template <template <class> class Builder, class Arg1, class Arg2>
165{
166 return apply_builder_arg2<Builder, Arg1, Arg2>(arg1, arg2);
167}
168
169
170// apply a builder without additional template arguments
171template <template <class> class Builder, class Function>
173{
175
176 using super::enter;
177 using super::leave;
178 using super::apply;
179 using super::update;
180
181 using argument_type = typename Function::argument_type; ///< The argument_type is required to restrict the overloads of apply(x) to that type.
182 using result_type = typename Function::result_type; ///< The argument_type is required to restrict the overloads of apply(x) to that type.
183 const Function& f_;
184
185 template <class T>
186 void apply(T& result, const argument_type& x) // -> decltype(f_(x))
187 {
188 // static_cast<result_type&>(result) = f_(x);
189 result = static_cast<T>(f_(x));
190 }
191
192 update_apply_builder(const Function& f)
193 : f_(f)
194 {}
195};
196
197template <template <class> class Builder, class Function>
200{
201 return update_apply_builder<Builder, Function>(f);
202}
203
204// apply a builder with one additional template argument
205template <template <class> class Builder, class Function, class Arg1>
207{
209
210 using super::enter;
211 using super::leave;
212 using super::apply;
213 using super::update;
214
215 using argument_type = typename Function::argument_type; ///< The argument_type is required to restrict the overloads of apply(x) to that type.
216 using result_type = typename Function::result_type;
217 const Function& f_;
218
219 template <class T>
220 void apply(T& result, const argument_type& x) // -> decltype(f_(x))
221 {
222 result = f_(x);
223 }
224
225 update_apply_builder_arg1(const Function& f, const Arg1& arg1):
226 super(arg1),
227 f_(f)
228 {}
229};
230
231template <template <class> class Builder, class Function, class Arg1>
234{
235 return update_apply_builder_arg1<Builder, Function, Arg1>(f);
236}
237
238} // namespace core
239
240} // namespace mcrl2
241
242#endif // MCRL2_CORE_BUILDER_H
const aterm & operator[](const size_type i) const
Returns the i-th argument.
Definition aterm.h:187
A list of aterm objects.
Definition aterm_list.h:24
Builder< apply_builder_arg1< Builder, Arg1 > > super
Definition builder.h:125
apply_builder_arg1(const Arg1 &arg1)
Definition builder.h:133
apply_builder_arg2(const Arg1 &arg1, const Arg2 &arg2)
Definition builder.h:157
Builder< apply_builder_arg2< Builder, Arg1, Arg2 > > super
Definition builder.h:149
Builder< apply_builder< Builder > > super
Definition builder.h:104
update_apply_builder_arg1(const Function &f, const Arg1 &arg1)
Definition builder.h:225
Builder< update_apply_builder_arg1< Builder, Function, Arg1 > > super
Definition builder.h:208
void apply(T &result, const argument_type &x)
Definition builder.h:220
An abstraction expression.
Definition abstraction.h:26
const variable_list & variables() const
Definition abstraction.h:63
const data_expression & body() const
Definition abstraction.h:68
\brief A sort alias
Definition alias.h:26
const basic_sort & name() const
Definition alias.h:52
const sort_expression & reference() const
Definition alias.h:57
\brief Assignment expression
Definition assignment.h:27
\brief Assignment of a data expression to a variable
Definition assignment.h:91
const data_expression & rhs() const
Definition assignment.h:122
const variable & lhs() const
Definition assignment.h:117
\brief Binder for bag comprehension
universal quantification.
\brief Container type for bags
\brief A basic sort
Definition basic_sort.h:26
\brief A container sort
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)
\brief Container type
\brief A data equation
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.
Definition data.cpp:108
\brief Binder for existential quantification
existential quantification.
Definition exists.h:26
\brief Container type for finite bags
\brief Binder for universal quantification
universal quantification.
Definition forall.h:26
\brief Container type for finite sets
\brief A function sort
const sort_expression & codomain() const
const sort_expression_list & domain() const
\brief A function symbol
const core::identifier_string & name() const
const sort_expression & sort() const
\brief Binder for lambda abstraction
function symbol.
Definition lambda.h:27
\brief Container type for lists
\brief A machine number
\brief Binder for set comprehension
universal quantification.
\brief Container type for sets
\brief A sort expression
sort_expression & operator=(sort_expression &&) noexcept=default
\brief An argument of a constructor of a structured sort
\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
const core::identifier_string & name() const
const data_expression_list & arguments() const
\brief Assignment of a data expression to a string
Definition assignment.h:182
const core::identifier_string & lhs() const
Definition assignment.h:213
const data_expression & rhs() const
Definition assignment.h:218
\brief An untyped identifier
const sort_expression_list & sorts() const
\brief Binder for untyped set or bag comprehension
Definition binder_type.h:77
\brief Unknown sort expression
untyped_sort()
\brief Default constructor X3.
\brief A data variable
Definition variable.h:28
const core::identifier_string & name() const
Definition variable.h:38
const sort_expression & sort() const
Definition variable.h:43
\brief A where expression
const data_expression & body() const
const assignment_expression_list & declarations() const
D_ParserTables parser_tables_mcrl2
Definition dparser.cpp:20
The main namespace for the aterm++ library.
Definition algorithm.h:21
void syntax_error_fn(struct D_Parser *ap)
Custom syntax error function that prints both the line number and the column.
Definition dparser.cpp:465
D_ParseNode * ambiguity_fn(struct D_Parser *, int n, struct D_ParseNode **v)
Function for resolving parser ambiguities.
Definition dparser.cpp:334
apply_builder< Builder > make_apply_builder()
Definition builder.h:116
update_apply_builder_arg1< Builder, Function, Arg1 > make_update_apply_builder_arg1(const Function &f)
Definition builder.h:233
void warn_and_or(const parse_node &)
Prints a warning for each occurrence of 'x && y || z' in the parse tree.
apply_builder_arg1< Builder, Arg1 > make_apply_builder_arg1(const Arg1 &arg1)
Definition builder.h:140
void msg(const std::string &)
Definition builder.h:29
update_apply_builder< Builder, Function > make_update_apply_builder(const Function &f)
Definition builder.h:199
apply_builder_arg2< Builder, Arg1, Arg2 > make_apply_builder_arg2(const Arg1 &arg1, const Arg2 &arg2)
Definition builder.h:164
data_expression parse_data_expression(const std::string &text)
Definition data.cpp:224
data_specification parse_data_specification_new(const std::string &text)
Definition data.cpp:235
variable_list parse_variable_declaration_list(const std::string &text)
Definition data.cpp:246
variable_list parse_variables(const std::string &text)
Definition data.cpp:213
sort_expression parse_sort_expression(const std::string &text)
Definition data.cpp:203
Namespace for system defined sort bool_.
Definition bool.h:32
const basic_sort & bool_()
Constructor for sort expression Bool.
Definition bool.h:44
Namespace for all data library functionality.
Definition data.cpp:22
atermpp::term_list< assignment_expression > assignment_expression_list
\brief list of assignment_expressions
Definition assignment.h:50
std::vector< assignment > assignment_vector
\brief vector of assignments
Definition assignment.h:149
data::data_equation normalize_sorts(const data::data_equation &x, const data::sort_specification &sortspec)
Definition data.cpp:83
std::string pp(const data::untyped_set_or_bag_comprehension_binder &x)
Definition data.cpp:78
std::string pp(const data::set_comprehension_binder &x)
Definition data.cpp:67
void normalize_sorts(data::data_equation_vector &x, const data::sort_specification &sortspec)
Definition data.cpp:85
std::string pp(const data::exists &x)
Definition data.cpp:54
std::string pp(const data::untyped_sort_variable &x)
Definition data.cpp:80
std::string pp(const data::untyped_set_or_bag_comprehension &x)
Definition data.cpp:77
std::string pp(const data::assignment_expression &x)
Definition data.cpp:43
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)
Definition data.cpp:84
std::string pp(const data::function_symbol_list &x)
Definition data.cpp:33
void normalize_sorts(T &x, const data::sort_specification &sort_spec, typename std::enable_if< !std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
variable_list free_variables(const data_expression &x)
Definition data.cpp:195
std::string pp(const data::set_container &x)
Definition data.cpp:68
std::string pp(const data::abstraction &x)
Definition data.cpp:39
std::string pp(const data::application &x)
Definition data.cpp:41
std::string pp(const data::bag_comprehension_binder &x)
Definition data.cpp:45
std::set< data::variable > find_all_variables(const data::data_expression_list &x)
Definition data.cpp:95
std::string pp(const data::fbag_container &x)
Definition data.cpp:56
std::vector< sort_expression > sort_expression_vector
\brief vector of sort_expressions
std::set< data::sort_expression > find_sort_expressions(const data::data_expression &x)
Definition data.cpp:92
data::data_equation translate_user_notation(const data::data_equation &x)
Definition data.cpp:90
std::string pp(const data::untyped_data_parameter &x)
Definition data.cpp:73
std::string pp(const data::fset_container &x)
Definition data.cpp:59
bool is_application(const data_expression &t)
Returns true if the term t is an application.
std::vector< alias > alias_vector
\brief vector of aliass
Definition alias.h:75
atermpp::term_list< function_symbol > function_symbol_list
\brief list of function_symbols
std::set< data::variable > find_all_variables(const data::data_expression &x)
Definition data.cpp:94
std::string pp(const data::untyped_identifier_assignment &x)
Definition data.cpp:75
std::string pp(const data::lambda &x)
Definition data.cpp:62
std::string pp(const data::container_sort &x)
Definition data.cpp:49
bool is_where_clause(const atermpp::aterm &x)
Returns true if the term t is a where clause.
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::variable &x)
Definition data.cpp:81
std::string pp(const data::untyped_sort &x)
Definition data.cpp:79
std::string pp(const data::machine_number &x)
Definition data.cpp:65
std::string pp(const data::lambda_binder &x)
Definition data.cpp:63
data::data_expression translate_user_notation(const data::data_expression &x)
Definition data.cpp:89
bool is_abstraction(const atermpp::aterm &x)
Returns true if the term t is an abstraction.
std::vector< data_equation > data_equation_vector
\brief vector of data_equations
std::vector< variable > variable_vector
\brief vector of variables
Definition variable.h:89
atermpp::term_list< structured_sort_constructor_argument > structured_sort_constructor_argument_list
\brief list of structured_sort_constructor_arguments
bool is_untyped_identifier(const atermpp::aterm &x)
Returns true if the term t is an identifier.
std::string pp(const data::data_equation_list &x)
Definition data.cpp:37
std::string pp(const data::data_equation &x)
Definition data.cpp:51
std::string pp(const data::function_sort &x)
Definition data.cpp:60
atermpp::term_list< sort_expression > sort_expression_list
\brief list of sort_expressions
std::vector< data_expression > data_expression_vector
\brief vector of data_expressions
std::set< data::variable > find_all_variables(const data::function_symbol &x)
Definition data.cpp:96
std::string pp(const data::bag_comprehension &x)
Definition data.cpp:44
std::string pp(const data::exists_binder &x)
Definition data.cpp:55
std::string pp(const data::forall_binder &x)
Definition data.cpp:58
std::string pp(const data::structured_sort_constructor_list &x)
Definition data.cpp:35
std::string pp(const data::untyped_possible_sorts &x)
Definition data.cpp:76
std::string pp(const data::data_expression_list &x)
Definition data.cpp:27
std::vector< structured_sort_constructor > structured_sort_constructor_vector
\brief vector of structured_sort_constructors
bool is_container_sort(const atermpp::aterm &x)
Returns true if the term t is a container sort.
std::string pp(const data::assignment_list &x)
Definition data.cpp:29
bool is_forall(const atermpp::aterm &x)
Returns true if the term t is a universal quantification.
bool is_function_symbol(const atermpp::aterm &x)
Returns true if the term t is a function symbol.
atermpp::term_list< data_equation > data_equation_list
\brief list of data_equations
atermpp::term_list< data_expression > data_expression_list
\brief list of data_expressions
std::string pp(const data::structured_sort_constructor &x)
Definition data.cpp:71
std::string pp(const data::assignment &x)
Definition data.cpp:42
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::set< data::sort_expression > find_sort_expressions(const data::data_equation &x)
Definition data.cpp:91
std::set< data::function_symbol > find_function_symbols(const data::data_equation &x)
Definition data.cpp:101
std::set< data::variable > find_free_variables(const data::data_expression &x)
Definition data.cpp:99
std::string pp(const data::bag_container &x)
Definition data.cpp:46
std::set< data::variable > find_all_variables(const data::variable_list &x)
Definition data.cpp:98
bool is_untyped_set_or_bag_comprehension(const atermpp::aterm &x)
Returns true if the term t is a set/bag comprehension.
T normalize_sorts(const T &x, const data::sort_specification &sort_spec, typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
bool is_assignment(const atermpp::aterm &x)
Definition assignment.h:155
std::string pp(const data::structured_sort &x)
Definition data.cpp:70
std::set< data::sort_expression > find_sort_expressions(const data::sort_expression &x)
Definition data.cpp:93
atermpp::term_list< variable > variable_list
\brief list of variables
std::pair< basic_sort_vector, alias_vector > parse_sort_specification(const std::string &text)
Definition data.cpp:258
std::string pp(const data::data_specification &x)
Definition data.cpp:53
data::sort_expression normalize_sorts(const data::sort_expression &x, const data::sort_specification &sortspec)
Definition data.cpp:87
bool is_exists(const atermpp::aterm &x)
Returns true if the term t is an existential quantification.
std::string pp(const data::container_type &x)
Definition data.cpp:50
std::string pp(const data::function_symbol &x)
Definition data.cpp:61
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)
Definition data.cpp:100
std::string pp(const data::basic_sort &x)
Definition data.cpp:47
std::string pp(const data::alias &x)
Definition data.cpp:40
std::string pp(const data::list_container &x)
Definition data.cpp:64
std::string pp(const data::forall &x)
Definition data.cpp:57
atermpp::term_list< assignment > assignment_list
\brief list of assignments
Definition assignment.h:146
bool is_bag_comprehension(const atermpp::aterm &x)
Returns true if the term t is a bag comprehension.
std::string pp(const data::sort_expression &x)
Definition data.cpp:69
bool is_set_comprehension(const atermpp::aterm &x)
Returns true if the term t is a set comprehension.
bool is_machine_number(const atermpp::aterm &x)
Returns true if the term t is a machine_number.
data::variable_list normalize_sorts(const data::variable_list &x, const data::sort_specification &sortspec)
Definition data.cpp:88
data::data_expression normalize_sorts(const data::data_expression &x, const data::sort_specification &sortspec)
Definition data.cpp:86
std::string pp(const data::structured_sort_constructor_argument &x)
Definition data.cpp:72
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)
Definition assignment.h:251
std::set< data::variable > find_all_variables(const data::variable &x)
Definition data.cpp:97
std::set< core::identifier_string > find_identifiers(const data::variable_list &x)
Definition data.cpp:102
std::vector< basic_sort > basic_sort_vector
vector of basic sorts
Definition basic_sort.h:94
bool search_variable(const data::data_expression &x, const data::variable &v)
Definition data.cpp:103
std::string pp(const data::set_comprehension &x)
Definition data.cpp:66
std::vector< function_symbol > function_symbol_vector
\brief vector of function_symbols
std::string pp(const data::variable_list &x)
Definition data.cpp:31
std::set< data::variable > substitution_variables(const mutable_map_substitution<> &sigma)
Definition data.cpp:185
std::string pp(const data::where_clause &x)
Definition data.cpp:82
std::string pp(const data::data_expression &x)
Definition data.cpp:52
std::string pp(const data::untyped_identifier &x)
Definition data.cpp:74
bool is_variable(const atermpp::aterm &x)
Returns true if the term t is a variable.
std::string pp(const data::sort_expression_vector &x)
Definition data.cpp:26
std::string pp(const data::binder_type &x)
Definition data.cpp:48
atermpp::term_list< structured_sort_constructor > structured_sort_constructor_list
\brief list of structured_sort_constructors
std::string pp(const data::sort_expression_list &x)
Definition data.cpp:25
expression builder that visits all sub expressions
Definition builder.h:42
void update(T &x, typename atermpp::disable_if_container< T >::type *=nullptr)
Definition builder.h:54
void leave(const T &)
Definition builder.h:50
void apply(atermpp::term_list< T > &result, const atermpp::term_list< U > &x)
Definition builder.h:89
void update(std::set< T > &x)
Definition builder.h:75
void enter(const T &)
Definition builder.h:45
Wrapper for D_ParseNode.
Definition dparser.h:86
Wrapper for D_Parser and its corresponding D_ParserTables.
Definition dparser.h:148
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...
Definition dparser.cpp:211
parser(D_ParserTables &tables, D_AmbiguityFn ambiguity_fn=nullptr, D_SyntaxErrorFn syntax_error_fn=nullptr, std::size_t max_error_message_count=1)
Definition dparser.cpp:174
unsigned int start_symbol_index(const std::string &name) const
Definition dparser.cpp:206
void apply(T &result, const argument_type &x)
Definition builder.h:186
Builder< update_apply_builder< Builder, Function > > super
Definition builder.h:174
update_apply_builder(const Function &f)
Definition builder.h:192
void apply(T &result, const data::bag_comprehension &x)
Definition builder.h:563
void apply(T &result, const data::machine_number &x)
Definition builder.h:487
void apply(T &result, const data::untyped_identifier_assignment &x)
Definition builder.h:518
void apply(T &result, const data::assignment_expression &x)
Definition builder.h:635
void apply(T &result, const data::untyped_set_or_bag_comprehension &x)
Definition builder.h:572
void apply(T &result, const data::untyped_identifier &x)
Definition builder.h:498
void apply(T &result, const data::data_equation &x)
Definition builder.h:581
void apply(T &result, const data::function_symbol &x)
Definition builder.h:454
void apply(T &result, const data::assignment &x)
Definition builder.h:509
void apply(T &result, const data::abstraction &x)
Definition builder.h:651
void apply(T &result, const data::forall &x)
Definition builder.h:527
void apply(T &result, const data::untyped_data_parameter &x)
Definition builder.h:590
void apply(T &result, const data::exists &x)
Definition builder.h:536
void apply(T &result, const data::where_clause &x)
Definition builder.h:478
void apply(T &result, const data::application &x)
Definition builder.h:465
void apply(T &result, const data::variable &x)
Definition builder.h:443
void apply(T &result, const data::data_expression &x)
Definition builder.h:599
void apply(T &result, const data::set_comprehension &x)
Definition builder.h:554
void apply(T &result, const data::lambda &x)
Definition builder.h:545
void apply(T &result, const data::assignment &x)
Definition builder.h:117
void apply(T &result, const data::set_comprehension &x)
Definition builder.h:231
void apply(T &result, const data::structured_sort_constructor_argument &x)
Definition builder.h:258
void apply(T &result, const data::container_sort &x)
Definition builder.h:146
void apply(T &result, const data::alias &x)
Definition builder.h:276
void apply(T &result, const data::exists &x)
Definition builder.h:213
void apply(T &result, const data::machine_number &x)
Definition builder.h:95
void apply(T &result, const data::function_symbol &x)
Definition builder.h:64
void apply(T &result, const data::untyped_possible_sorts &x)
Definition builder.h:184
void apply(T &result, const data::forall &x)
Definition builder.h:204
void apply(T &result, const data::basic_sort &x)
Definition builder.h:135
Builder< Derived > super
Definition builder.h:48
void apply(T &result, const data::data_equation &x)
Definition builder.h:285
void apply(T &result, const data::untyped_sort &x)
Definition builder.h:173
void apply(T &result, const data::abstraction &x)
Definition builder.h:391
void apply(T &result, const data::application &x)
Definition builder.h:73
void apply(T &result, const data::variable &x)
Definition builder.h:55
void apply(T &result, const data::structured_sort &x)
Definition builder.h:155
void apply(T &result, const data::untyped_identifier_assignment &x)
Definition builder.h:126
void apply(T &result, const data::untyped_data_parameter &x)
Definition builder.h:294
void apply(T &result, const data::function_sort &x)
Definition builder.h:164
void apply(T &result, const data::untyped_identifier &x)
Definition builder.h:106
void apply(T &result, const data::structured_sort_constructor &x)
Definition builder.h:267
void apply(T &result, const data::lambda &x)
Definition builder.h:222
void apply(T &result, const data::untyped_set_or_bag_comprehension &x)
Definition builder.h:249
void apply(T &result, const data::where_clause &x)
Definition builder.h:86
void apply(T &result, const data::assignment_expression &x)
Definition builder.h:339
void apply(T &result, const data::data_expression &x)
Definition builder.h:303
void apply(T &result, const data::sort_expression &x)
Definition builder.h:355
void apply(T &result, const data::untyped_sort_variable &x)
Definition builder.h:193
void apply(T &result, const data::bag_comprehension &x)
Definition builder.h:240
void apply(T &result, const data::abstraction &x)
Definition builder.h:910
void apply(T &result, const data::application &x)
Definition builder.h:724
void apply(T &result, const data::untyped_data_parameter &x)
Definition builder.h:849
void apply(T &result, const data::untyped_identifier &x)
Definition builder.h:757
void apply(T &result, const data::data_expression &x)
Definition builder.h:858
void apply(T &result, const data::assignment_expression &x)
Definition builder.h:894
void apply(T &result, const data::where_clause &x)
Definition builder.h:737
Builder< Derived > super
Definition builder.h:695
void apply(T &result, const data::forall &x)
Definition builder.h:786
void apply(T &result, const data::function_symbol &x)
Definition builder.h:713
void apply(T &result, const data::exists &x)
Definition builder.h:795
void apply(T &result, const data::lambda &x)
Definition builder.h:804
void apply(T &result, const data::variable &x)
Definition builder.h:702
void apply(T &result, const data::assignment &x)
Definition builder.h:768
void apply(T &result, const data::untyped_identifier_assignment &x)
Definition builder.h:777
void apply(T &result, const data::untyped_set_or_bag_comprehension &x)
Definition builder.h:831
void apply(T &result, const data::set_comprehension &x)
Definition builder.h:813
void apply(T &result, const data::bag_comprehension &x)
Definition builder.h:822
void apply(T &result, const data::machine_number &x)
Definition builder.h:746
void apply(T &result, const data::data_equation &x)
Definition builder.h:840
data_expression_actions(const core::parser &parser_)
Definition parse_impl.h:141
data::data_expression parse_DataExpr(const core::parse_node &node) const
Definition parse_impl.h:211
data_specification_actions(const core::parser &parser_)
Definition parse_impl.h:300
untyped_data_specification parse_DataSpec(const core::parse_node &node) const
Definition parse_impl.h:461
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
Definition parse_impl.h:35
\brief Builder class
Definition builder.h:946
std::size_t operator()(const atermpp::detail::reference_aterm< T > &t) const