12#ifndef MCRL2_DATA_TRAVERSER_H
13#define MCRL2_DATA_TRAVERSER_H
38template <
template <
class>
class Traverser,
class Derived>
41 typedef Traverser<Derived>
super;
48 static_cast<Derived&
>(*this).enter(x);
49 static_cast<Derived&
>(*this).apply(x.
sort());
50 static_cast<Derived&
>(*this).leave(x);
55 static_cast<Derived&
>(*this).enter(x);
56 static_cast<Derived&
>(*this).apply(x.
sort());
57 static_cast<Derived&
>(*this).leave(x);
62 static_cast<Derived&
>(*this).enter(x);
63 static_cast<Derived&
>(*this).apply(x.
head());
64 for (
const data_expression& t: x) {
static_cast<Derived&
>(*this).apply(t); }
65 static_cast<Derived&
>(*this).leave(x);
70 static_cast<Derived&
>(*this).enter(x);
71 static_cast<Derived&
>(*this).apply(x.
body());
73 static_cast<Derived&
>(*this).leave(x);
78 static_cast<Derived&
>(*this).enter(x);
80 static_cast<Derived&
>(*this).leave(x);
85 static_cast<Derived&
>(*this).enter(x);
87 static_cast<Derived&
>(*this).leave(x);
92 static_cast<Derived&
>(*this).enter(x);
93 static_cast<Derived&
>(*this).apply(x.
lhs());
94 static_cast<Derived&
>(*this).apply(x.
rhs());
95 static_cast<Derived&
>(*this).leave(x);
100 static_cast<Derived&
>(*this).enter(x);
101 static_cast<Derived&
>(*this).apply(x.
rhs());
102 static_cast<Derived&
>(*this).leave(x);
107 static_cast<Derived&
>(*this).enter(x);
109 static_cast<Derived&
>(*this).leave(x);
114 static_cast<Derived&
>(*this).enter(x);
116 static_cast<Derived&
>(*this).leave(x);
121 static_cast<Derived&
>(*this).enter(x);
123 static_cast<Derived&
>(*this).leave(x);
128 static_cast<Derived&
>(*this).enter(x);
129 static_cast<Derived&
>(*this).apply(x.
domain());
130 static_cast<Derived&
>(*this).apply(x.
codomain());
131 static_cast<Derived&
>(*this).leave(x);
136 static_cast<Derived&
>(*this).enter(x);
138 static_cast<Derived&
>(*this).leave(x);
143 static_cast<Derived&
>(*this).enter(x);
144 static_cast<Derived&
>(*this).apply(x.
sorts());
145 static_cast<Derived&
>(*this).leave(x);
150 static_cast<Derived&
>(*this).enter(x);
152 static_cast<Derived&
>(*this).leave(x);
157 static_cast<Derived&
>(*this).enter(x);
158 static_cast<Derived&
>(*this).apply(x.
variables());
159 static_cast<Derived&
>(*this).apply(x.
body());
160 static_cast<Derived&
>(*this).leave(x);
165 static_cast<Derived&
>(*this).enter(x);
166 static_cast<Derived&
>(*this).apply(x.
variables());
167 static_cast<Derived&
>(*this).apply(x.
body());
168 static_cast<Derived&
>(*this).leave(x);
173 static_cast<Derived&
>(*this).enter(x);
174 static_cast<Derived&
>(*this).apply(x.
variables());
175 static_cast<Derived&
>(*this).apply(x.
body());
176 static_cast<Derived&
>(*this).leave(x);
181 static_cast<Derived&
>(*this).enter(x);
182 static_cast<Derived&
>(*this).apply(x.
variables());
183 static_cast<Derived&
>(*this).apply(x.
body());
184 static_cast<Derived&
>(*this).leave(x);
189 static_cast<Derived&
>(*this).enter(x);
190 static_cast<Derived&
>(*this).apply(x.
variables());
191 static_cast<Derived&
>(*this).apply(x.
body());
192 static_cast<Derived&
>(*this).leave(x);
197 static_cast<Derived&
>(*this).enter(x);
198 static_cast<Derived&
>(*this).apply(x.
variables());
199 static_cast<Derived&
>(*this).apply(x.
body());
200 static_cast<Derived&
>(*this).leave(x);
205 static_cast<Derived&
>(*this).enter(x);
206 static_cast<Derived&
>(*this).apply(x.
sort());
207 static_cast<Derived&
>(*this).leave(x);
212 static_cast<Derived&
>(*this).enter(x);
213 static_cast<Derived&
>(*this).apply(x.
arguments());
214 static_cast<Derived&
>(*this).leave(x);
219 static_cast<Derived&
>(*this).enter(x);
220 static_cast<Derived&
>(*this).apply(x.
reference());
221 static_cast<Derived&
>(*this).leave(x);
226 static_cast<Derived&
>(*this).enter(x);
227 static_cast<Derived&
>(*this).apply(x.
variables());
228 static_cast<Derived&
>(*this).apply(x.
condition());
229 static_cast<Derived&
>(*this).apply(x.
lhs());
230 static_cast<Derived&
>(*this).apply(x.
rhs());
231 static_cast<Derived&
>(*this).leave(x);
236 static_cast<Derived&
>(*this).enter(x);
237 static_cast<Derived&
>(*this).apply(x.
arguments());
238 static_cast<Derived&
>(*this).leave(x);
243 static_cast<Derived&
>(*this).enter(x);
246 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::abstraction>(x));
250 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::variable>(x));
254 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::function_symbol>(x));
258 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::application>(x));
262 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::where_clause>(x));
266 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::machine_number>(x));
270 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::untyped_identifier>(x));
272 static_cast<Derived&
>(*this).leave(x);
277 static_cast<Derived&
>(*this).enter(x);
280 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::assignment>(x));
284 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::untyped_identifier_assignment>(x));
286 static_cast<Derived&
>(*this).leave(x);
291 static_cast<Derived&
>(*this).enter(x);
294 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::basic_sort>(x));
298 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::container_sort>(x));
302 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::structured_sort>(x));
306 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::function_sort>(x));
310 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::untyped_sort>(x));
314 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::untyped_possible_sorts>(x));
318 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::untyped_sort_variable>(x));
320 static_cast<Derived&
>(*this).leave(x);
325 static_cast<Derived&
>(*this).enter(x);
328 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::forall>(x));
332 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::exists>(x));
336 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::lambda>(x));
340 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::set_comprehension>(x));
344 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::bag_comprehension>(x));
348 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::untyped_set_or_bag_comprehension>(x));
350 static_cast<Derived&
>(*this).leave(x);
356template <
typename Derived>
363template <
template <
class>
class Traverser,
class Derived>
373 static_cast<Derived&
>(*this).enter(x);
375 static_cast<Derived&
>(*this).leave(x);
380 static_cast<Derived&
>(*this).enter(x);
382 static_cast<Derived&
>(*this).leave(x);
387 static_cast<Derived&
>(*this).enter(x);
388 static_cast<Derived&
>(*this).apply(x.
head());
389 for (
const data_expression& t: x) {
static_cast<Derived&
>(*this).apply(t); }
390 static_cast<Derived&
>(*this).leave(x);
395 static_cast<Derived&
>(*this).enter(x);
396 static_cast<Derived&
>(*this).apply(x.
body());
398 static_cast<Derived&
>(*this).leave(x);
403 static_cast<Derived&
>(*this).enter(x);
405 static_cast<Derived&
>(*this).leave(x);
410 static_cast<Derived&
>(*this).enter(x);
412 static_cast<Derived&
>(*this).leave(x);
417 static_cast<Derived&
>(*this).enter(x);
418 static_cast<Derived&
>(*this).apply(x.
rhs());
419 static_cast<Derived&
>(*this).leave(x);
424 static_cast<Derived&
>(*this).enter(x);
425 static_cast<Derived&
>(*this).apply(x.
rhs());
426 static_cast<Derived&
>(*this).leave(x);
431 static_cast<Derived&
>(*this).enter(x);
432 static_cast<Derived&
>(*this).apply(x.
body());
433 static_cast<Derived&
>(*this).leave(x);
438 static_cast<Derived&
>(*this).enter(x);
439 static_cast<Derived&
>(*this).apply(x.
body());
440 static_cast<Derived&
>(*this).leave(x);
445 static_cast<Derived&
>(*this).enter(x);
446 static_cast<Derived&
>(*this).apply(x.
body());
447 static_cast<Derived&
>(*this).leave(x);
452 static_cast<Derived&
>(*this).enter(x);
453 static_cast<Derived&
>(*this).apply(x.
body());
454 static_cast<Derived&
>(*this).leave(x);
459 static_cast<Derived&
>(*this).enter(x);
460 static_cast<Derived&
>(*this).apply(x.
body());
461 static_cast<Derived&
>(*this).leave(x);
466 static_cast<Derived&
>(*this).enter(x);
467 static_cast<Derived&
>(*this).apply(x.
body());
468 static_cast<Derived&
>(*this).leave(x);
473 static_cast<Derived&
>(*this).enter(x);
474 static_cast<Derived&
>(*this).apply(x.
condition());
475 static_cast<Derived&
>(*this).apply(x.
lhs());
476 static_cast<Derived&
>(*this).apply(x.
rhs());
477 static_cast<Derived&
>(*this).leave(x);
482 static_cast<Derived&
>(*this).enter(x);
483 static_cast<Derived&
>(*this).apply(x.
arguments());
484 static_cast<Derived&
>(*this).leave(x);
489 static_cast<Derived&
>(*this).enter(x);
492 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::abstraction>(x));
496 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::variable>(x));
500 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::function_symbol>(x));
504 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::application>(x));
508 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::where_clause>(x));
512 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::machine_number>(x));
516 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::untyped_identifier>(x));
518 static_cast<Derived&
>(*this).leave(x);
523 static_cast<Derived&
>(*this).enter(x);
526 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::assignment>(x));
530 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::untyped_identifier_assignment>(x));
532 static_cast<Derived&
>(*this).leave(x);
537 static_cast<Derived&
>(*this).enter(x);
540 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::forall>(x));
544 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::exists>(x));
548 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::lambda>(x));
552 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::set_comprehension>(x));
556 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::bag_comprehension>(x));
560 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::untyped_set_or_bag_comprehension>(x));
562 static_cast<Derived&
>(*this).leave(x);
568template <
typename Derived>
575template <
template <
class>
class Traverser,
class Derived>
585 static_cast<Derived&
>(*this).enter(x);
587 static_cast<Derived&
>(*this).leave(x);
592 static_cast<Derived&
>(*this).enter(x);
594 static_cast<Derived&
>(*this).leave(x);
599 static_cast<Derived&
>(*this).enter(x);
600 static_cast<Derived&
>(*this).apply(x.
head());
601 for (
const data_expression& t: x) {
static_cast<Derived&
>(*this).apply(t); }
602 static_cast<Derived&
>(*this).leave(x);
607 static_cast<Derived&
>(*this).enter(x);
608 static_cast<Derived&
>(*this).apply(x.
body());
610 static_cast<Derived&
>(*this).leave(x);
615 static_cast<Derived&
>(*this).enter(x);
617 static_cast<Derived&
>(*this).leave(x);
622 static_cast<Derived&
>(*this).enter(x);
624 static_cast<Derived&
>(*this).leave(x);
629 static_cast<Derived&
>(*this).enter(x);
630 static_cast<Derived&
>(*this).apply(x.
lhs());
631 static_cast<Derived&
>(*this).apply(x.
rhs());
632 static_cast<Derived&
>(*this).leave(x);
637 static_cast<Derived&
>(*this).enter(x);
638 static_cast<Derived&
>(*this).apply(x.
rhs());
639 static_cast<Derived&
>(*this).leave(x);
644 static_cast<Derived&
>(*this).enter(x);
645 static_cast<Derived&
>(*this).apply(x.
variables());
646 static_cast<Derived&
>(*this).apply(x.
body());
647 static_cast<Derived&
>(*this).leave(x);
652 static_cast<Derived&
>(*this).enter(x);
653 static_cast<Derived&
>(*this).apply(x.
variables());
654 static_cast<Derived&
>(*this).apply(x.
body());
655 static_cast<Derived&
>(*this).leave(x);
660 static_cast<Derived&
>(*this).enter(x);
661 static_cast<Derived&
>(*this).apply(x.
variables());
662 static_cast<Derived&
>(*this).apply(x.
body());
663 static_cast<Derived&
>(*this).leave(x);
668 static_cast<Derived&
>(*this).enter(x);
669 static_cast<Derived&
>(*this).apply(x.
variables());
670 static_cast<Derived&
>(*this).apply(x.
body());
671 static_cast<Derived&
>(*this).leave(x);
676 static_cast<Derived&
>(*this).enter(x);
677 static_cast<Derived&
>(*this).apply(x.
variables());
678 static_cast<Derived&
>(*this).apply(x.
body());
679 static_cast<Derived&
>(*this).leave(x);
684 static_cast<Derived&
>(*this).enter(x);
685 static_cast<Derived&
>(*this).apply(x.
variables());
686 static_cast<Derived&
>(*this).apply(x.
body());
687 static_cast<Derived&
>(*this).leave(x);
692 static_cast<Derived&
>(*this).enter(x);
693 static_cast<Derived&
>(*this).apply(x.
variables());
694 static_cast<Derived&
>(*this).apply(x.
condition());
695 static_cast<Derived&
>(*this).apply(x.
lhs());
696 static_cast<Derived&
>(*this).apply(x.
rhs());
697 static_cast<Derived&
>(*this).leave(x);
702 static_cast<Derived&
>(*this).enter(x);
703 static_cast<Derived&
>(*this).apply(x.
arguments());
704 static_cast<Derived&
>(*this).leave(x);
709 static_cast<Derived&
>(*this).enter(x);
712 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::abstraction>(x));
716 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::variable>(x));
720 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::function_symbol>(x));
724 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::application>(x));
728 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::where_clause>(x));
732 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::machine_number>(x));
736 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::untyped_identifier>(x));
738 static_cast<Derived&
>(*this).leave(x);
743 static_cast<Derived&
>(*this).enter(x);
746 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::assignment>(x));
750 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::untyped_identifier_assignment>(x));
752 static_cast<Derived&
>(*this).leave(x);
757 static_cast<Derived&
>(*this).enter(x);
760 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::forall>(x));
764 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::exists>(x));
768 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::lambda>(x));
772 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::set_comprehension>(x));
776 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::bag_comprehension>(x));
780 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::untyped_set_or_bag_comprehension>(x));
782 static_cast<Derived&
>(*this).leave(x);
788template <
typename Derived>
795template <
template <
class>
class Traverser,
class Derived>
805 static_cast<Derived&
>(*this).enter(x);
806 static_cast<Derived&
>(*this).apply(x.
name());
807 static_cast<Derived&
>(*this).apply(x.
sort());
808 static_cast<Derived&
>(*this).leave(x);
813 static_cast<Derived&
>(*this).enter(x);
814 static_cast<Derived&
>(*this).apply(x.
name());
815 static_cast<Derived&
>(*this).apply(x.
sort());
816 static_cast<Derived&
>(*this).leave(x);
821 static_cast<Derived&
>(*this).enter(x);
822 static_cast<Derived&
>(*this).apply(x.
head());
823 for (
const data_expression& t: x) {
static_cast<Derived&
>(*this).apply(t); }
824 static_cast<Derived&
>(*this).leave(x);
829 static_cast<Derived&
>(*this).enter(x);
830 static_cast<Derived&
>(*this).apply(x.
body());
832 static_cast<Derived&
>(*this).leave(x);
837 static_cast<Derived&
>(*this).enter(x);
839 static_cast<Derived&
>(*this).leave(x);
844 static_cast<Derived&
>(*this).enter(x);
845 static_cast<Derived&
>(*this).apply(x.
name());
846 static_cast<Derived&
>(*this).leave(x);
851 static_cast<Derived&
>(*this).enter(x);
852 static_cast<Derived&
>(*this).apply(x.
lhs());
853 static_cast<Derived&
>(*this).apply(x.
rhs());
854 static_cast<Derived&
>(*this).leave(x);
859 static_cast<Derived&
>(*this).enter(x);
860 static_cast<Derived&
>(*this).apply(x.
lhs());
861 static_cast<Derived&
>(*this).apply(x.
rhs());
862 static_cast<Derived&
>(*this).leave(x);
867 static_cast<Derived&
>(*this).enter(x);
868 static_cast<Derived&
>(*this).apply(x.
name());
869 static_cast<Derived&
>(*this).leave(x);
874 static_cast<Derived&
>(*this).enter(x);
876 static_cast<Derived&
>(*this).leave(x);
881 static_cast<Derived&
>(*this).enter(x);
883 static_cast<Derived&
>(*this).leave(x);
888 static_cast<Derived&
>(*this).enter(x);
889 static_cast<Derived&
>(*this).apply(x.
domain());
890 static_cast<Derived&
>(*this).apply(x.
codomain());
891 static_cast<Derived&
>(*this).leave(x);
896 static_cast<Derived&
>(*this).enter(x);
898 static_cast<Derived&
>(*this).leave(x);
903 static_cast<Derived&
>(*this).enter(x);
904 static_cast<Derived&
>(*this).apply(x.
sorts());
905 static_cast<Derived&
>(*this).leave(x);
910 static_cast<Derived&
>(*this).enter(x);
912 static_cast<Derived&
>(*this).leave(x);
917 static_cast<Derived&
>(*this).enter(x);
918 static_cast<Derived&
>(*this).apply(x.
variables());
919 static_cast<Derived&
>(*this).apply(x.
body());
920 static_cast<Derived&
>(*this).leave(x);
925 static_cast<Derived&
>(*this).enter(x);
926 static_cast<Derived&
>(*this).apply(x.
variables());
927 static_cast<Derived&
>(*this).apply(x.
body());
928 static_cast<Derived&
>(*this).leave(x);
933 static_cast<Derived&
>(*this).enter(x);
934 static_cast<Derived&
>(*this).apply(x.
variables());
935 static_cast<Derived&
>(*this).apply(x.
body());
936 static_cast<Derived&
>(*this).leave(x);
941 static_cast<Derived&
>(*this).enter(x);
942 static_cast<Derived&
>(*this).apply(x.
variables());
943 static_cast<Derived&
>(*this).apply(x.
body());
944 static_cast<Derived&
>(*this).leave(x);
949 static_cast<Derived&
>(*this).enter(x);
950 static_cast<Derived&
>(*this).apply(x.
variables());
951 static_cast<Derived&
>(*this).apply(x.
body());
952 static_cast<Derived&
>(*this).leave(x);
957 static_cast<Derived&
>(*this).enter(x);
958 static_cast<Derived&
>(*this).apply(x.
variables());
959 static_cast<Derived&
>(*this).apply(x.
body());
960 static_cast<Derived&
>(*this).leave(x);
965 static_cast<Derived&
>(*this).enter(x);
966 static_cast<Derived&
>(*this).apply(x.
name());
967 static_cast<Derived&
>(*this).apply(x.
sort());
968 static_cast<Derived&
>(*this).leave(x);
973 static_cast<Derived&
>(*this).enter(x);
974 static_cast<Derived&
>(*this).apply(x.
name());
975 static_cast<Derived&
>(*this).apply(x.
arguments());
976 static_cast<Derived&
>(*this).apply(x.
recogniser());
977 static_cast<Derived&
>(*this).leave(x);
982 static_cast<Derived&
>(*this).enter(x);
983 static_cast<Derived&
>(*this).apply(x.
name());
984 static_cast<Derived&
>(*this).apply(x.
reference());
985 static_cast<Derived&
>(*this).leave(x);
990 static_cast<Derived&
>(*this).enter(x);
991 static_cast<Derived&
>(*this).apply(x.
variables());
992 static_cast<Derived&
>(*this).apply(x.
condition());
993 static_cast<Derived&
>(*this).apply(x.
lhs());
994 static_cast<Derived&
>(*this).apply(x.
rhs());
995 static_cast<Derived&
>(*this).leave(x);
1000 static_cast<Derived&
>(*this).enter(x);
1001 static_cast<Derived&
>(*this).apply(x.
name());
1002 static_cast<Derived&
>(*this).apply(x.
arguments());
1003 static_cast<Derived&
>(*this).leave(x);
1008 static_cast<Derived&
>(*this).enter(x);
1011 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::abstraction>(x));
1015 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::variable>(x));
1019 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::function_symbol>(x));
1023 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::application>(x));
1027 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::where_clause>(x));
1031 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::machine_number>(x));
1035 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::untyped_identifier>(x));
1037 static_cast<Derived&
>(*this).leave(x);
1042 static_cast<Derived&
>(*this).enter(x);
1045 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::assignment>(x));
1049 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::untyped_identifier_assignment>(x));
1051 static_cast<Derived&
>(*this).leave(x);
1056 static_cast<Derived&
>(*this).enter(x);
1059 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::basic_sort>(x));
1063 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::container_sort>(x));
1067 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::structured_sort>(x));
1071 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::function_sort>(x));
1075 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::untyped_sort>(x));
1079 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::untyped_possible_sorts>(x));
1083 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::untyped_sort_variable>(x));
1085 static_cast<Derived&
>(*this).leave(x);
1090 static_cast<Derived&
>(*this).enter(x);
1093 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::forall>(x));
1097 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::exists>(x));
1101 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::lambda>(x));
1105 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::set_comprehension>(x));
1109 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::bag_comprehension>(x));
1113 static_cast<Derived&
>(*this).apply(atermpp::down_cast<data::untyped_set_or_bag_comprehension>(x));
1115 static_cast<Derived&
>(*this).leave(x);
1121template <
typename Derived>
add your file description here.
An abstraction expression.
const variable_list & variables() const
const data_expression & body() const
const basic_sort & name() const
const sort_expression & reference() const
An application of a data expression to a number of arguments.
const data_expression & head() const
Get the function at the head of this expression.
\brief Assignment expression
\brief Assignment of a data expression to a variable
const data_expression & rhs() const
const variable & lhs() const
universal quantification.
const core::identifier_string & name() const
const sort_expression & element_sort() const
const data_expression & lhs() const
const data_expression & condition() const
const data_expression & rhs() const
const variable_list & variables() const
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.
\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
const core::identifier_string & name() const
\brief Multiple possible sorts
const sort_expression_list & sorts() const
universal quantification.
\brief Untyped sort variable
\brief Unknown sort expression
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
add your file description here.
The class machine_number, which is a subclass of data_expression.
bool is_structured_sort(const atermpp::aterm &x)
Returns true if the term t is a structured sort.
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.
bool is_abstraction(const atermpp::aterm &x)
Returns true if the term t is an abstraction.
bool is_untyped_identifier(const atermpp::aterm &x)
Returns true if the term t is an identifier.
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.
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)
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)
bool is_exists(const atermpp::aterm &x)
Returns true if the term t is an existential quantification.
bool is_function_sort(const atermpp::aterm &x)
Returns true if the term t is a function sort.
bool is_bag_comprehension(const atermpp::aterm &x)
Returns true if the term t is a bag comprehension.
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.
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)
bool is_application(const atermpp::aterm &x)
Returns true if the term t is an application.
bool is_variable(const atermpp::aterm &x)
Returns true if the term t is a variable.
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
add your file description here.
void apply(const data::function_symbol &x)
void apply(const data::set_comprehension &x)
void apply(const data::untyped_identifier &x)
void apply(const data::untyped_set_or_bag_comprehension &x)
void apply(const data::application &x)
void apply(const data::forall &x)
void apply(const data::data_equation &x)
void apply(const data::exists &x)
void apply(const data::lambda &x)
void apply(const data::machine_number &x)
void apply(const data::untyped_identifier_assignment &x)
void apply(const data::data_expression &x)
void apply(const data::where_clause &x)
void apply(const data::bag_comprehension &x)
void apply(const data::abstraction &x)
void apply(const data::assignment_expression &x)
Traverser< Derived > super
void apply(const data::variable &x)
void apply(const data::assignment &x)
void apply(const data::untyped_data_parameter &x)
void apply(const data::untyped_possible_sorts &x)
void apply(const data::forall &x)
void apply(const data::structured_sort_constructor_argument &x)
void apply(const data::application &x)
void apply(const data::untyped_sort_variable &x)
void apply(const data::basic_sort &x)
void apply(const data::bag_comprehension &x)
void apply(const data::assignment_expression &x)
void apply(const data::untyped_sort &x)
void apply(const data::assignment &x)
void apply(const data::exists &x)
void apply(const data::untyped_set_or_bag_comprehension &x)
void apply(const data::untyped_data_parameter &x)
void apply(const data::structured_sort &x)
void apply(const data::function_sort &x)
void apply(const data::data_equation &x)
void apply(const data::container_sort &x)
Traverser< Derived > super
void apply(const data::machine_number &x)
void apply(const data::alias &x)
void apply(const data::abstraction &x)
void apply(const data::structured_sort_constructor &x)
void apply(const data::variable &x)
void apply(const data::function_symbol &x)
void apply(const data::untyped_identifier &x)
void apply(const data::data_expression &x)
void apply(const data::set_comprehension &x)
void apply(const data::untyped_identifier_assignment &x)
void apply(const data::sort_expression &x)
void apply(const data::where_clause &x)
void apply(const data::lambda &x)
void apply(const data::untyped_identifier_assignment &x)
void apply(const data::assignment &x)
void apply(const data::sort_expression &x)
void apply(const data::where_clause &x)
void apply(const data::data_expression &x)
void apply(const data::alias &x)
void apply(const data::lambda &x)
void apply(const data::basic_sort &x)
void apply(const data::variable &x)
void apply(const data::untyped_possible_sorts &x)
void apply(const data::untyped_identifier &x)
void apply(const data::untyped_sort_variable &x)
void apply(const data::untyped_set_or_bag_comprehension &x)
void apply(const data::forall &x)
Traverser< Derived > super
void apply(const data::application &x)
void apply(const data::structured_sort_constructor_argument &x)
void apply(const data::structured_sort_constructor &x)
void apply(const data::untyped_sort &x)
void apply(const data::machine_number &x)
void apply(const data::function_sort &x)
void apply(const data::container_sort &x)
void apply(const data::set_comprehension &x)
void apply(const data::data_equation &x)
void apply(const data::structured_sort &x)
void apply(const data::assignment_expression &x)
void apply(const data::bag_comprehension &x)
void apply(const data::exists &x)
void apply(const data::abstraction &x)
void apply(const data::untyped_data_parameter &x)
void apply(const data::function_symbol &x)
void apply(const data::untyped_set_or_bag_comprehension &x)
void apply(const data::untyped_identifier_assignment &x)
void apply(const data::untyped_data_parameter &x)
void apply(const data::data_expression &x)
void apply(const data::bag_comprehension &x)
void apply(const data::data_equation &x)
void apply(const data::where_clause &x)
void apply(const data::set_comprehension &x)
void apply(const data::exists &x)
Traverser< Derived > super
void apply(const data::untyped_identifier &x)
void apply(const data::variable &x)
void apply(const data::abstraction &x)
void apply(const data::forall &x)
void apply(const data::assignment_expression &x)
void apply(const data::assignment &x)
void apply(const data::application &x)
void apply(const data::function_symbol &x)
void apply(const data::lambda &x)
void apply(const data::machine_number &x)
The class structured_sort.
add your file description here.
add your file description here.
add your file description here.
add your file description here.