26#include <ext/algorithm>
58 struct EpsilonNFATra {
79 requires isMultiInitialStateNFA < T > || isMultiInitialStateEpsilonNFA < T >
80 static SingleInitialState::ConvertedAutomaton < T >
convert (
const T & fsm );
86 requires isDFA < T > || isNFA < T > || isEpsilonNFA < T > || isExtendedNFA < T > || isCompactNFA < T >
87 static T
convert (
const T & fsm );
91requires isMultiInitialStateNFA < T > || isMultiInitialStateEpsilonNFA < T >
98 SingleInitialState::ConvertedAutomaton < T >
res (
q0 );
99 res.setInputAlphabet ( fsm.getInputAlphabet ( ) );
105 for (
const auto &
q : fsm.getInitialStates ( ) )
106 for(
const auto & kv : fsm.getTransitionsFromState (
q ) )
107 res.addTransition (
q0, kv.first.second, kv.second );
109 for (
const auto & t : fsm.getTransitions ( ) )
110 res.addTransition ( t.first.first, t.first.second, t.second );
112 res.setFinalStates ( fsm.getFinalStates ( ) );
115 if ( !
ext::excludes ( fsm.getFinalStates ( ).begin ( ), fsm.getFinalStates ( ).end ( ), fsm.getInitialStates ( ).begin ( ), fsm.getInitialStates ( ).end ( ) ) )
116 res.addFinalState (
q0 );
122requires isDFA < T > || isNFA < T > || isEpsilonNFA < T > || isExtendedNFA < T > || isCompactNFA < T >
Epsilon nondeterministic finite automaton. Accepts regular languages.
Definition: EpsilonNFA.h:74
Nondeterministic finite automaton. Accepts regular languages.
Definition: NFA.h:66
Definition: SingleInitialState.h:51
static SingleInitialState::ConvertedAutomaton< T > convert(const T &fsm)
typename T::StateType StateType
Definition: ToGrammarLeftRG.h:64
return res
Definition: MinimizeByPartitioning.h:145
q
Definition: SingleInitialStateEpsilonTransition.h:85
StateType q0
Definition: SingleInitialState.h:96
Definition: ToGrammar.h:31
T createUnique(T object, const Alphabets &... alphabets)
Definition: createUnique.hpp:46
bool excludes(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, Compare comp)
Tests two sorted ranges wheter all elements from the second are not present in the first.
Definition: algorithm.hpp:46
typename std::conditional< value, std::true_type, std::false_type >::type boolean
Definition: type_traits.hpp:145
Definition: type_traits.hpp:148