26#include <ext/algorithm>
61 requires isDFA < T > || isNFA < T > || isEpsilonNFA < T > || isCompactNFA < T > || isExtendedNFA < T >
73 requires isMultiInitialStateNFA < T > || isMultiInitialStateEpsilonNFA < T >
85 requires isDFTA < T > || isNFTA < T >
89 requires isAFDZA < T > || isAFNZA < T >
94requires isDFA < T > || isNFA < T > || isEpsilonNFA < T > || isCompactNFA < T > || isExtendedNFA < T >
101 Qi.at( 0 ).insert ( fsm.getInitialState( ) );
111 for(
const auto & p :
Qi.at(
i - 1 ) )
112 for(
const auto & transition : fsm.getTransitionsFromState( p ) )
113 Qi.at(
i ).insert( transition.second );
115 }
while (
Qi.at(
i ) !=
Qi.at(
i - 1 ) );
121requires isMultiInitialStateNFA < T > || isMultiInitialStateEpsilonNFA < T >
128 Qi.at( 0 ) = fsm.getInitialStates( );
136 Qi.push_back(
Qi.at(
i - 1 ) );
138 for(
const auto & p :
Qi.at(
i - 1 ) )
139 for(
const auto & transition : fsm.getTransitionsFromState( p ) )
140 Qi.at(
i ).insert ( transition.second );
141 }
while (
Qi.at(
i ) !=
Qi.at(
i - 1 ) );
147requires isDFTA < T > || isNFTA < T >
161 Qi.push_back(
Qi.at(
i - 1) );
163 for(
const auto & transition : fta.getTransitions ( ) )
164 if (
std::all_of ( transition.first.second.begin ( ), transition.first.second.end ( ), [ & ] (
const StateType & state ) { return Qi.at ( i - 1 ).count ( state ); } ) )
165 Qi.at(
i ).insert ( transition.second );
167 }
while (
Qi.at(
i ) !=
Qi.at(
i - 1 ) );
173requires isAFDZA < T > || isAFNZA < T >
188 Qi.push_back(
Qi.at(
i - 1) );
190 for(
const auto & transition : afza.getTransitions ( ) ) {
191 if ( transition.first.template is < SymbolType > ( ) ) {
192 Qi.at(
i ).insert ( transition.second );
194 const auto& [q1, q2] = transition.first.template get < ext::pair < StateType, StateType > > ( );
195 if (
Qi.at (
i - 1 ).contains ( q1 ) &&
Qi.at (
i - 1 ).contains ( q2 ) ) {
196 Qi.at(
i ).insert ( transition.second );
200 }
while (
Qi.at(
i ) !=
Qi.at(
i - 1 ) );
Definition: ReachableStates.h:50
static ext::set< typename T::StateType > reachableStates(const T &fta)
static ext::set< typename T::StateType > reachableStates(const T &fsm)
static ext::set< typename T::StateType > reachableStates(const T &fsm)
static ext::set< typename T::StateType > reachableStates(const T &afza)
Class extending the deque class from the standard library. Original reason is to allow printing of th...
Definition: deque.hpp:44
Class extending the pair class from the standard library. Original reason is to allow printing of the...
Definition: pair.hpp:43
typename T::StateType StateType
Definition: ToGrammarLeftRG.h:64
int i
Definition: AllEpsilonClosure.h:118
typename T::SymbolType SymbolType
Definition: ReachableStates.h:176
ext::deque< ext::set< StateType > > Qi
Definition: ReachableStates.h:95
Definition: ToGrammar.h:31
all_of(T &&...) -> all_of< T... >