57 template <
class SymbolType,
class StateType >
71 template <
class SymbolType,
class StateType >
87 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
103 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
118 template <
class SymbolType,
class StateType >
122template <
class SymbolType,
class StateType >
131 while(!processingData.empty()) {
132 StateType current = std::move ( processingData.front() );
133 processingData.pop_front();
137 if(normalizationData.find(transition.second) == normalizationData.
end()) {
139 processingData.push_back ( transition.second );
144 if(normalizationData.size() != fsm.
getStates().size()) {
153 result.addState ( normalizationData.find ( state )->second );
157 result.addFinalState( normalizationData.find ( finalState )->second );
161 result.addTransition ( normalizationData.find ( transition.first.first )->second, transition.first.second, normalizationData.find ( transition.second )->second );
167template <
class SymbolType,
class StateType >
176 while ( ! processingData.empty ( ) ) {
177 StateType current = std::move ( processingData.front ( ) );
178 processingData.pop_front ( );
182 if ( normalizationData.find ( transition.second ) == normalizationData.
end ( ) ) {
184 processingData.push_back ( transition.second );
189 if ( normalizationData.size ( ) != fsm.
getStates ( ).size ( ) ) {
198 result.addState ( normalizationData.find ( state )->second );
202 result.addFinalState( normalizationData.find ( finalState )->second );
206 result.addTransition ( normalizationData.find ( transition.first.first )->second, transition.first.second, normalizationData.find ( transition.second )->second );
212template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
214 unsigned counterState = 0;
216 unsigned counterSymbol = 0;
224 while(!processingData.empty()) {
225 StateType current = std::move ( processingData.front() );
226 processingData.pop_front();
229 if ( ! normalizationDataState.contains ( transition.second.first ) ) {
231 processingData.push_back ( transition.second.first );
233 if ( ! normalizationDataSymbol.contains ( transition.second.second ) ) {
234 normalizationDataSymbol.
insert (
std::make_pair ( transition.second.second, counterSymbol ++ ) );
238 if ( ! normalizationDataState.contains ( transition.second ) ) {
240 processingData.push_back ( transition.second );
245 if ( normalizationDataSymbol.contains ( std::get < 2 > ( transition.first ) ) ) {
246 if ( ! normalizationDataState.contains ( transition.second ) ) {
248 processingData.push_back ( transition.second );
255 processingData.push_back ( std::move ( current ) );
267 result.addPushdownStoreSymbol(normalizationDataSymbol.find(symbol)->second);
270 result.addState ( normalizationDataState.find(state)->second);
273 result.addFinalState ( normalizationDataState.find(state)->second );
276 result.addCallTransition ( normalizationDataState.
at ( transition.first.first ), transition.first.second, normalizationDataState.
at ( transition.second.first ), normalizationDataSymbol.
at ( transition.second.second ) );
280 result.addLocalTransition ( normalizationDataState.
at ( transition.first.first ), transition.first.second, normalizationDataState.
at ( transition.second ) );
284 result.addReturnTransition ( normalizationDataState.
at ( std::get < 0 > ( transition.first ) ), std::get < 1 > ( transition.first ), normalizationDataSymbol.
at ( std::get < 2 > ( transition.first ) ), normalizationDataState.
at ( transition.second ) );
290template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
292 unsigned counterState = 0;
294 unsigned counterSymbol = 0;
302 while(!processingData.empty()) {
303 StateType current = std::move ( processingData.front() );
304 processingData.pop_front();
307 bool stateFinished =
true;
311 if(
std::all_of(std::get<2>(iter.first).begin(), std::get<2>(iter.first).end(), [&](
const PushdownStoreSymbolType& symbol) { return normalizationDataSymbol.find(symbol) != normalizationDataSymbol.end(); })) {
314 for(
const PushdownStoreSymbolType& symbol : std::get<2> ( iter.first ) ) {
315 transformedSymbols.push_back(normalizationDataSymbol.find(symbol)->second);
321 stateFinished =
false;
326 processingData.push_back(std::move ( current ) );
332 const auto& iters = iter.second;
334 if( normalizationDataState.find(iters.first) == normalizationDataState.
end() ) {
336 processingData.push_back(iters.first);
339 for(
const PushdownStoreSymbolType & iter2 : iters.second) {
340 if( normalizationDataSymbol.find(iter2) == normalizationDataSymbol.
end() ) {
355 result.addPushdownStoreSymbol(normalizationDataSymbol.find(symbol)->second);
358 result.addState ( normalizationDataState.find(state)->second);
361 result.addFinalState ( normalizationDataState.find(state)->second );
365 for(
const auto& elem : std::get<2>(transition.first)) {
366 pop.push_back(normalizationDataSymbol.find(elem)->second);
369 for(
const auto& elem : transition.second.second) {
370 push.push_back(normalizationDataSymbol.find(elem)->second);
372 result.addTransition ( normalizationDataState.find(std::get<0>(transition.first))->second, std::get<1>(transition.first), pop, normalizationDataState.find(transition.second.first)->second, push);
378template <
class SymbolType,
class StateType >
383 auto isNormalized = [ & normalizationData ] (
const StateType & origName ) {
384 return normalizationData.count ( origName ) > 0;
389 processing.clear ( );
393 if (
std::all_of ( transition.first.second.begin ( ), transition.first.second.end ( ), isNormalized ) && ! isNormalized ( transition.second ) ) {
395 for (
const StateType & state : transition.first.second )
396 from.push_back ( normalizationData.
at ( state ) );
403 if ( ! isNormalized ( transition.second ) )
404 normalizationData [ transition.second ] =
counter ++;
406 }
while ( !processing.empty ( ) );
408 if ( normalizationData.size ( ) != fta.
getStates ( ).size ( ) ) {
416 result.addState ( normalizationData.
at ( state ) );
420 result.addFinalState ( normalizationData.
at ( finalState ) );
425 for (
const StateType & prev : transition.first.second )
426 prevStates.push_back ( normalizationData.
at ( prev ) );
428 result.addTransition ( transition.first.first, prevStates, normalizationData.
at ( transition.second ) );
Compact deterministic finite automaton. Accepts regular languages. The automaton has a list of symbol...
Definition: CompactDFA.h:73
const ext::map< ext::pair< StateType, ext::vector< SymbolType > >, StateType > & getTransitions() const &
Definition: CompactDFA.h:483
const ext::set< StateType > & getFinalStates() const &
Definition: CompactDFA.h:192
const StateType & getInitialState() const &
Definition: CompactDFA.h:114
const ext::set< StateType > & getStates() const &
Definition: CompactDFA.h:143
ext::iterator_range< typename ext::map< ext::pair< StateType, ext::vector< SymbolType > >, StateType >::const_iterator > getTransitionsFromState(const StateType &from) const
Definition: CompactDFA.h:493
const ext::set< SymbolType > & getInputAlphabet() const &
Definition: CompactDFA.h:241
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< SymbolType > & getInputAlphabet() const &
Definition: DFA.h:232
const ext::set< StateType > & getStates() const &
Definition: DFA.h:134
ext::iterator_range< typename ext::map< ext::pair< StateType, SymbolType >, StateType >::const_iterator > getTransitionsFromState(const StateType &from) const
Definition: DFA.h:483
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< common::ranked_symbol< SymbolType > > & getInputAlphabet() const &
Definition: DFTA.h:203
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 PushdownStoreSymbolType & getInitialSymbol() const &
Definition: DPDA.h:301
const ext::set< PushdownStoreSymbolType > & getPushdownStoreAlphabet() const &
Definition: DPDA.h:243
const ext::set< InputSymbolType > & getInputAlphabet() const &
Definition: DPDA.h:330
ext::map< ext::tuple< StateType, common::symbol_or_epsilon< InputSymbolType >, ext::vector< PushdownStoreSymbolType > >, ext::pair< StateType, ext::vector< PushdownStoreSymbolType > > > getTransitionsFromState(const StateType &from) const
Definition: DPDA.h:692
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
Deterministic real time height deterministic pushdown automaton. Accepts subset of context free langu...
Definition: RealTimeHeightDeterministicDPDA.h:89
const ext::set< InputSymbolType > & getInputAlphabet() const &
Definition: RealTimeHeightDeterministicDPDA.h:363
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::set< PushdownStoreSymbolType > & getPushdownStoreAlphabet() const &
Definition: RealTimeHeightDeterministicDPDA.h:276
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
const PushdownStoreSymbolType & getBottomOfTheStackSymbol() const &
Definition: RealTimeHeightDeterministicDPDA.h:334
Definition: Normalize.h:44
static automaton::DFA< SymbolType, unsigned > normalize(const automaton::DFA< SymbolType, StateType > &fsm)
Definition: Normalize.h:123
Definition: ranked_symbol.hpp:20
Definition: symbol_or_epsilon.hpp:24
Basic exception from which all other exceptions are derived.
Definition: CommonException.h:21
Class extending the deque class from the standard library. Original reason is to allow printing of th...
Definition: deque.hpp:44
Class extending the map class from the standard library. Original reason is to allow printing of the ...
Definition: map.hpp:48
R & at(const T &key, R &defaultValue)
Definition: map.hpp:163
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
Class extending the pair class from the standard library. Original reason is to allow printing of the...
Definition: pair.hpp:43
Class extending the tuple class from the standard library. Original reason is to allow printing of th...
Definition: tuple.hpp:42
Class extending the vector class from the standard library. Original reason is to allow printing of t...
Definition: vector.hpp:45
typename T::StateType StateType
Definition: ToGrammarLeftRG.h:64
unsigned counter
Definition: Rename.h:247
for(const StateType &state :fsm.getStates()) renamingData.insert(std Rename::RenamedAutomaton< T > result(renamingData.at(fsm.getInitialState()))
Definition: Rename.h:253
Definition: ToGrammar.h:31
SliceComp< Ts ... > slice_comp(const Ts &... inst)
Definition: functional.hpp:95
ContainerType< ResType > transform(const ContainerType< InType, Ts ... > &in, Callback transform)
In container tranformation of all elements according to the tranform.
Definition: algorithm.hpp:150
all_of(T &&...) -> all_of< T... >
constexpr auto make_pair(T1 &&x, T2 &&y)
Definition: pair.hpp:79