From 5d0702f3de00065c1cd3f56b542ba08110591453 Mon Sep 17 00:00:00 2001 From: Jan Vesely <janvesely@janvesely.net> Date: Tue, 25 Feb 2014 15:33:11 +0100 Subject: [PATCH] stop creating states with empty s or r in vpa determinizations --- adeterminize.vpa/src/VPADeterminizer.cpp | 63 ++++++++++++---------- adeterminize.vpa2/src/VPADeterminizer2.cpp | 63 ++++++++++++---------- adeterminize.vpa3/src/VPADeterminizer3.cpp | 58 +++++++++++--------- 3 files changed, 103 insertions(+), 81 deletions(-) diff --git a/adeterminize.vpa/src/VPADeterminizer.cpp b/adeterminize.vpa/src/VPADeterminizer.cpp index 9cca7a2145..320a917752 100644 --- a/adeterminize.vpa/src/VPADeterminizer.cpp +++ b/adeterminize.vpa/src/VPADeterminizer.cpp @@ -60,10 +60,12 @@ PDA VPADeterminizer::determinize(PDA& nondeterministicVPA) { } } } - const State& fromState = unmarkedStateData->state; - const State& toState = VPADeterminizationUtils::getOrCreateState(sPrimed, rPrimed, states, deterministicVPA); - const TransitionPDA transition(fromState, *internalSymbol, toState); - deterministicVPA.addTransition(transition); + if (sPrimed.statesPairs.size() > 0 && rPrimed.states.size() > 0) { + const State& fromState = unmarkedStateData->state; + const State& toState = VPADeterminizationUtils::getOrCreateState(sPrimed, rPrimed, states, deterministicVPA); + const TransitionPDA transition(fromState, *internalSymbol, toState); + deterministicVPA.addTransition(transition); + } } // Call symbols @@ -82,15 +84,17 @@ PDA VPADeterminizer::determinize(PDA& nondeterministicVPA) { } } } - SComponent& s = unmarkedStateData->s; - const SComponent& sPrimed = VPADeterminizationUtils::getSComponentWithStatesIdentity(nondeterministicVPA.getStates()); - const State& fromState = unmarkedStateData->state; - const State& toState = VPADeterminizationUtils::getOrCreateState(sPrimed, rPrimed, states, deterministicVPA); - string stackSymbolName = VPADeterminizationUtils::buildStackSymbolName(s, r, *callSymbol); - list<Symbol> pop; - list<Symbol> push(1, Symbol(stackSymbolName)); - const TransitionPDA transition(fromState, *callSymbol, toState, pop, push); - deterministicVPA.addTransition(transition); + if (rPrimed.states.size() > 0) { + SComponent& s = unmarkedStateData->s; + const SComponent& sPrimed = VPADeterminizationUtils::getSComponentWithStatesIdentity(nondeterministicVPA.getStates()); + const State& fromState = unmarkedStateData->state; + const State& toState = VPADeterminizationUtils::getOrCreateState(sPrimed, rPrimed, states, deterministicVPA); + string stackSymbolName = VPADeterminizationUtils::buildStackSymbolName(s, r, *callSymbol); + list<Symbol> pop; + list<Symbol> push(1, Symbol(stackSymbolName)); + const TransitionPDA transition(fromState, *callSymbol, toState, pop, push); + deterministicVPA.addTransition(transition); + } } // Return symbols @@ -130,12 +134,14 @@ PDA VPADeterminizer::determinize(PDA& nondeterministicVPA) { } } } - const State& fromState = unmarkedStateData->state; - const State& toState = VPADeterminizationUtils::getOrCreateState(sPrimed, rPrimed, states, deterministicVPA); - list<Symbol> pop(1, VPADeterminizationUtils::BOTTOM_OF_STACK_SYMBOL); - list<Symbol> push; - const TransitionPDA transition(fromState, *returnSymbol, toState, pop, push); - deterministicVPA.addTransition(transition); + if (sPrimed.statesPairs.size() > 0 && rPrimed.states.size() > 0) { + const State& fromState = unmarkedStateData->state; + const State& toState = VPADeterminizationUtils::getOrCreateState(sPrimed, rPrimed, states, deterministicVPA); + list<Symbol> pop(1, VPADeterminizationUtils::BOTTOM_OF_STACK_SYMBOL); + list<Symbol> push; + const TransitionPDA transition(fromState, *returnSymbol, toState, pop, push); + deterministicVPA.addTransition(transition); + } // Otherwise for (set<Symbol>::iterator callSymbol = callSymbols.begin(); callSymbol != callSymbols.end(); callSymbol++) { @@ -198,15 +204,16 @@ PDA VPADeterminizer::determinize(PDA& nondeterministicVPA) { } } } - - const State& fromState = unmarkedStateData->state; - const State& toState = VPADeterminizationUtils::getOrCreateState(sDoublePrimed, rDoublePrimed, - states, deterministicVPA); - string stackSymbolName = VPADeterminizationUtils::buildStackSymbolName(sPrimed, rPrimed, *callSymbol); - list<Symbol> pop(1, Symbol(stackSymbolName)); - list<Symbol> push; - const TransitionPDA transition(fromState, *returnSymbol, toState, pop, push); - deterministicVPA.addTransition(transition); + if (sDoublePrimed.statesPairs.size() > 0 && rDoublePrimed.states.size() > 0) { + const State& fromState = unmarkedStateData->state; + const State& toState = VPADeterminizationUtils::getOrCreateState(sDoublePrimed, rDoublePrimed, + states, deterministicVPA); + string stackSymbolName = VPADeterminizationUtils::buildStackSymbolName(sPrimed, rPrimed, *callSymbol); + list<Symbol> pop(1, Symbol(stackSymbolName)); + list<Symbol> push; + const TransitionPDA transition(fromState, *returnSymbol, toState, pop, push); + deterministicVPA.addTransition(transition); + } } } } diff --git a/adeterminize.vpa2/src/VPADeterminizer2.cpp b/adeterminize.vpa2/src/VPADeterminizer2.cpp index a6df6c9b2a..03c8e8e346 100644 --- a/adeterminize.vpa2/src/VPADeterminizer2.cpp +++ b/adeterminize.vpa2/src/VPADeterminizer2.cpp @@ -61,10 +61,12 @@ PDA VPADeterminizer2::determinize(PDA& nondeterministicVPA) { } } } - const State& fromState = unmarkedStateData->state; - const State& toState = VPADeterminizationUtils::getOrCreateState(sPrimed, rPrimed, states, deterministicVPA); - const TransitionPDA transition(fromState, *internalSymbol, toState); - deterministicVPA.addTransition(transition); + if (sPrimed.statesPairs.size() > 0 && rPrimed.states.size() > 0) { + const State& fromState = unmarkedStateData->state; + const State& toState = VPADeterminizationUtils::getOrCreateState(sPrimed, rPrimed, states, deterministicVPA); + const TransitionPDA transition(fromState, *internalSymbol, toState); + deterministicVPA.addTransition(transition); + } } // Call symbols @@ -83,15 +85,17 @@ PDA VPADeterminizer2::determinize(PDA& nondeterministicVPA) { } } } - SComponent& s = unmarkedStateData->s; - const SComponent& sPrimed = VPADeterminizationUtils::getSComponentWithStatesIdentity(rPrimed.states); - const State& fromState = unmarkedStateData->state; - const State& toState = VPADeterminizationUtils::getOrCreateState(sPrimed, rPrimed, states, deterministicVPA); - string stackSymbolName = VPADeterminizationUtils::buildStackSymbolName(s, r, *callSymbol); - list<Symbol> pop; - list<Symbol> push(1, Symbol(stackSymbolName)); - const TransitionPDA transition(fromState, *callSymbol, toState, pop, push); - deterministicVPA.addTransition(transition); + if (rPrimed.states.size() > 0) { + SComponent& s = unmarkedStateData->s; + const SComponent& sPrimed = VPADeterminizationUtils::getSComponentWithStatesIdentity(rPrimed.states); + const State& fromState = unmarkedStateData->state; + const State& toState = VPADeterminizationUtils::getOrCreateState(sPrimed, rPrimed, states, deterministicVPA); + string stackSymbolName = VPADeterminizationUtils::buildStackSymbolName(s, r, *callSymbol); + list<Symbol> pop; + list<Symbol> push(1, Symbol(stackSymbolName)); + const TransitionPDA transition(fromState, *callSymbol, toState, pop, push); + deterministicVPA.addTransition(transition); + } } // Return symbols @@ -131,12 +135,14 @@ PDA VPADeterminizer2::determinize(PDA& nondeterministicVPA) { } } } - const State& fromState = unmarkedStateData->state; - const State& toState = VPADeterminizationUtils::getOrCreateState(sPrimed, rPrimed, states, deterministicVPA); - list<Symbol> pop(1, VPADeterminizationUtils::BOTTOM_OF_STACK_SYMBOL); - list<Symbol> push; - const TransitionPDA transition(fromState, *returnSymbol, toState, pop, push); - deterministicVPA.addTransition(transition); + if (sPrimed.statesPairs.size() > 0 && rPrimed.states.size() > 0) { + const State& fromState = unmarkedStateData->state; + const State& toState = VPADeterminizationUtils::getOrCreateState(sPrimed, rPrimed, states, deterministicVPA); + list<Symbol> pop(1, VPADeterminizationUtils::BOTTOM_OF_STACK_SYMBOL); + list<Symbol> push; + const TransitionPDA transition(fromState, *returnSymbol, toState, pop, push); + deterministicVPA.addTransition(transition); + } // Otherwise for (set<Symbol>::iterator callSymbol = callSymbols.begin(); callSymbol != callSymbols.end(); callSymbol++) { @@ -197,15 +203,16 @@ PDA VPADeterminizer2::determinize(PDA& nondeterministicVPA) { } } } - - const State& fromState = unmarkedStateData->state; - const State& toState = VPADeterminizationUtils::getOrCreateState(sDoublePrimed, rDoublePrimed, - states, deterministicVPA); - string stackSymbolName = VPADeterminizationUtils::buildStackSymbolName(sPrimed, rPrimed, *callSymbol); - list<Symbol> pop(1, Symbol(stackSymbolName)); - list<Symbol> push; - const TransitionPDA transition(fromState, *returnSymbol, toState, pop, push); - deterministicVPA.addTransition(transition); + if (sDoublePrimed.statesPairs.size() > 0 && rDoublePrimed.states.size() > 0) { + const State& fromState = unmarkedStateData->state; + const State& toState = VPADeterminizationUtils::getOrCreateState(sDoublePrimed, rDoublePrimed, + states, deterministicVPA); + string stackSymbolName = VPADeterminizationUtils::buildStackSymbolName(sPrimed, rPrimed, *callSymbol); + list<Symbol> pop(1, Symbol(stackSymbolName)); + list<Symbol> push; + const TransitionPDA transition(fromState, *returnSymbol, toState, pop, push); + deterministicVPA.addTransition(transition); + } } } } diff --git a/adeterminize.vpa3/src/VPADeterminizer3.cpp b/adeterminize.vpa3/src/VPADeterminizer3.cpp index a4e0016072..f6d00268df 100644 --- a/adeterminize.vpa3/src/VPADeterminizer3.cpp +++ b/adeterminize.vpa3/src/VPADeterminizer3.cpp @@ -132,10 +132,12 @@ PDA VPADeterminizer3::determinize(PDA& nondeterministicVPA) { } } } - const State& fromState = unmarkedStateData->state; - const State& toState = VPADeterminizer3::getOrCreateState(sPrimed, states, deterministicVPA); - const TransitionPDA transition(fromState, *internalSymbol, toState); - deterministicVPA.addTransition(transition); + if (sPrimed.statesPairs.size() > 0) { + const State& fromState = unmarkedStateData->state; + const State& toState = VPADeterminizer3::getOrCreateState(sPrimed, states, deterministicVPA); + const TransitionPDA transition(fromState, *internalSymbol, toState); + deterministicVPA.addTransition(transition); + } } // Call symbols @@ -157,14 +159,16 @@ PDA VPADeterminizer3::determinize(PDA& nondeterministicVPA) { } } } - const SComponent& sPrimed = VPADeterminizationUtils::getSComponentWithStatesIdentity(rPrimed.states); - const State& fromState = unmarkedStateData->state; - const State& toState = VPADeterminizer3::getOrCreateState(sPrimed, states, deterministicVPA); - string stackSymbolName = VPADeterminizer3::buildStackSymbolName(s, *callSymbol); - list<Symbol> pop; - list<Symbol> push(1, Symbol(stackSymbolName)); - const TransitionPDA transition(fromState, *callSymbol, toState, pop, push); - deterministicVPA.addTransition(transition); + if (rPrimed.states.size() > 0) { + const SComponent& sPrimed = VPADeterminizationUtils::getSComponentWithStatesIdentity(rPrimed.states); + const State& fromState = unmarkedStateData->state; + const State& toState = VPADeterminizer3::getOrCreateState(sPrimed, states, deterministicVPA); + string stackSymbolName = VPADeterminizer3::buildStackSymbolName(s, *callSymbol); + list<Symbol> pop; + list<Symbol> push(1, Symbol(stackSymbolName)); + const TransitionPDA transition(fromState, *callSymbol, toState, pop, push); + deterministicVPA.addTransition(transition); + } } // Return symbols @@ -191,12 +195,14 @@ PDA VPADeterminizer3::determinize(PDA& nondeterministicVPA) { } } } - const State& fromState = unmarkedStateData->state; - const State& toState = VPADeterminizer3::getOrCreateState(sPrimed, states, deterministicVPA); - list<Symbol> pop(1, VPADeterminizationUtils::BOTTOM_OF_STACK_SYMBOL); - list<Symbol> push; - const TransitionPDA transition(fromState, *returnSymbol, toState, pop, push); - deterministicVPA.addTransition(transition); + if (sPrimed.statesPairs.size() > 0) { + const State& fromState = unmarkedStateData->state; + const State& toState = VPADeterminizer3::getOrCreateState(sPrimed, states, deterministicVPA); + list<Symbol> pop(1, VPADeterminizationUtils::BOTTOM_OF_STACK_SYMBOL); + list<Symbol> push; + const TransitionPDA transition(fromState, *returnSymbol, toState, pop, push); + deterministicVPA.addTransition(transition); + } // Otherwise for (set<Symbol>::iterator callSymbol = callSymbols.begin(); callSymbol != callSymbols.end(); callSymbol++) { @@ -245,13 +251,15 @@ PDA VPADeterminizer3::determinize(PDA& nondeterministicVPA) { } } } - const State& fromState = unmarkedStateData->state; - const State& toState = VPADeterminizer3::getOrCreateState(sDoublePrimed, states, deterministicVPA); - string stackSymbolName = VPADeterminizer3::buildStackSymbolName(sPrimed, *callSymbol); - list<Symbol> pop(1, Symbol(stackSymbolName)); - list<Symbol> push; - const TransitionPDA transition(fromState, *returnSymbol, toState, pop, push); - deterministicVPA.addTransition(transition); + if (sDoublePrimed.statesPairs.size() > 0) { + const State& fromState = unmarkedStateData->state; + const State& toState = VPADeterminizer3::getOrCreateState(sDoublePrimed, states, deterministicVPA); + string stackSymbolName = VPADeterminizer3::buildStackSymbolName(sPrimed, *callSymbol); + list<Symbol> pop(1, Symbol(stackSymbolName)); + list<Symbol> push; + const TransitionPDA transition(fromState, *returnSymbol, toState, pop, push); + deterministicVPA.addTransition(transition); + } } } } -- GitLab