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

small changes in vpa determinization to clarify it

parent 5fb4cba3
No related branches found
No related tags found
No related merge requests found
......@@ -147,6 +147,21 @@ void VPADeterminizer::buildStackAlphabet() {
}
 
 
VPADeterminizer::StateData* VPADeterminizer::getUnmarkedState() {
StateData* unmarkedStateData = NULL;
for (map<string, StateData>::iterator stateIter = this->states.begin();
stateIter != this->states.end();
stateIter++) {
if (!stateIter->second.isMarked) {
unmarkedStateData = &stateIter->second;
unmarkedStateData->isMarked = true;
return unmarkedStateData;
}
}
return NULL;
}
VPADeterminizer::VPADeterminizer(PDA* automaton) {
this->nondeterministicVPA = automaton;
}
......@@ -168,16 +183,7 @@ PDA* VPADeterminizer::determinize() {
set<TransitionPDA> transitions = this->nondeterministicVPA->getTransitions();
while (true) {
StateData* unmarkedStateData = NULL;
for (map<string, StateData>::iterator stateIter = this->states.begin();
stateIter != this->states.end();
stateIter++) {
if (!stateIter->second.isMarked) {
unmarkedStateData = &stateIter->second;
unmarkedStateData->isMarked = true;
break;
}
}
StateData* unmarkedStateData = this->getUnmarkedState();
if (unmarkedStateData == NULL) {
break;
}
......@@ -214,8 +220,9 @@ PDA* VPADeterminizer::determinize() {
}
}
}
const State& fromState = unmarkedStateData->state;
const State& toState = this->getOrCreateState(sPrimed, rPrimed);
const TransitionPDA transition(unmarkedStateData->state, *internalSymbol, toState);
const TransitionPDA transition(fromState, *internalSymbol, toState);
this->deterministicVPA->addTransition(transition);
}
......@@ -236,11 +243,12 @@ PDA* VPADeterminizer::determinize() {
}
}
SComponent& s = unmarkedStateData->s;
const State& fromState = unmarkedStateData->state;
const State& toState = this->getOrCreateState(this->getSComponentWithStatesIdentity(), rPrimed);
string stackSymbolName = this->buildStackSymbolName(s, r, *callSymbol);
list<Symbol> pop;
list<Symbol> push(1, Symbol(stackSymbolName));
const TransitionPDA transition(unmarkedStateData->state, *callSymbol, toState, pop, push);
const TransitionPDA transition(fromState, *callSymbol, toState, pop, push);
this->deterministicVPA->addTransition(transition);
}
......@@ -281,10 +289,11 @@ PDA* VPADeterminizer::determinize() {
}
}
}
const State& fromState = unmarkedStateData->state;
const State& toState = this->getOrCreateState(sPrimed, rPrimed);
list<Symbol> pop(1, BOTTOM_OF_STACK_SYMBOL);
list<Symbol> push;
const TransitionPDA transition(unmarkedStateData->state, *returnSymbol, toState, pop, push);
const TransitionPDA transition(fromState, *returnSymbol, toState, pop, push);
this->deterministicVPA->addTransition(transition);
// Otherwise
......@@ -351,11 +360,12 @@ PDA* VPADeterminizer::determinize() {
}
}
 
const State& fromState = unmarkedStateData->state;
const State& toState = this->getOrCreateState(sDoublePrimed, rDoublePrimed);
string stackSymbolName = this->buildStackSymbolName(sPrimed, rPrimed, *callSymbol);
list<Symbol> pop(1, Symbol(stackSymbolName));
list<Symbol> push;
const TransitionPDA transition(unmarkedStateData->state, *returnSymbol, toState, pop, push);
const TransitionPDA transition(fromState, *returnSymbol, toState, pop, push);
this->deterministicVPA->addTransition(transition);
}
}
......
......@@ -93,6 +93,7 @@ protected:
void divideInputAlphabet();
string buildStackSymbolName(const SComponent& s, const RComponent& r, const Symbol& input);
void buildStackAlphabet();
StateData* getUnmarkedState();
public:
static const Symbol BOTTOM_OF_STACK_SYMBOL;
......
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