11#include <ext/typeinfo>
20#include <string/String.h>
54 static constexpr const size_t CAPTION_LENGTH_LIMIT = 100;
56 template <
class SymbolType,
class StateType >
59 template <
class SymbolType,
class StateType >
62 template <
class SymbolType,
class StateType >
65 template <
class SymbolType,
class StateType >
68 template <
class SymbolType,
class StateType >
71 template <
class SymbolType,
class StateType >
74 template <
class SymbolType,
class StateType >
77 template <
class SymbolType,
class StateType >
80 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
83 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
86 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
89 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
92 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
95 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
98 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
101 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
104 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
107 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
110 template <
class SymbolType,
class StateType >
113 template<
typename TGr
id>
117 template <
class SymbolType,
class StateType >
120 template <
class SymbolType,
class StateType >
123 template <
class SymbolType,
class StateType >
126 template <
class SymbolType,
class StateType >
129 template <
class SymbolType,
class StateType >
132 template <
class SymbolType,
class StateType >
135 template <
class SymbolType,
class StateType >
138 template <
class SymbolType,
class StateType >
141 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
144 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
147 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
150 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
153 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
156 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
159 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
162 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
165 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
168 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
171 template <
class SymbolType,
class StateType >
174 template<
typename TCoordinate,
typename TEdge>
179 template<
typename TCoordinate,
typename TEdge>
184 template<
typename TCoordinate,
typename TEdge>
189 template<
typename TCoordinate,
typename TEdge>
201 template <
class SymbolType >
211 template <
class SymbolType >
215template<
class SymbolType,
class StateType>
217 out <<
"\\begin{tikzpicture}\n";
227 for (
const auto & state : states ) {
231 mods +=
",accepting";
239 transitions ( a, states, out );
240 out <<
"\\end{tikzpicture}";
243template<
class SymbolType,
class StateType>
245 out <<
"\\begin{tikzpicture}\n";
255 for (
const auto & state : states ) {
259 mods +=
",accepting";
267 transitions ( a, states, out );
268 out <<
"\\end{tikzpicture}";
271template<
class SymbolType,
class StateType>
273 out <<
"\\begin{tikzpicture}\n";
283 for (
const auto & state : states ) {
287 mods +=
",accepting";
295 transitions ( a, states, out );
296 out <<
"\\end{tikzpicture}";
299template<
class SymbolType,
class StateType>
301 out <<
"\\begin{tikzpicture}\n";
311 for (
const auto & state : states ) {
315 mods +=
",accepting";
323 transitions ( a, states, out );
324 out <<
"\\end{tikzpicture}";
327template<
class SymbolType,
class StateType>
329 out <<
"\\begin{tikzpicture}\n";
339 for (
const auto & state : states ) {
343 mods +=
",accepting";
351 transitions ( a, states, out );
352 out <<
"\\end{tikzpicture}";
355template<
class SymbolType,
class StateType>
357 out <<
"\\begin{tikzpicture}\n";
367 for (
const auto & state : states ) {
371 mods +=
",accepting";
379 transitions ( a, states, out );
380 out <<
"\\end{tikzpicture}";
383template<
class SymbolType,
class StateType>
385 out <<
"\\begin{tikzpicture}\n";
395 for (
const auto & state : states ) {
399 mods +=
",accepting";
404 transitions ( a, states, out );
405 out <<
"\\end{tikzpicture}";
408template<
class SymbolType,
class StateType>
410 out <<
"\\begin{tikzpicture}\n";
420 for (
const auto & state : states ) {
424 mods +=
",accepting";
429 transitions ( a, states, out );
430 out <<
"\\end{tikzpicture}";
433template<
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType>
435 out <<
"\\begin{tikzpicture}\n";
445 for (
const auto & state : states ) {
449 mods +=
",accepting";
457 transitions ( a, states, out );
458 out <<
"\\end{tikzpicture}";
461template<
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType>
463 out <<
"\\begin{tikzpicture}\n";
473 for (
const auto & state : states ) {
477 mods +=
",accepting";
485 transitions ( a, states, out );
486 out <<
"\\end{tikzpicture}";
489template<
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType>
491 out <<
"\\begin{tikzpicture}\n";
501 for (
const auto & state : states ) {
505 mods +=
",accepting";
513 transitions ( a, states, out );
514 out <<
"\\end{tikzpicture}";
517template<
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType>
519 out <<
"\\begin{tikzpicture}\n";
529 for (
const auto & state : states ) {
533 mods +=
",accepting";
541 transitions ( a, states, out );
542 out <<
"\\end{tikzpicture}";
545template<
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType>
547 out <<
"\\begin{tikzpicture}\n";
557 for (
const auto & state : states ) {
561 mods +=
",accepting";
569 transitions ( a, states, out );
570 out <<
"\\end{tikzpicture}";
573template<
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType>
575 out <<
"\\begin{tikzpicture}\n";
585 for (
const auto & state : states ) {
589 mods +=
",accepting";
597 transitions ( a, states, out );
598 out <<
"\\end{tikzpicture}";
601template<
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType>
603 out <<
"\\begin{tikzpicture}\n";
613 for (
const auto & state : states ) {
617 mods +=
",accepting";
625 transitions ( a, states, out );
626 out <<
"\\end{tikzpicture}";
629template<
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType>
631 out <<
"\\begin{tikzpicture}\n";
641 for (
const auto & state : states ) {
645 mods +=
",accepting";
653 transitions ( a, states, out );
654 out <<
"\\end{tikzpicture}";
657template<
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType>
659 out <<
"\\begin{tikzpicture}\n";
669 for (
const auto & state : states ) {
673 mods +=
",accepting";
681 transitions ( a, states, out );
682 out <<
"\\end{tikzpicture}";
685template<
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType>
687 out <<
"\\begin{tikzpicture}\n";
697 for (
const auto & state : states ) {
701 mods +=
",accepting";
709 transitions ( a, states, out );
710 out <<
"\\end{tikzpicture}";
713template<
class SymbolType,
class StateType>
715 out <<
"\\begin{tikzpicture}\n";
725 for (
const auto & state : states ) {
729 mods +=
",accepting";
737 transitions ( a, states, out );
738 out <<
"\\end{tikzpicture}";
741template<
class SymbolType,
class StateType>
749 if ( transition.first.second.is_epsilon ( ) )
750 symbol =
"ε";
754 std::pair < int, int > key ( states.find ( transition.first.first )->second, states.find ( transition.second )->second );
757 if ( mapit == transitions.
end ( ) ) {
760 mapit->second +=
",";
762 size_t pos = mapit->second.find_last_of (
"\n" );
764 if ( pos == std::string::npos ) pos = 0;
766 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
767 mapit->second +=
"\n";
769 mapit->second +=
" ";
771 mapit->second += symbol;
778 for ( std::pair <
const std::pair < int, int >, std::string > & transition : transitions ) {
781 out <<
"(" << transition.first.first <<
") edge [left] node [align=center] ";
782 out <<
"{$" << transition.second <<
"$}";
783 out <<
"(" << transition.first.second <<
")\n";
787template<
class SymbolType,
class StateType>
795 std::pair < int, int > key ( states.find ( transition.first.first )->second, states.find ( transition.second )->second );
798 if ( mapit == transitions.
end ( ) ) {
801 mapit->second +=
",";
803 size_t pos = mapit->second.find_last_of (
"\n" );
805 if ( pos == std::string::npos ) pos = 0;
807 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
808 mapit->second +=
"\n";
810 mapit->second +=
" ";
812 mapit->second += symbol;
819 for ( std::pair <
const std::pair < int, int >, std::string > & transition : transitions ) {
822 out <<
"(" << transition.first.first <<
") edge [left] node [align=center] ";
823 out <<
"{$" << transition.second <<
"$}";
824 out <<
"(" << transition.first.second <<
")\n";
828template<
class SymbolType,
class StateType>
836 std::pair < int, int > key ( states.find ( transition.first.first )->second, states.find ( transition.second )->second );
839 if ( mapit == transitions.
end ( ) ) {
842 mapit->second +=
",";
844 size_t pos = mapit->second.find_last_of (
"\n" );
846 if ( pos == std::string::npos ) pos = 0;
848 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
849 mapit->second +=
"\n";
851 mapit->second +=
" ";
853 mapit->second += symbol;
860 for ( std::pair <
const std::pair < int, int >, std::string > & transition : transitions ) {
863 out <<
"(" << transition.first.first <<
") edge [left] node [align=center] ";
864 out <<
"{$" << transition.second <<
"$}";
865 out <<
"(" << transition.first.second <<
")\n";
869template<
class SymbolType,
class StateType>
877 std::pair < int, int > key ( states.find ( transition.first.first )->second, states.find ( transition.second )->second );
880 if ( mapit == transitions.
end ( ) ) {
883 mapit->second +=
",";
885 size_t pos = mapit->second.find_last_of (
"\n" );
887 if ( pos == std::string::npos ) pos = 0;
889 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
890 mapit->second +=
"\n";
892 mapit->second +=
" ";
894 mapit->second += symbol;
901 for ( std::pair <
const std::pair < int, int >, std::string > & transition : transitions ) {
904 out <<
"(" << transition.first.first <<
") edge [left] node [align=center] ";
905 out <<
"{$" << transition.second <<
"$}";
906 out <<
"(" << transition.first.second <<
")\n";
910template<
class SymbolType,
class StateType>
918 std::pair < int, int > key ( states.find ( transition.first.first )->second, states.find ( transition.second )->second );
921 if ( mapit == transitions.
end ( ) ) {
924 mapit->second +=
",";
926 size_t pos = mapit->second.find_last_of (
"\n" );
928 if ( pos == std::string::npos ) pos = 0;
930 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
931 mapit->second +=
"\n";
933 mapit->second +=
" ";
935 mapit->second += symbol;
942 for ( std::pair <
const std::pair < int, int >, std::string > & transition : transitions ) {
945 out <<
"(" << transition.first.first <<
") edge [left] node [align=center] ";
946 out <<
"{$" << transition.second <<
"$}";
947 out <<
"(" << transition.first.second <<
")\n";
951template<
class SymbolType,
class StateType>
959 std::pair < int, int > key ( states.find ( transition.first.first )->second, states.find ( transition.second )->second );
962 if ( mapit == transitions.
end ( ) ) {
965 mapit->second +=
",";
967 size_t pos = mapit->second.find_last_of (
"\n" );
969 if ( pos == std::string::npos ) pos = 0;
971 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
972 mapit->second +=
"\n";
974 mapit->second +=
" ";
976 mapit->second += symbol;
983 for ( std::pair <
const std::pair < int, int >, std::string > & transition : transitions ) {
986 out <<
"(" << transition.first.first <<
") edge [left] node [align=center] ";
987 out <<
"{$" << transition.second <<
"$}";
988 out <<
"(" << transition.first.second <<
")\n";
992template<
class SymbolType,
class StateType>
1001 std::pair < int, ext::vector < int > > key ( states.find ( transition.second )->second, { } );
1003 for (
const StateType & state : transition.first.second )
1004 key.second.push_back ( states.find ( state )->second );
1008 if ( mapit == transitions.
end ( ) ) {
1011 mapit->second +=
",";
1013 size_t pos = mapit->second.find_last_of (
"\n" );
1015 if ( pos == std::string::npos ) pos = 0;
1017 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
1018 mapit->second +=
"\n";
1020 mapit->second +=
" ";
1022 mapit->second += symbol;
1027 for (
unsigned i = 1;
i < transitions.size ( );
i++ )
1028 out <<
"\\node[draw=none,fill=none] (" << states.size ( ) +
i <<
") {}\n";
1030 out <<
"\\path[->]";
1033 unsigned i = states.size ( ) + 1;
1035 for ( std::pair <
const std::pair <
int,
ext::vector < int > >, std::string > & transition : transitions ) {
1038 out <<
"(" <<
i <<
") edge [left] node [align=center] ";
1039 out <<
"{$" << transition.second <<
"$}";
1040 out <<
"(" << transition.first.first <<
")\n";
1044 for (
int from : transition.first.second ) {
1045 out <<
"(" << from <<
") edge [left] node [align=center] ";
1046 out <<
"{$" << j <<
"$}";
1047 out <<
"(" <<
i <<
")\n";
1056template<
class SymbolType,
class StateType>
1065 std::pair < int, ext::vector < int > > key ( states.find ( transition.second )->second, { } );
1067 for (
const StateType & state : transition.first.second )
1068 key.second.push_back ( states.find ( state )->second );
1072 if ( mapit == transitions.
end ( ) ) {
1075 mapit->second +=
",";
1077 size_t pos = mapit->second.find_last_of (
"\n" );
1079 if ( pos == std::string::npos ) pos = 0;
1081 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
1082 mapit->second +=
"\n";
1084 mapit->second +=
" ";
1086 mapit->second += symbol;
1091 for (
unsigned i = 1;
i < transitions.size ( );
i++ )
1092 out <<
"\\node[draw=none,fill=none] (" << states.size ( ) +
i <<
") {}\n";
1094 out <<
"\\path[->]";
1097 unsigned i = states.size ( ) + 1;
1099 for ( std::pair <
const std::pair <
int,
ext::vector < int > >, std::string > & transition : transitions ) {
1102 out <<
"(" <<
i <<
") edge [left] node [align=center] ";
1103 out <<
"{$" << transition.second <<
"$}";
1104 out <<
"(" << transition.first.first <<
")\n";
1108 for (
int from : transition.first.second ) {
1109 out <<
"(" << from <<
") edge [left] node [align=center] ";
1110 out <<
"{$" << j <<
"$}";
1111 out <<
"(" <<
i <<
")\n";
1120template<
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType>
1128 if ( std::get < 1 > ( transition.first ).is_epsilon ( ) )
1129 symbol =
"ε";
1136 if ( std::get < 2 > ( transition.first ).empty ( ) )
1137 symbol +=
" ε";
1139 for (
const PushdownStoreSymbolType & symb : std::get < 2 > ( transition.first ) )
1145 if ( transition.second.second.empty ( ) )
1146 symbol +=
" ε";
1148 for (
const PushdownStoreSymbolType & symb : transition.second.second )
1152 std::pair < int, int > key ( states.find ( std::get < 0 > ( transition.first ) )->second, states.find ( transition.second.first )->second );
1155 if ( mapit == transitions.
end ( ) ) {
1158 mapit->second +=
",";
1160 size_t pos = mapit->second.find_last_of (
"\n" );
1162 if ( pos == std::string::npos ) pos = 0;
1164 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
1165 mapit->second +=
"\n";
1167 mapit->second +=
" ";
1169 mapit->second += symbol;
1173 out <<
"\\path[->]";
1176 for ( std::pair <
const std::pair < int, int >, std::string > & transition : transitions ) {
1179 out <<
"(" << transition.first.first <<
") edge [left] node [align=center] ";
1180 out <<
"{$" << transition.second <<
"$}";
1181 out <<
"(" << transition.first.second <<
")\n";
1185template<
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType>
1193 if ( std::get < 1 > ( transition.first ).is_epsilon ( ) )
1194 symbol =
"ε";
1206 if ( transition.second.second.empty ( ) )
1207 symbol +=
" ε";
1209 for (
const PushdownStoreSymbolType & symb : transition.second.second )
1213 std::pair < int, int > key ( states.find ( std::get < 0 > ( transition.first ) )->second, states.find ( transition.second.first )->second );
1216 if ( mapit == transitions.
end ( ) ) {
1219 mapit->second +=
",";
1221 size_t pos = mapit->second.find_last_of (
"\n" );
1223 if ( pos == std::string::npos ) pos = 0;
1225 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
1226 mapit->second +=
"\n";
1228 mapit->second +=
" ";
1230 mapit->second += symbol;
1234 out <<
"\\path[->]";
1237 for ( std::pair <
const std::pair < int, int >, std::string > & transition : transitions ) {
1240 out <<
"(" << transition.first.first <<
") edge [left] node [align=center] ";
1241 out <<
"{$" << transition.second <<
"$}";
1242 out <<
"(" << transition.first.second <<
")\n";
1246template<
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType>
1253 const auto & pop = symbolToPDSOperation.find ( transition.first.second )->second.first;
1254 const auto & push = symbolToPDSOperation.find ( transition.first.second )->second.second;
1262 if ( pop.empty ( ) )
1263 symbol +=
" ε";
1265 for (
const PushdownStoreSymbolType & symb : pop )
1270 const auto & to = transition.second;
1273 if ( push.empty ( ) )
1274 symbol +=
" ε";
1276 for (
const PushdownStoreSymbolType & symb : push )
1280 std::pair < int, int > key ( states.find ( transition.first.first )->second, states.find ( to )->second );
1283 if ( mapit == transitions.
end ( ) ) {
1286 mapit->second +=
",";
1288 size_t pos = mapit->second.find_last_of (
"\n" );
1290 if ( pos == std::string::npos ) pos = 0;
1292 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
1293 mapit->second +=
"\n";
1295 mapit->second +=
" ";
1297 mapit->second += symbol;
1301 out <<
"\\path[->]";
1304 for ( std::pair <
const std::pair < int, int >, std::string > & transition : transitions ) {
1307 out <<
"(" << transition.first.first <<
") edge [left] node [align=center] ";
1308 out <<
"{$" << transition.second <<
"$}";
1309 out <<
"(" << transition.first.second <<
")\n";
1313template<
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType>
1320 const auto & pop = symbolToPDSOperation.find ( transition.first.second )->second.first;
1321 const auto & push = symbolToPDSOperation.find ( transition.first.second )->second.second;
1329 if ( pop.empty ( ) )
1330 symbol +=
" ε";
1332 for (
const PushdownStoreSymbolType & symb : pop )
1338 if ( push.empty ( ) )
1339 symbol +=
" ε";
1341 for (
const PushdownStoreSymbolType & symb : push )
1345 std::pair < int, int > key ( states.find ( transition.first.first )->second, states.find ( transition.second )->second );
1348 if ( mapit == transitions.
end ( ) ) {
1351 mapit->second +=
",";
1353 size_t pos = mapit->second.find_last_of (
"\n" );
1355 if ( pos == std::string::npos ) pos = 0;
1357 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
1358 mapit->second +=
"\n";
1360 mapit->second +=
" ";
1362 mapit->second += symbol;
1366 out <<
"\\path[->]";
1369 for ( std::pair <
const std::pair < int, int >, std::string > & transition : transitions ) {
1372 out <<
"(" << transition.first.first <<
") edge [left] node [align=center] ";
1373 out <<
"{$" << transition.second <<
"$}";
1374 out <<
"(" << transition.first.second <<
")\n";
1378template<
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType>
1389 symbol +=
" ε";
1395 std::pair < int, int > key ( states.find ( transition.first.first )->second, states.find ( transition.second.first )->second );
1398 if ( mapit == transitions.
end ( ) ) {
1401 mapit->second +=
",";
1403 size_t pos = mapit->second.find_last_of (
"\n" );
1405 if ( pos == std::string::npos ) pos = 0;
1407 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
1408 mapit->second +=
"\n";
1410 mapit->second +=
" ";
1412 mapit->second += symbol;
1426 symbol +=
" ε";
1429 std::pair < int, int > key ( states.find ( std::get < 0 > ( transition.first ) )->second, states.find ( transition.second )->second );
1432 if ( mapit == transitions.
end ( ) ) {
1435 mapit->second +=
",";
1437 size_t pos = mapit->second.find_last_of (
"\n" );
1439 if ( pos == std::string::npos ) pos = 0;
1441 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
1442 mapit->second +=
"\n";
1444 mapit->second +=
" ";
1446 mapit->second += symbol;
1457 symbol +=
" ε";
1460 symbol +=
" ε";
1463 std::pair < int, int > key ( states.find ( transition.first.first )->second, states.find ( transition.second )->second );
1466 if ( mapit == transitions.
end ( ) ) {
1469 mapit->second +=
",";
1471 size_t pos = mapit->second.find_last_of (
"\n" );
1473 if ( pos == std::string::npos ) pos = 0;
1475 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
1476 mapit->second +=
"\n";
1478 mapit->second +=
" ";
1480 mapit->second += symbol;
1484 out <<
"\\path[->]";
1487 for ( std::pair <
const std::pair < int, int >, std::string > & transition : transitions ) {
1490 out <<
"(" << transition.first.first <<
") edge [left] node [align=center] ";
1491 out <<
"{$" << transition.second <<
"$}";
1492 out <<
"(" << transition.first.second <<
")\n";
1496template<
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType>
1507 symbol +=
" ε";
1513 std::pair < int, int > key ( states.find ( transition.first.first )->second, states.find ( transition.second.first )->second );
1516 if ( mapit == transitions.
end ( ) ) {
1519 mapit->second +=
",";
1521 size_t pos = mapit->second.find_last_of (
"\n" );
1523 if ( pos == std::string::npos ) pos = 0;
1525 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
1526 mapit->second +=
"\n";
1528 mapit->second +=
" ";
1530 mapit->second += symbol;
1544 symbol +=
" ε";
1547 std::pair < int, int > key ( states.find ( std::get < 0 > ( transition.first ) )->second, states.find ( transition.second )->second );
1550 if ( mapit == transitions.
end ( ) ) {
1553 mapit->second +=
",";
1555 size_t pos = mapit->second.find_last_of (
"\n" );
1557 if ( pos == std::string::npos ) pos = 0;
1559 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
1560 mapit->second +=
"\n";
1562 mapit->second +=
" ";
1564 mapit->second += symbol;
1577 symbol +=
" ε";
1580 symbol +=
" ε";
1583 std::pair < int, int > key ( states.find ( transition.first.first )->second, states.find ( transition.second )->second );
1586 if ( mapit == transitions.
end ( ) ) {
1589 mapit->second +=
",";
1591 size_t pos = mapit->second.find_last_of (
"\n" );
1593 if ( pos == std::string::npos ) pos = 0;
1595 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
1596 mapit->second +=
"\n";
1598 mapit->second +=
" ";
1600 mapit->second += symbol;
1604 out <<
"\\path[->]";
1607 for ( std::pair <
const std::pair < int, int >, std::string > & transition : transitions ) {
1610 out <<
"(" << transition.first.first <<
") edge [left] node [align=center] ";
1611 out <<
"{$" << transition.second <<
"$}";
1612 out <<
"(" << transition.first.second <<
")\n";
1616template<
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType>
1624 if ( transition.first.second.is_epsilon ( ) )
1625 symbol =
"&epsilon";
1632 symbol +=
" ε";
1638 std::pair < int, int > key ( states.find ( transition.first.first )->second, states.find ( transition.second.first )->second );
1641 if ( mapit == transitions.
end ( ) ) {
1644 mapit->second +=
",";
1646 size_t pos = mapit->second.find_last_of (
"\n" );
1648 if ( pos == std::string::npos ) pos = 0;
1650 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
1651 mapit->second +=
"\n";
1653 mapit->second +=
" ";
1655 mapit->second += symbol;
1663 if ( std::get < 1 > ( transition.first ).is_epsilon ( ) )
1664 symbol =
"&epsilon";
1674 symbol +=
" ε";
1677 std::pair < int, int > key ( states.find ( std::get < 0 > ( transition.first ) )->second, states.find ( transition.second )->second );
1680 if ( mapit == transitions.
end ( ) ) {
1683 mapit->second +=
",";
1685 size_t pos = mapit->second.find_last_of (
"\n" );
1687 if ( pos == std::string::npos ) pos = 0;
1689 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
1690 mapit->second +=
"\n";
1692 mapit->second +=
" ";
1694 mapit->second += symbol;
1702 if ( transition.first.second.is_epsilon ( ) )
1703 symbol =
"&epsilon";
1710 symbol +=
" ε";
1713 symbol +=
" ε";
1716 std::pair < int, int > key ( states.find ( transition.first.first )->second, states.find ( transition.second )->second );
1719 if ( mapit == transitions.
end ( ) ) {
1722 mapit->second +=
",";
1724 size_t pos = mapit->second.find_last_of (
"\n" );
1726 if ( pos == std::string::npos ) pos = 0;
1728 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
1729 mapit->second +=
"\n";
1731 mapit->second +=
" ";
1733 mapit->second += symbol;
1737 out <<
"\\path[->]";
1740 for ( std::pair <
const std::pair < int, int >, std::string > & transition : transitions ) {
1743 out <<
"(" << transition.first.first <<
") edge [left] node [align=center] ";
1744 out <<
"{$" << transition.second <<
"$}";
1745 out <<
"(" << transition.first.second <<
")\n";
1749template<
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType>
1757 if ( transition.first.second.is_epsilon ( ) )
1758 symbol =
"&epsilon";
1765 symbol +=
" ε";
1771 std::pair < int, int > key ( states.find ( transition.first.first )->second, states.find ( transition.second.first )->second );
1774 if ( mapit == transitions.
end ( ) ) {
1777 mapit->second +=
",";
1779 size_t pos = mapit->second.find_last_of (
"\n" );
1781 if ( pos == std::string::npos ) pos = 0;
1783 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
1784 mapit->second +=
"\n";
1786 mapit->second +=
" ";
1788 mapit->second += symbol;
1796 if ( std::get < 1 > ( transition.first ).is_epsilon ( ) )
1797 symbol =
"ε";
1807 symbol +=
" ε";
1810 std::pair < int, int > key ( states.find ( std::get < 0 > ( transition.first ) )->second, states.find ( transition.second )->second );
1813 if ( mapit == transitions.
end ( ) ) {
1816 mapit->second +=
",";
1818 size_t pos = mapit->second.find_last_of (
"\n" );
1820 if ( pos == std::string::npos ) pos = 0;
1822 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
1823 mapit->second +=
"\n";
1825 mapit->second +=
" ";
1827 mapit->second += symbol;
1835 if ( transition.first.second.is_epsilon ( ) )
1836 symbol =
"ε";
1843 symbol +=
" ε";
1846 symbol +=
" ε";
1849 std::pair < int, int > key ( states.find ( transition.first.first )->second, states.find ( transition.second )->second );
1852 if ( mapit == transitions.
end ( ) ) {
1855 mapit->second +=
",";
1857 size_t pos = mapit->second.find_last_of (
"\n" );
1859 if ( pos == std::string::npos ) pos = 0;
1861 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
1862 mapit->second +=
"\n";
1864 mapit->second +=
" ";
1866 mapit->second += symbol;
1870 out <<
"\\path[->]";
1873 for ( std::pair <
const std::pair < int, int >, std::string > & transition : transitions ) {
1876 out <<
"(" << transition.first.first <<
") edge [left] node [align=center] ";
1877 out <<
"{$" << transition.second <<
"$}";
1878 out <<
"(" << transition.first.second <<
")\n";
1882template<
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType>
1890 if ( std::get < 1 > ( transition.first ).is_epsilon ( ) )
1891 symbol =
"ε";
1898 if ( std::get < 2 > ( transition.first ).empty ( ) )
1899 symbol +=
" ε";
1901 for (
const PushdownStoreSymbolType & symb : std::get < 2 > ( transition.first ) )
1907 if ( transition.second.second.empty ( ) )
1908 symbol +=
" ε";
1910 for (
const PushdownStoreSymbolType & symb : transition.second.second )
1914 std::pair < int, int > key ( states.find ( std::get < 0 > ( transition.first ) )->second, states.find ( transition.second.first )->second );
1917 if ( mapit == transitions.
end ( ) ) {
1920 mapit->second +=
",";
1922 size_t pos = mapit->second.find_last_of (
"\n" );
1924 if ( pos == std::string::npos ) pos = 0;
1926 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
1927 mapit->second +=
"\n";
1929 mapit->second +=
" ";
1931 mapit->second += symbol;
1935 out <<
"\\path[->]";
1938 for ( std::pair <
const std::pair < int, int >, std::string > & transition : transitions ) {
1941 out <<
"(" << transition.first.first <<
") edge [left] node [align=center] ";
1942 out <<
"{$" << transition.second <<
"$}";
1943 out <<
"(" << transition.first.second <<
")\n";
1947template<
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType>
1955 if ( std::get < 1 > ( transition.first ).is_epsilon ( ) )
1956 symbol =
"ε";
1968 if ( transition.second.second.empty ( ) )
1969 symbol +=
" ε";
1971 for (
const PushdownStoreSymbolType & symb : transition.second.second )
1975 std::pair < int, int > key ( states.find ( std::get < 0 > ( transition.first ) )->second, states.find ( transition.second.first )->second );
1978 if ( mapit == transitions.
end ( ) ) {
1981 mapit->second +=
",";
1983 size_t pos = mapit->second.find_last_of (
"\n" );
1985 if ( pos == std::string::npos ) pos = 0;
1987 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
1988 mapit->second +=
"\n";
1990 mapit->second +=
" ";
1992 mapit->second += symbol;
1996 out <<
"\\path[->]";
1999 for ( std::pair <
const std::pair < int, int >, std::string > & transition : transitions ) {
2002 out <<
"(" << transition.first.first <<
") edge [left] node [align=center] ";
2003 out <<
"{$" << transition.second <<
"$}";
2004 out <<
"(" << transition.first.second <<
")\n";
2008template<
class SymbolType,
class StateType>
2022 switch ( std::get < 2 > ( transition.second ) ) {
2032 symbol +=
"×";
2040 std::pair < int, int > key ( states.find ( transition.first.first )->second, states.find ( std::get < 0 > ( transition.second ) )->second );
2043 if ( mapit == transitions.
end ( ) ) {
2046 mapit->second +=
",";
2048 size_t pos = mapit->second.find_last_of (
"\n" );
2050 if ( pos == std::string::npos ) pos = 0;
2052 if ( mapit->second.size ( ) - pos > CAPTION_LENGTH_LIMIT )
2053 mapit->second +=
"\n";
2055 mapit->second +=
" ";
2057 mapit->second += symbol;
2061 out <<
"\\path[->]";
2064 for ( std::pair <
const std::pair < int, int >, std::string > & transition : transitions ) {
2067 out <<
"(" << transition.first.first <<
") edge [left] node [align=center] ";
2068 out <<
"{$" << transition.second <<
"$}";
2069 out <<
"(" << transition.first.second <<
")\n";
2073template<
typename TGr
id>
2074void TikZConverter::grid(
ext::ostream &out,
const TGrid &a) {
2075 out <<
"\\begin{tikzpicture}[ultra thin/.style= {line width=0.1pt}]\n";
2076 long width = a.getWidth();
2077 long height = a.getHeight();
2079 out <<
"\t\\draw[step=1cm, gray,very thin] (0,0) grid (" << width <<
"," << height <<
");\n";
2081 for (
const auto &
node : a.getObstacleList()) {
2082 out <<
"\t\\fill[draw=gray, fill=black, very thin] ("
2083 <<
node.second <<
"," << height -
node.first - 1
2085 <<
node.second + 1 <<
"," << height -
node.first <<
");\n";
2088 out <<
"\\end{tikzpicture}\n";
2091template <
class SymbolType >
2094 out <<
"\\begin{forest}\n";
2096 rte.getRTE ( ).getStructure ( ).template accept < void, TikZConverter::FormalRTEVisitor < SymbolType > > ( oss );
2097 out <<
" " << oss.
str ( ) <<
"\n";
2099 out <<
"\\end{forest}" << std::endl;
2102template <
class SymbolType >
2105 node.getLeftElement ( ).template accept < void, TikZConverter::FormalRTEVisitor < SymbolType > > ( out );
2106 node.getRightElement ( ).template accept < void, TikZConverter::FormalRTEVisitor < SymbolType > > ( out );
2110template <
class SymbolType >
2112 out <<
"[$\\cdot\\square_" <<
node.getSubstitutionSymbol ( ).getSymbol ( ).getSymbol ( ) <<
"$ ";
2113 node.getLeftElement ( ).template accept < void, TikZConverter::FormalRTEVisitor < SymbolType > > ( out );
2114 node.getRightElement ( ).template accept < void, TikZConverter::FormalRTEVisitor < SymbolType > > ( out );
2118template <
class SymbolType >
2120 out <<
"[${}^{*,\\square_" <<
node.getSubstitutionSymbol ( ).getSymbol ( ).getSymbol ( ) <<
"}$ ";
2121 node.getElement ( ).template accept < void, TikZConverter::FormalRTEVisitor < SymbolType > > ( out );
2125template <
class SymbolType >
2127 out <<
"[$" <<
node.getSymbol ( ).getSymbol ( ) <<
"$ ";
2128 for (
const auto & child :
node.getChildren ( ) )
2133template <
class SymbolType >
2135 out <<
"[$\\square_" <<
node.getSymbol ( ).getSymbol ( ) <<
"$]";
2138template <
class SymbolType >
2140 out <<
"[$\\emptyset$]";
Compact nondeterministic finite automaton. Accepts regular languages. The automaton has a list of sym...
Definition: CompactNFA.h:78
const ext::set< StateType > & getFinalStates() const &
Definition: CompactNFA.h:232
const ext::multimap< ext::pair< StateType, ext::vector< SymbolType > >, StateType > & getTransitions() const &
Definition: CompactNFA.h:555
const ext::set< StateType > & getStates() const &
Definition: CompactNFA.h:183
const StateType & getInitialState() const &
Definition: CompactNFA.h:154
Deterministic finite automaton. Accepts regular languages.
Definition: DFA.h:71
const ext::set< StateType > & getFinalStates() const &
Definition: DFA.h:183
const ext::map< ext::pair< StateType, SymbolType >, StateType > & getTransitions() const &
Definition: DFA.h:473
const StateType & getInitialState() const &
Definition: DFA.h:105
const ext::set< StateType > & getStates() const &
Definition: DFA.h:134
Nondeterministic finite tree automaton without epsilon transitions. Accepts regular tree languages.
Definition: DFTA.h:74
const ext::map< ext::pair< common::ranked_symbol< SymbolType >, ext::vector< StateType > >, StateType > & getTransitions() const &
Definition: DFTA.h:289
const ext::set< StateType > & getFinalStates() const &
Definition: DFTA.h:154
const ext::set< StateType > & getStates() const &
Definition: DFTA.h:105
Deterministic pushdown automaton. Accepts subset of context free languages.
Definition: DPDA.h:78
const ext::set< StateType > & getStates() const &
Definition: DPDA.h:145
const ext::map< ext::tuple< StateType, common::symbol_or_epsilon< InputSymbolType >, ext::vector< PushdownStoreSymbolType > >, ext::pair< StateType, ext::vector< PushdownStoreSymbolType > > > & getTransitions() const &
Definition: DPDA.h:682
const ext::set< StateType > & getFinalStates() const &
Definition: DPDA.h:194
const StateType & getInitialState() const &
Definition: DPDA.h:116
Epsilon nondeterministic finite automaton. Accepts regular languages.
Definition: EpsilonNFA.h:74
const ext::set< StateType > & getStates() const &
Definition: EpsilonNFA.h:158
const ext::set< StateType > & getFinalStates() const &
Definition: EpsilonNFA.h:207
const ext::multimap< ext::pair< StateType, common::symbol_or_epsilon< SymbolType > >, StateType > & getTransitions() const &
Definition: EpsilonNFA.h:666
const StateType & getInitialState() const &
Definition: EpsilonNFA.h:129
Extended nondeterministic finite automaton. Accepts regular languages. The automaton has a regular ex...
Definition: ExtendedNFA.h:80
const StateType & getInitialState() const &
Definition: ExtendedNFA.h:156
const ext::multimap< ext::pair< StateType, regexp::UnboundedRegExpStructure< SymbolType > >, StateType > & getTransitions() const &
Definition: ExtendedNFA.h:581
const ext::set< StateType > & getStates() const &
Definition: ExtendedNFA.h:185
const ext::set< StateType > & getFinalStates() const &
Definition: ExtendedNFA.h:234
Nondeterministic finite automaton with multiple initial states. Accepts regular languages.
Definition: MultiInitialStateNFA.h:69
const ext::set< StateType > & getInitialStates() const &
Definition: MultiInitialStateNFA.h:117
const ext::set< StateType > & getStates() const &
Definition: MultiInitialStateNFA.h:166
const ext::multimap< ext::pair< StateType, SymbolType >, StateType > & getTransitions() const &
Definition: MultiInitialStateNFA.h:520
const ext::set< StateType > & getFinalStates() const &
Definition: MultiInitialStateNFA.h:215
Nondeterministic finite automaton. Accepts regular languages.
Definition: NFA.h:66
const ext::set< StateType > & getStates() const &
Definition: NFA.h:136
const StateType & getInitialState() const &
Definition: NFA.h:107
const ext::multimap< ext::pair< StateType, SymbolType >, StateType > & getTransitions() const &
Definition: NFA.h:484
const ext::set< StateType > & getFinalStates() const &
Definition: NFA.h:185
Nondeterministic finite tree automaton without epsilon transitions. Accepts regular tree languages.
Definition: NFTA.h:72
const ext::set< StateType > & getFinalStates() const &
Definition: NFTA.h:159
const ext::multimap< ext::pair< common::ranked_symbol< SymbolType >, ext::vector< StateType > >, StateType > & getTransitions() const &
Definition: NFTA.h:294
const ext::set< StateType > & getStates() const &
Definition: NFTA.h:110
const ext::set< StateType > & getFinalStates() const &
Definition: NPDA.h:197
const StateType & getInitialState() const &
Definition: NPDA.h:119
const ext::set< StateType > & getStates() const &
Definition: NPDA.h:148
const ext::multimap< ext::tuple< StateType, common::symbol_or_epsilon< InputSymbolType >, ext::vector< PushdownStoreSymbolType > >, ext::pair< StateType, ext::vector< PushdownStoreSymbolType > > > & getTransitions() const &
Definition: NPDA.h:644
Deterministic single tape turing machine. Accepts recursive languages.
Definition: OneTapeDTM.h:71
const StateType & getInitialState() const &
Definition: OneTapeDTM.h:108
const ext::set< StateType > & getFinalStates() const &
Definition: OneTapeDTM.h:186
const ext::map< ext::pair< StateType, SymbolType >, ext::tuple< StateType, SymbolType, Shift > > & getTransitions() const &
Definition: OneTapeDTM.h:526
const ext::set< StateType > & getStates() const &
Definition: OneTapeDTM.h:137
Deterministic real time height deterministic pushdown automaton. Accepts subset of context free langu...
Definition: RealTimeHeightDeterministicDPDA.h:89
const StateType & getInitialState() const &
Definition: RealTimeHeightDeterministicDPDA.h:149
const ext::map< ext::pair< StateType, common::symbol_or_epsilon< InputSymbolType > >, ext::pair< StateType, PushdownStoreSymbolType > > & getCallTransitions() const &
Definition: RealTimeHeightDeterministicDPDA.h:1062
const ext::map< ext::pair< StateType, common::symbol_or_epsilon< InputSymbolType > >, StateType > & getLocalTransitions() const &
Definition: RealTimeHeightDeterministicDPDA.h:1082
const ext::map< ext::tuple< StateType, common::symbol_or_epsilon< InputSymbolType >, PushdownStoreSymbolType >, StateType > & getReturnTransitions() const &
Definition: RealTimeHeightDeterministicDPDA.h:1072
const ext::set< StateType > & getStates() const &
Definition: RealTimeHeightDeterministicDPDA.h:178
const ext::set< StateType > & getFinalStates() const &
Definition: RealTimeHeightDeterministicDPDA.h:227
Nondeterministic real time height deterministic pushdown automaton. Accepts subset of context free la...
Definition: RealTimeHeightDeterministicNPDA.h:76
const ext::set< StateType > & getInitialStates() const &
Definition: RealTimeHeightDeterministicNPDA.h:175
const ext::set< StateType > & getStates() const &
Definition: RealTimeHeightDeterministicNPDA.h:126
const ext::multimap< ext::pair< StateType, common::symbol_or_epsilon< InputSymbolType > >, StateType > & getLocalTransitions() const &
Definition: RealTimeHeightDeterministicNPDA.h:1004
const ext::multimap< ext::pair< StateType, common::symbol_or_epsilon< InputSymbolType > >, ext::pair< StateType, PushdownStoreSymbolType > > & getCallTransitions() const &
Definition: RealTimeHeightDeterministicNPDA.h:984
const ext::set< StateType > & getFinalStates() const &
Definition: RealTimeHeightDeterministicNPDA.h:224
const ext::multimap< ext::tuple< StateType, common::symbol_or_epsilon< InputSymbolType >, PushdownStoreSymbolType >, StateType > & getReturnTransitions() const &
Definition: RealTimeHeightDeterministicNPDA.h:994
Deterministic pushdown automaton requiring a symbol pop from pushdown store on each transition use....
Definition: SinglePopDPDA.h:78
const StateType & getInitialState() const &
Definition: SinglePopDPDA.h:116
const ext::set< StateType > & getFinalStates() const &
Definition: SinglePopDPDA.h:194
const ext::set< StateType > & getStates() const &
Definition: SinglePopDPDA.h:145
const ext::map< ext::tuple< StateType, common::symbol_or_epsilon< InputSymbolType >, PushdownStoreSymbolType >, ext::pair< StateType, ext::vector< PushdownStoreSymbolType > > > & getTransitions() const &
Definition: SinglePopDPDA.h:639
Definition: SinglePopNPDA.h:72
const StateType & getInitialState() const &
Definition: SinglePopNPDA.h:110
const ext::multimap< ext::tuple< StateType, common::symbol_or_epsilon< InputSymbolType >, PushdownStoreSymbolType >, ext::pair< StateType, ext::vector< PushdownStoreSymbolType > > > & getTransitions() const &
Definition: SinglePopNPDA.h:617
const ext::set< StateType > & getStates() const &
Definition: SinglePopNPDA.h:139
const ext::set< StateType > & getFinalStates() const &
Definition: SinglePopNPDA.h:188
Deterministic visibly pushdown automaton. Accepts subset of context free languages.
Definition: VisiblyPushdownDPDA.h:86
const ext::map< ext::tuple< StateType, InputSymbolType, PushdownStoreSymbolType >, StateType > & getReturnTransitions() const &
Definition: VisiblyPushdownDPDA.h:899
const ext::map< ext::pair< StateType, InputSymbolType >, StateType > & getLocalTransitions() const &
Definition: VisiblyPushdownDPDA.h:909
const ext::set< StateType > & getFinalStates() const &
Definition: VisiblyPushdownDPDA.h:224
const ext::map< ext::pair< StateType, InputSymbolType >, ext::pair< StateType, PushdownStoreSymbolType > > & getCallTransitions() const &
Definition: VisiblyPushdownDPDA.h:889
const ext::set< StateType > & getStates() const &
Definition: VisiblyPushdownDPDA.h:175
const StateType & getInitialState() const &
Definition: VisiblyPushdownDPDA.h:146
Nondeterministic visibly pushdown automaton. Accepts subset of context free languages.
Definition: VisiblyPushdownNPDA.h:81
const ext::set< StateType > & getInitialStates() const &
Definition: VisiblyPushdownNPDA.h:131
const ext::set< StateType > & getStates() const &
Definition: VisiblyPushdownNPDA.h:180
const ext::multimap< ext::pair< StateType, InputSymbolType >, StateType > & getLocalTransitions() const &
Definition: VisiblyPushdownNPDA.h:884
const ext::set< StateType > & getFinalStates() const &
Definition: VisiblyPushdownNPDA.h:229
const ext::multimap< ext::tuple< StateType, InputSymbolType, PushdownStoreSymbolType >, StateType > & getReturnTransitions() const &
Definition: VisiblyPushdownNPDA.h:874
const ext::multimap< ext::pair< StateType, InputSymbolType >, ext::pair< StateType, PushdownStoreSymbolType > > & getCallTransitions() const &
Definition: VisiblyPushdownNPDA.h:864
Definition: TikZConverter.h:53
static void convert(ext::ostream &out, const grid::SquareGrid8< TCoordinate, TEdge > &a)
Definition: TikZConverter.h:180
static void convert(ext::ostream &out, const automaton::DFA< SymbolType, StateType > &a)
Definition: TikZConverter.h:300
static void convert(ext::ostream &out, const grid::WeightedSquareGrid8< TCoordinate, TEdge > &a)
Definition: TikZConverter.h:190
static void convert(ext::ostream &out, const grid::WeightedSquareGrid4< TCoordinate, TEdge > &a)
Definition: TikZConverter.h:185
static std::string convert(const T &automaton)
Definition: TikZConverter.h:195
static void convert(ext::ostream &out, const grid::SquareGrid4< TCoordinate, TEdge > &a)
Definition: TikZConverter.h:175
Basic exception from which all other exceptions are derived.
Definition: CommonException.h:21
Class extending the map class from the standard library. Original reason is to allow printing of the ...
Definition: map.hpp:48
std::pair< iterator, bool > insert(const T &key, const R &value)
Insert variant with explicit key and value parameters.
Definition: map.hpp:118
auto end() &
Inherited behavior of end for non-const instance.
Definition: map.hpp:215
std::string str() const &
Definition: sstream.cpp:29
Class extending the vector class from the standard library. Original reason is to allow printing of t...
Definition: vector.hpp:45
static std::string toString(const T &data)
Definition: StringDataFactory.hpp:89
Definition: SquareGrid4.hpp:18
Definition: SquareGrid8.hpp:18
Definition: WeightedSquareGrid4.hpp:18
Definition: WeightedSquareGrid8.hpp:18
typename T::StateType StateType
Definition: ToGrammarLeftRG.h:64
int i
Definition: AllEpsilonClosure.h:118
Definition: ToGrammar.h:31
Definition: converterCommon.hpp:8
auto replaceInplace
Definition: converterCommon.hpp:10
auto replace
Definition: converterCommon.hpp:19
std::string to_string(const T &value)
To string method designated for objects that can be casted to string.
Definition: string.hpp:131
constexpr auto make_pair(T1 &&x, T2 &&y)
Definition: pair.hpp:79
Definition: GridDirection.hpp:12
Definition: ToFTAGlushkov.h:22
string::LinearString< char > stringFrom(const std::string &string)
Definition: String.cpp:10