53 requires isDFA < T > || isNFA < T >
54 static bool infinite (
const T & fsm );
58requires isDFA < T > || isNFA < T >
64 std::queue < StateType >
q;
65 std::set < StateType >
visited { fsm.getInitialState ( ) };
67 q.push ( fsm.getInitialState ( ) );
69 while ( !
q.empty ( ) ) {
70 const StateType state = std::move (
q.front ( ) );
73 for (
const auto & transition : fsm.getTransitionsFromState ( state ) ) {
74 if (
visited.insert ( transition.second ).second ) {
75 q.push ( transition.second );
76 }
else if ( usefulStates.contains ( transition.second ) ) {
Definition: InfiniteLanguage.h:41
static bool infinite(const T &fsm)
Definition: InfiniteLanguage.h:59
static ext::set< typename T::StateType > usefulStates(const T &fsm)
typename T::StateType StateType
Definition: ToGrammarLeftRG.h:64
q
Definition: SingleInitialStateEpsilonTransition.h:85
Definition: ToGrammar.h:31