Skip to content
Snippets Groups Projects
Commit 8bce66d7 authored by Jan Vesely's avatar Jan Vesely
Browse files

add comments with points from definition into fsm determinization

parent c8a594e9
No related branches found
No related tags found
No related merge requests found
...@@ -42,10 +42,12 @@ Automaton* FsmDeterminizer::determinize() ...@@ -42,10 +42,12 @@ Automaton* FsmDeterminizer::determinize()
this->dfsm = new FSM(); this->dfsm = new FSM();
this->initDeterminization(); this->initDeterminization();
// 1
const set<State>& q0 = this->nfsm->getInitialStates(); const set<State>& q0 = this->nfsm->getInitialStates();
const State& q0Primed = this->getOrCreateState(q0); const State& q0Primed = this->getOrCreateState(q0);
while (true) { while (true) {
// 2
bool allStatesMarked = true; bool allStatesMarked = true;
for (const auto& stateIter : this->QPrimed) { for (const auto& stateIter : this->QPrimed) {
allStatesMarked &= stateIter.second.isMarked; allStatesMarked &= stateIter.second.isMarked;
...@@ -54,6 +56,7 @@ Automaton* FsmDeterminizer::determinize() ...@@ -54,6 +56,7 @@ Automaton* FsmDeterminizer::determinize()
break; break;
} }
// 3
StateData* qPrimed = NULL; StateData* qPrimed = NULL;
for (auto& stateIter : this->QPrimed) { for (auto& stateIter : this->QPrimed) {
StateData& stateData = stateIter.second; StateData& stateData = stateIter.second;
...@@ -63,6 +66,7 @@ Automaton* FsmDeterminizer::determinize() ...@@ -63,6 +66,7 @@ Automaton* FsmDeterminizer::determinize()
} }
} }
// 3a and 3b
for (const auto& input : this->nfsm->getInputAlphabet()) { for (const auto& input : this->nfsm->getInputAlphabet()) {
const set<State>& nfsmToStates = this->findToStates(qPrimed->originalStates, input); const set<State>& nfsmToStates = this->findToStates(qPrimed->originalStates, input);
if (nfsmToStates.size() > 0) { if (nfsmToStates.size() > 0) {
...@@ -71,12 +75,15 @@ Automaton* FsmDeterminizer::determinize() ...@@ -71,12 +75,15 @@ Automaton* FsmDeterminizer::determinize()
this->dfsm->addTransition(transition); this->dfsm->addTransition(transition);
} }
} }
// 3c
qPrimed->isMarked = true; qPrimed->isMarked = true;
} }
// 4
this->dfsm->addInitialState(q0Primed); this->dfsm->addInitialState(q0Primed);
// 5
for (const auto& qPrimedIter : this->QPrimed) { for (const auto& qPrimedIter : this->QPrimed) {
const StateData& qPrimed = qPrimedIter.second; const StateData& qPrimed = qPrimedIter.second;
if (Utils::containFinalState(qPrimed.originalStates, *this->nfsm)) { if (Utils::containFinalState(qPrimed.originalStates, *this->nfsm)) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment