Algorithms Library Toolkit
A toolkit for algorithms, especially for algorithms on formal languages
AutomatonToXMLComposer.h
Go to the documentation of this file.
1
6#pragma once
7
8#include <alib/deque>
9#include <alib/vector>
10#include <alib/multiset>
11#include <alib/set>
12#include <alib/map>
13
14#include <core/xmlApi.hpp>
15
20
21namespace automaton {
22
27public:
28 template<class StateType>
29 static void composeStates(ext::deque<sax::Token>&, const ext::set<StateType>& states);
30 template<class SymbolType>
32 template<class SymbolType>
34 template<class SymbolType>
36 template<class SymbolType>
38 template<class SymbolType>
40 template<class StateType>
42 template<class StateType>
43 static void composeInitialState(ext::deque<sax::Token>&, const StateType& state);
44 template<class StateType>
46 template<class SymbolType>
48 template<class SymbolType>
50 template<class SymbolType>
52 template<class SymbolType>
54 template<class SymbolType>
56 template<class SymbolType>
57 static void composeBlankSymbol(ext::deque<sax::Token>&, const SymbolType& symbol);
58 template<class SymbolType>
60 template<class InputSymbolType, class PushdownStoreSymbolType >
62
63 template<class StateType>
64 static void composeTransitionTo(ext::deque<sax::Token>&, const StateType& state);
65 template<class StateType>
66 static void composeTransitionFrom(ext::deque<sax::Token>&, const StateType& state);
67 template<class StateType>
69 template<class StateType>
71 template<class SymbolType>
73 template<class SymbolType>
75 template<class SymbolType>
77 template<class SymbolType>
79 template<class SymbolType>
81 template<class SymbolType>
83 template<class SymbolType>
85 template<class SymbolType>
87
88 template < class SymbolType >
90
92 out.emplace_back("shift", sax::Token::TokenType::START_ELEMENT);
93 out.emplace_back( shiftToString ( shift ), sax::Token::TokenType::CHARACTER);
94 out.emplace_back("shift", sax::Token::TokenType::END_ELEMENT);
95 }
96
97};
98
99template < class StateType >
101 out.emplace_back("states", sax::Token::TokenType::START_ELEMENT);
102 for (const auto& state : states) {
104 }
105 out.emplace_back("states", sax::Token::TokenType::END_ELEMENT);
106}
107
108template < class SymbolType >
110 out.emplace_back("inputAlphabet", sax::Token::TokenType::START_ELEMENT);
111 for (const auto& symbol : symbols) {
113 }
114 out.emplace_back("inputAlphabet", sax::Token::TokenType::END_ELEMENT);
115}
116
117template < class SymbolType >
119 out.emplace_back("callInputAlphabet", sax::Token::TokenType::START_ELEMENT);
120 for (const auto& symbol : symbols) {
122 }
123 out.emplace_back("callInputAlphabet", sax::Token::TokenType::END_ELEMENT);
124}
125
126template < class SymbolType >
128 out.emplace_back("returnInputAlphabet", sax::Token::TokenType::START_ELEMENT);
129 for (const auto& symbol : symbols) {
131 }
132 out.emplace_back("returnInputAlphabet", sax::Token::TokenType::END_ELEMENT);
133}
134
135template < class SymbolType >
137 out.emplace_back("localInputAlphabet", sax::Token::TokenType::START_ELEMENT);
138 for (const auto& symbol : symbols) {
140 }
141 out.emplace_back("localInputAlphabet", sax::Token::TokenType::END_ELEMENT);
142}
143
144template < class SymbolType >
146 out.emplace_back("rankedInputAlphabet", sax::Token::TokenType::START_ELEMENT);
147 for (const auto& symbol : symbols) {
149 }
150 out.emplace_back("rankedInputAlphabet", sax::Token::TokenType::END_ELEMENT);
151}
152
153template < class StateType >
155 out.emplace_back("initialStates", sax::Token::TokenType::START_ELEMENT);
156 for (const auto& state : states) {
158 }
159 out.emplace_back("initialStates", sax::Token::TokenType::END_ELEMENT);
160}
161
162template < class StateType >
164 out.emplace_back("initialState", sax::Token::TokenType::START_ELEMENT);
166 out.emplace_back("initialState", sax::Token::TokenType::END_ELEMENT);
167}
168
169template < class StateType >
171 out.emplace_back("finalStates", sax::Token::TokenType::START_ELEMENT);
172 for (const auto& state : states) {
174 }
175 out.emplace_back("finalStates", sax::Token::TokenType::END_ELEMENT);
176}
177
178template < class SymbolType >
180 out.emplace_back("pushdownStoreAlphabet", sax::Token::TokenType::START_ELEMENT);
181 for (const auto& symbol : symbols) {
183 }
184 out.emplace_back("pushdownStoreAlphabet", sax::Token::TokenType::END_ELEMENT);
185}
186
187template < class SymbolType >
189 out.emplace_back("initialPushdownStoreSymbols", sax::Token::TokenType::START_ELEMENT);
190 for (const auto& symbol : symbols) {
192 }
193 out.emplace_back("initialPushdownStoreSymbols", sax::Token::TokenType::END_ELEMENT);
194}
195
196template < class SymbolType >
198 out.emplace_back("initialPushdownStoreSymbol", sax::Token::TokenType::START_ELEMENT);
200 out.emplace_back("initialPushdownStoreSymbol", sax::Token::TokenType::END_ELEMENT);
201}
202
203template < class SymbolType >
205 out.emplace_back("outputAlphabet", sax::Token::TokenType::START_ELEMENT);
206 for (const auto& symbol : symbols) {
208 }
209 out.emplace_back("outputAlphabet", sax::Token::TokenType::END_ELEMENT);
210}
211
212template < class SymbolType >
214 out.emplace_back("tapeAlphabet", sax::Token::TokenType::START_ELEMENT);
215 for (const auto& symbol : symbols) {
217 }
218 out.emplace_back("tapeAlphabet", sax::Token::TokenType::END_ELEMENT);
219}
220
221template < class SymbolType >
223 out.emplace_back("blankSymbol", sax::Token::TokenType::START_ELEMENT);
225 out.emplace_back("blankSymbol", sax::Token::TokenType::END_ELEMENT);
226}
227
228template < class SymbolType >
230 out.emplace_back("bottomOfTheStackSymbol", sax::Token::TokenType::START_ELEMENT);
232 out.emplace_back("bottomOfTheStackSymbol", sax::Token::TokenType::END_ELEMENT);
233}
234
235template < class InputSymbolType, class PushdownStoreSymbolType >
237 out.emplace_back("inputToPushdownStoreOperations", sax::Token::TokenType::START_ELEMENT);
238 for(const auto& pushdownStoreOperation : operations) {
239 out.emplace_back("operation", sax::Token::TokenType::START_ELEMENT);
240
241 core::xmlApi<InputSymbolType>::compose(out, pushdownStoreOperation.first);
242
243 composeTransitionPop(out, pushdownStoreOperation.second.first);
244 composeTransitionPush(out, pushdownStoreOperation.second.second);
245
246 out.emplace_back("operation", sax::Token::TokenType::END_ELEMENT);
247 }
248 out.emplace_back("inputToPushdownStoreOperations", sax::Token::TokenType::END_ELEMENT);
249}
250
251template < class StateType >
253 out.emplace_back("to", sax::Token::TokenType::START_ELEMENT);
255 out.emplace_back("to", sax::Token::TokenType::END_ELEMENT);
256}
257
258template < class StateType >
260 out.emplace_back("from", sax::Token::TokenType::START_ELEMENT);
262 out.emplace_back("from", sax::Token::TokenType::END_ELEMENT);
263}
264
265template < class StateType >
267 out.emplace_back("from", sax::Token::TokenType::START_ELEMENT);
268 for (const auto& state : states) {
270 }
271 out.emplace_back("from", sax::Token::TokenType::END_ELEMENT);
272}
273
274template < class StateType >
276 out.emplace_back("from", sax::Token::TokenType::START_ELEMENT);
277 for (const auto& state : states) {
279 }
280 out.emplace_back("from", sax::Token::TokenType::END_ELEMENT);
281}
282
283template < class SymbolType >
285 out.emplace_back("pop", sax::Token::TokenType::START_ELEMENT);
286 for (const auto& symbol : symbols) {
288 }
289 out.emplace_back("pop", sax::Token::TokenType::END_ELEMENT);
290}
291
292template < class SymbolType >
294 out.emplace_back("pop", sax::Token::TokenType::START_ELEMENT);
296 out.emplace_back("pop", sax::Token::TokenType::END_ELEMENT);
297}
298
299template < class SymbolType >
301 out.emplace_back("push", sax::Token::TokenType::START_ELEMENT);
302 for (const auto& symbol : symbols) {
304 }
305 out.emplace_back("push", sax::Token::TokenType::END_ELEMENT);
306}
307
308template < class SymbolType >
310 out.emplace_back("push", sax::Token::TokenType::START_ELEMENT);
312 out.emplace_back("push", sax::Token::TokenType::END_ELEMENT);
313}
314
315template < class SymbolType >
317 out.emplace_back("input", sax::Token::TokenType::START_ELEMENT);
319 out.emplace_back("input", sax::Token::TokenType::END_ELEMENT);
320}
321
322template < class SymbolType >
324 out.emplace_back("output", sax::Token::TokenType::START_ELEMENT);
326 out.emplace_back("output", sax::Token::TokenType::END_ELEMENT);
327}
328
329template < class SymbolType >
331 out.emplace_back("output", sax::Token::TokenType::START_ELEMENT);
332 for (const auto& symbol : symbols) {
334 }
335 out.emplace_back("output", sax::Token::TokenType::END_ELEMENT);
336}
337
338template < class SymbolType >
340 out.emplace_back("input", sax::Token::TokenType::START_ELEMENT);
341 for (const auto& symbol : symbols) {
343 }
344 out.emplace_back("input", sax::Token::TokenType::END_ELEMENT);
345}
346
347template < class SymbolType >
349 out.emplace_back("input", sax::Token::TokenType::START_ELEMENT);
351 out.emplace_back("input", sax::Token::TokenType::END_ELEMENT);
352}
353
354} /* namespace automaton */
355
356
Definition: AutomatonToXMLComposer.h:26
static void composeLocalInputAlphabet(ext::deque< sax::Token > &, const ext::set< SymbolType > &symbols)
Definition: AutomatonToXMLComposer.h:136
static void composeTransitionTo(ext::deque< sax::Token > &, const StateType &state)
Definition: AutomatonToXMLComposer.h:252
static void composeStates(ext::deque< sax::Token > &, const ext::set< StateType > &states)
Definition: AutomatonToXMLComposer.h:100
static void composeInputToPushdownStoreOperation(ext::deque< sax::Token > &, const ext::map< InputSymbolType, ext::pair< ext::vector< PushdownStoreSymbolType >, ext::vector< PushdownStoreSymbolType > > > &operations)
Definition: AutomatonToXMLComposer.h:236
static void composeTransitionOutputSymbolMultiple(ext::deque< sax::Token > &, const ext::vector< SymbolType > &symbols)
Definition: AutomatonToXMLComposer.h:330
static void composeTransitionFrom(ext::deque< sax::Token > &, const StateType &state)
Definition: AutomatonToXMLComposer.h:259
static void composeInitialStates(ext::deque< sax::Token > &, const ext::set< StateType > &states)
Definition: AutomatonToXMLComposer.h:154
static void composeInputAlphabet(ext::deque< sax::Token > &, const ext::set< SymbolType > &symbols)
Definition: AutomatonToXMLComposer.h:109
static void composeTransitionSinglePush(ext::deque< sax::Token > &, const SymbolType &symbol)
Definition: AutomatonToXMLComposer.h:309
static void composeTransitionOutputSymbol(ext::deque< sax::Token > &, const SymbolType &symbol)
Definition: AutomatonToXMLComposer.h:323
static void composeInitialPushdownStoreSymbol(ext::deque< sax::Token > &, const SymbolType &symbol)
Definition: AutomatonToXMLComposer.h:197
static void composeBlankSymbol(ext::deque< sax::Token > &, const SymbolType &symbol)
Definition: AutomatonToXMLComposer.h:222
static void composeInitialPushdownStoreSymbols(ext::deque< sax::Token > &, const ext::set< SymbolType > &symbols)
Definition: AutomatonToXMLComposer.h:188
static void composeTransitionPop(ext::deque< sax::Token > &, const ext::vector< SymbolType > &symbols)
Definition: AutomatonToXMLComposer.h:284
static void composeTransitionPush(ext::deque< sax::Token > &, const ext::vector< SymbolType > &symbols)
Definition: AutomatonToXMLComposer.h:300
static void composeReturnInputAlphabet(ext::deque< sax::Token > &, const ext::set< SymbolType > &symbols)
Definition: AutomatonToXMLComposer.h:127
static void composeTransitionInputRegexp(ext::deque< sax::Token > &, const regexp::UnboundedRegExpStructure< SymbolType > &regexp)
Definition: AutomatonToXMLComposer.h:348
static void composeOutputAlphabet(ext::deque< sax::Token > &, const ext::set< SymbolType > &symbols)
Definition: AutomatonToXMLComposer.h:204
static void composeTransitionShift(ext::deque< sax::Token > &out, Shift shift)
Definition: AutomatonToXMLComposer.h:91
static void composeTransitionSinglePop(ext::deque< sax::Token > &, const SymbolType &symbol)
Definition: AutomatonToXMLComposer.h:293
static void composeFinalStates(ext::deque< sax::Token > &, const ext::set< StateType > &states)
Definition: AutomatonToXMLComposer.h:170
static void composeBottomOfTheStackSymbol(ext::deque< sax::Token > &, const SymbolType &symbol)
Definition: AutomatonToXMLComposer.h:229
static void composeTransitionInputSymbolMultiple(ext::deque< sax::Token > &, const ext::vector< SymbolType > &symbols)
Definition: AutomatonToXMLComposer.h:339
static void composeTapeAlphabet(ext::deque< sax::Token > &, const ext::set< SymbolType > &symbols)
Definition: AutomatonToXMLComposer.h:213
static void composeTransitionInputSymbol(ext::deque< sax::Token > &, const SymbolType &symbol)
Definition: AutomatonToXMLComposer.h:316
static void composeInitialState(ext::deque< sax::Token > &, const StateType &state)
Definition: AutomatonToXMLComposer.h:163
static void composeRankedInputAlphabet(ext::deque< sax::Token > &, const ext::set< SymbolType > &symbols)
Definition: AutomatonToXMLComposer.h:145
static void composePushdownStoreAlphabet(ext::deque< sax::Token > &, const ext::set< SymbolType > &symbols)
Definition: AutomatonToXMLComposer.h:179
static void composeCallInputAlphabet(ext::deque< sax::Token > &, const ext::set< SymbolType > &symbols)
Definition: AutomatonToXMLComposer.h:118
Class extending the map class from the standard library. Original reason is to allow printing of the ...
Definition: map.hpp:48
Definition: multiset.hpp:44
Class extending the pair class from the standard library. Original reason is to allow printing of the...
Definition: pair.hpp:43
Definition: set.hpp:44
Class extending the vector class from the standard library. Original reason is to allow printing of t...
Definition: vector.hpp:45
Represents unbounded regular expression structure. Regular expression is stored as a tree of Unbounde...
Definition: UnboundedRegExpStructure.h:47
typename T::StateType StateType
Definition: ToGrammarLeftRG.h:64
typename T::SymbolType SymbolType
Definition: ReachableStates.h:176
Definition: ToGrammar.h:31
std::string shiftToString(automaton::Shift shift)
Definition: Shift.cpp:22
Shift
Definition: Shift.h:15
Definition: ToAutomaton.h:15
Definition: xmlApi.hpp:27