diff --git a/alib2algo/makefile b/alib2algo/makefile index 38bca86b66f086f610da9ff2985a30493671b4ef..bf9f76e92604e1768a0c1f7bea9ac9cc0f568d5f 100644 --- a/alib2algo/makefile +++ b/alib2algo/makefile @@ -10,6 +10,8 @@ endef export NEW_LINE +CXX_FLAGS := -Wall -pedantic -Wextra -Werror -Wshadow -Wpointer-arith -Wcast-qual -Wdelete-non-virtual-dtor -Wredundant-decls + space := $(eval) $(eval) LDFLAGS_DEBUG:=-rdynamic -shared @@ -54,7 +56,7 @@ FORCE: $${NEW_LINE}\ export NEW_LINE$${NEW_LINE}\ $${NEW_LINE}\ - CXXFLAGS:= -pipe -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -Werror -fPIC \$$(addprefix -I, \$$(realpath $(INCLUDE_PATHS))) -I\$$(realpath \$$(SOURCES_BASE_DIR)/../src/)$${NEW_LINE}\ + CXXFLAGS:= -pipe -std=c++11 \$$(CXX_OTHER_FLAGS) -c $(CXX_FLAGS) -fPIC \$$(addprefix -I, \$$(realpath $(INCLUDE_PATHS))) -I\$$(realpath \$$(SOURCES_BASE_DIR)/../src/)$${NEW_LINE}\ $${NEW_LINE}\ SOURCES:= \$$(shell find \$$(SOURCES_BASE_DIR)/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")$${NEW_LINE}\ DEPENDENCIES:= \$$(patsubst \$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))$${NEW_LINE}\ diff --git a/alib2algo/src/arbology/exact/ExactPatternMatchingAutomaton.cpp b/alib2algo/src/arbology/exact/ExactPatternMatchingAutomaton.cpp index 2a8e3f767f044fdc3e39639a527b276a902465be..7b634dab3e0e6dc1858adcb4852b4bd4cb03a4a0 100644 --- a/alib2algo/src/arbology/exact/ExactPatternMatchingAutomaton.cpp +++ b/alib2algo/src/arbology/exact/ExactPatternMatchingAutomaton.cpp @@ -88,19 +88,19 @@ automaton::NPDA < > ExactPatternMatchingAutomaton::construct ( const tree::Prefi res.addState ( label::labelFrom ( i ) ); if ( symbol == pattern.getSubtreeWildcard ( ) ) - for ( const std::ranked_symbol < > & symbol : pattern.getAlphabet ( ) ) { - if ( symbol == pattern.getSubtreeWildcard ( ) ) continue; + for ( const std::ranked_symbol < > & alphabetSymbol : pattern.getAlphabet ( ) ) { + if ( alphabetSymbol == pattern.getSubtreeWildcard ( ) ) continue; - if ( symbol.getRank ( ).getData ( ) == 0 ) { - res.addTransition ( label::labelFrom ( i - 1 ), alphabet::Symbol ( alphabet::RankedSymbol < > { symbol } ), std::vector < alphabet::Symbol > ( 1, alphabet::symbolFrom ( 'T' ) ), label::labelFrom ( i - 1 ), std::vector < alphabet::Symbol > { } ); + if ( alphabetSymbol.getRank ( ).getData ( ) == 0 ) { + res.addTransition ( label::labelFrom ( i - 1 ), alphabet::Symbol ( alphabet::RankedSymbol < > { alphabetSymbol } ), std::vector < alphabet::Symbol > ( 1, alphabet::symbolFrom ( 'T' ) ), label::labelFrom ( i - 1 ), std::vector < alphabet::Symbol > { } ); - res.addTransition ( label::labelFrom ( i - 1 ), alphabet::Symbol ( alphabet::RankedSymbol < > { symbol } ), std::vector < alphabet::Symbol > ( 1, alphabet::symbolFrom ( 'R' ) ), label::labelFrom ( i ), std::vector < alphabet::Symbol > { } ); + res.addTransition ( label::labelFrom ( i - 1 ), alphabet::Symbol ( alphabet::RankedSymbol < > { alphabetSymbol } ), std::vector < alphabet::Symbol > ( 1, alphabet::symbolFrom ( 'R' ) ), label::labelFrom ( i ), std::vector < alphabet::Symbol > { } ); } else { - std::vector < alphabet::Symbol > push ( symbol.getRank ( ).getData ( ), alphabet::symbolFrom ( 'T' ) ); - res.addTransition ( label::labelFrom ( i - 1 ), alphabet::Symbol ( alphabet::RankedSymbol < > { symbol } ), std::vector < alphabet::Symbol > ( 1, alphabet::symbolFrom ( 'T' ) ), label::labelFrom ( i - 1 ), push ); + std::vector < alphabet::Symbol > push ( alphabetSymbol.getRank ( ).getData ( ), alphabet::symbolFrom ( 'T' ) ); + res.addTransition ( label::labelFrom ( i - 1 ), alphabet::Symbol ( alphabet::RankedSymbol < > { alphabetSymbol } ), std::vector < alphabet::Symbol > ( 1, alphabet::symbolFrom ( 'T' ) ), label::labelFrom ( i - 1 ), push ); - push[symbol.getRank ( ).getData ( ) - 1] = alphabet::symbolFrom ( 'R' ); - res.addTransition ( label::labelFrom ( i - 1 ), alphabet::Symbol ( alphabet::RankedSymbol < > { symbol } ), std::vector < alphabet::Symbol > ( 1, alphabet::symbolFrom ( 'R' ) ), label::labelFrom ( i - 1 ), push ); + push[alphabetSymbol.getRank ( ).getData ( ) - 1] = alphabet::symbolFrom ( 'R' ); + res.addTransition ( label::labelFrom ( i - 1 ), alphabet::Symbol ( alphabet::RankedSymbol < > { alphabetSymbol } ), std::vector < alphabet::Symbol > ( 1, alphabet::symbolFrom ( 'R' ) ), label::labelFrom ( i - 1 ), push ); } } @@ -154,25 +154,25 @@ automaton::VisiblyPushdownNPDA < > ExactPatternMatchingAutomaton::construct ( co res.addState ( label::labelFrom ( i ) ); if ( symbol == pattern.getSubtreeWildcard ( ) ) { - for ( const std::ranked_symbol < > & symbol : pattern.getAlphabet ( ) ) { - if ( ( symbol == pattern.getSubtreeWildcard ( ) ) || ( symbol == pattern.getVariablesBar ( ) ) || ( pattern.getBars ( ).count ( symbol ) ) ) continue; + for ( const std::ranked_symbol < > & alphabetSymbol : pattern.getAlphabet ( ) ) { + if ( ( alphabetSymbol == pattern.getSubtreeWildcard ( ) ) || ( alphabetSymbol == pattern.getVariablesBar ( ) ) || ( pattern.getBars ( ).count ( alphabetSymbol ) ) ) continue; - res.addCallTransition ( label::labelFrom ( i - 1 ), alphabet::Symbol ( alphabet::RankedSymbol < > { symbol } ), label::labelFrom ( i ), alphabet::symbolFrom ( 'R' ) ); + res.addCallTransition ( label::labelFrom ( i - 1 ), alphabet::Symbol ( alphabet::RankedSymbol < > { alphabetSymbol } ), label::labelFrom ( i ), alphabet::symbolFrom ( 'R' ) ); } } else if ( symbol == pattern.getVariablesBar ( ) ) { - for ( const std::ranked_symbol < > & symbol : pattern.getAlphabet ( ) ) { - if ( ( symbol == pattern.getSubtreeWildcard ( ) ) || ( symbol == pattern.getVariablesBar ( ) ) ) continue; + for ( const std::ranked_symbol < > & alphabetSymbol : pattern.getAlphabet ( ) ) { + if ( ( alphabetSymbol == pattern.getSubtreeWildcard ( ) ) || ( alphabetSymbol == pattern.getVariablesBar ( ) ) ) continue; - if ( pattern.getBars ( ).count ( symbol ) ) - res.addReturnTransition ( label::labelFrom ( i - 1 ), alphabet::Symbol ( alphabet::RankedSymbol < > { symbol } ), alphabet::symbolFrom ( 'T' ), label::labelFrom ( i - 1 ) ); + if ( pattern.getBars ( ).count ( alphabetSymbol ) ) + res.addReturnTransition ( label::labelFrom ( i - 1 ), alphabet::Symbol ( alphabet::RankedSymbol < > { alphabetSymbol } ), alphabet::symbolFrom ( 'T' ), label::labelFrom ( i - 1 ) ); else - res.addCallTransition ( label::labelFrom ( i - 1 ), alphabet::Symbol ( alphabet::RankedSymbol < > { symbol } ), label::labelFrom ( i - 1 ), alphabet::symbolFrom ( 'T' ) ); + res.addCallTransition ( label::labelFrom ( i - 1 ), alphabet::Symbol ( alphabet::RankedSymbol < > { alphabetSymbol } ), label::labelFrom ( i - 1 ), alphabet::symbolFrom ( 'T' ) ); } - for ( const std::ranked_symbol < > & symbol : pattern.getAlphabet ( ) ) { - if ( ( symbol == pattern.getSubtreeWildcard ( ) ) || ( symbol == pattern.getVariablesBar ( ) ) || ( ! pattern.getBars ( ).count ( symbol ) ) ) continue; + for ( const std::ranked_symbol < > & alphabetSymbol : pattern.getAlphabet ( ) ) { + if ( ( alphabetSymbol == pattern.getSubtreeWildcard ( ) ) || ( alphabetSymbol == pattern.getVariablesBar ( ) ) || ( ! pattern.getBars ( ).count ( alphabetSymbol ) ) ) continue; - res.addReturnTransition ( label::labelFrom ( i - 1 ), alphabet::Symbol ( alphabet::RankedSymbol < > { symbol } ), alphabet::symbolFrom ( 'R' ), label::labelFrom ( i ) ); + res.addReturnTransition ( label::labelFrom ( i - 1 ), alphabet::Symbol ( alphabet::RankedSymbol < > { alphabetSymbol } ), alphabet::symbolFrom ( 'R' ), label::labelFrom ( i ) ); } } else if ( pattern.getBars ( ).count ( symbol ) ) { res.addReturnTransition ( label::labelFrom ( i - 1 ), alphabet::Symbol ( alphabet::RankedSymbol < > { symbol } ), alphabet::symbolFrom ( 'T' ), label::labelFrom ( i ) ); diff --git a/alib2algo/src/automaton/run/Run.cpp b/alib2algo/src/automaton/run/Run.cpp index a42c83cc46530a8f06a65b5c3ac65c39ce9d42b0..cc897cb58fda3313beb36f48fe7da768c338ce3f 100644 --- a/alib2algo/src/automaton/run/Run.cpp +++ b/alib2algo/src/automaton/run/Run.cpp @@ -173,14 +173,18 @@ std::pair < bool, std::set < label::Label > > Run::calculateStates ( const autom std::set < label::Label > states; for ( const auto & transition : automaton.getTransitions ( ) ) { - if ( transition.first.first != node.getData ( ) ) continue; + if ( transition.first.first != node.getData ( ) ) + continue; unsigned rank = transition.first.first.getRank ( ).getData ( ); + unsigned j; - for ( unsigned i = 0; i < rank; i++ ) - if ( !resStates[i].count ( transition.first.second[i] ) ) break; + for ( j = 0; j < rank; j++ ) + if ( !resStates[j].count ( transition.first.second[j] ) ) + break; - if ( i == rank ) states.insert ( transition.second.begin ( ), transition.second.end ( ) ); + if ( j == rank ) + states.insert ( transition.second.begin ( ), transition.second.end ( ) ); } for ( const label::Label & state : states ) @@ -249,7 +253,7 @@ std::tuple < bool, label::Label, std::set < unsigned >, std::deque < alphabet::S for ( unsigned j = 0; j < operation.first.size ( ); j++ ) pushdownStore.pop_back ( ); - for ( const auto & symbol : std::make_reverse ( operation.second ) ) pushdownStore.push_back ( symbol ); + for ( const auto & push : std::make_reverse ( operation.second ) ) pushdownStore.push_back ( push ); state = transition->second; i++; @@ -474,9 +478,9 @@ std::tuple < bool, label::Label, std::set < unsigned >, std::deque < alphabet::S // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- struct graphStructuredStack { - graphStructuredStack ( std::shared_ptr < graphStructuredStack > parent, alphabet::Symbol data ) : parent(parent), data(data) {} - std::shared_ptr < graphStructuredStack > parent; - alphabet::Symbol data; + graphStructuredStack ( std::shared_ptr < graphStructuredStack > parent, alphabet::Symbol data ) : m_parent(parent), m_data(data) {} + std::shared_ptr < graphStructuredStack > m_parent; + alphabet::Symbol m_data; }; std::tuple < bool, std::set < label::Label >, std::set < std::vector < alphabet::Symbol > > > Run::calculateStates ( const automaton::NPDTA < > & automaton, const string::LinearString < > & string ) { @@ -508,12 +512,12 @@ std::tuple < bool, std::set < label::Label >, std::set < std::vector < alphabet: if ( symbolIter == string . getContent () . end () ) { states . insert ( state ); - if ( automaton . getFinalStates () . count ( state ) && stackNode -> parent == NULL ) { + if ( automaton . getFinalStates () . count ( state ) && stackNode -> m_parent == NULL ) { res = true; std::vector < alphabet::Symbol > output; - while ( outputNode->parent != NULL ) { - output . push_back ( outputNode->data ); - outputNode = outputNode -> parent; + while ( outputNode->m_parent != NULL ) { + output . push_back ( outputNode->m_data ); + outputNode = outputNode -> m_parent; } std::reverse ( output.begin(), output.end() ); allOutputs . insert ( output ); @@ -531,10 +535,10 @@ std::tuple < bool, std::set < label::Label >, std::set < std::vector < alphabet: unsigned j = 0; for ( ; j < pop . size (); j ++ ) { - if ( stackNodeCopy->parent == NULL || stackNodeCopy->data != pop . at (j) ) { + if ( stackNodeCopy->m_parent == NULL || stackNodeCopy->m_data != pop . at (j) ) { break; } - stackNodeCopy = stackNodeCopy -> parent; + stackNodeCopy = stackNodeCopy -> m_parent; } if ( j == pop . size () ) { for ( const auto & elem : std::make_reverse ( std::get<1>(transition . second ) ) ) { diff --git a/alib2algo/src/automaton/transform/RHPDAToPDA.cpp b/alib2algo/src/automaton/transform/RHPDAToPDA.cpp index b4f5629a78e9f280bc906374def36bdbbb04ed12..7906b2088c65c06160e8654353e66e0f6555599b 100644 --- a/alib2algo/src/automaton/transform/RHPDAToPDA.cpp +++ b/alib2algo/src/automaton/transform/RHPDAToPDA.cpp @@ -140,12 +140,12 @@ automaton::DPDA < > RHPDAToPDA::convert ( const automaton::RealTimeHeightDetermi res.setPushdownStoreAlphabet ( pda.getPushdownStoreAlphabet ( ) ); res.removePushdownStoreSymbol ( pda.getBottomOfTheStackSymbol ( ) ); - for ( const auto & st : readingTransitions ) - for ( const auto & to : st.second ) { - std::vector < alphabet::Symbol > pops ( std::get < 2 > ( st.first ).begin ( ), std::get < 2 > ( st.first ).end ( ) ); - std::vector < alphabet::Symbol > pushes ( to.second.rbegin ( ), to.second.rend ( ) ); + for ( const auto & transition : readingTransitions ) + for ( const auto & to : transition.second ) { + pops = std::vector < alphabet::Symbol > ( std::get < 2 > ( transition.first ).begin ( ), std::get < 2 > ( transition.first ).end ( ) ); + pushes = std::vector < alphabet::Symbol > ( to.second.rbegin ( ), to.second.rend ( ) ); - constructTransitions ( st.first, epsilonTransitions, to.first, std::move ( pops ), std::move ( pushes ), res ); + constructTransitions ( transition.first, epsilonTransitions, to.first, std::move ( pops ), std::move ( pushes ), res ); } res.setFinalStates ( pda.getFinalStates ( ) ); @@ -256,12 +256,12 @@ automaton::NPDA < > RHPDAToPDA::convert ( const automaton::RealTimeHeightDetermi res.setPushdownStoreAlphabet ( pda.getPushdownStoreAlphabet ( ) ); res.removePushdownStoreSymbol ( pda.getBottomOfTheStackSymbol ( ) ); - for ( const auto & st : readingTransitions ) - for ( const auto & to : st.second ) { - std::vector < alphabet::Symbol > pops ( std::get < 2 > ( st.first ).begin ( ), std::get < 2 > ( st.first ).end ( ) ); - std::vector < alphabet::Symbol > pushes ( to.second.rbegin ( ), to.second.rend ( ) ); + for ( const auto & transition : readingTransitions ) + for ( const auto & to : transition.second ) { + pops = std::vector < alphabet::Symbol > ( std::get < 2 > ( transition.first ).begin ( ), std::get < 2 > ( transition.first ).end ( ) ); + pushes = std::vector < alphabet::Symbol > ( to.second.rbegin ( ), to.second.rend ( ) ); - constructTransitions ( st.first, epsilonTransitions, to.first, std::move ( pops ), std::move ( pushes ), res ); + constructTransitions ( transition.first, epsilonTransitions, to.first, std::move ( pops ), std::move ( pushes ), res ); } res.setFinalStates ( pda.getFinalStates ( ) ); diff --git a/alib2algo/src/equations/LeftRegularEquationSolver.cpp b/alib2algo/src/equations/LeftRegularEquationSolver.cpp index 52b1dfe3c2af2224dc0b93025f0ea01504a66ff3..6e1eff91475a1d8a790787a46523bfdf70cc21eb 100644 --- a/alib2algo/src/equations/LeftRegularEquationSolver.cpp +++ b/alib2algo/src/equations/LeftRegularEquationSolver.cpp @@ -30,18 +30,21 @@ regexp::UnboundedRegExp < > LeftRegularEquationSolver::eliminate(void) { regexp::UnboundedRegExpConcatenation < alphabet::Symbol > concat; concat.appendElement(std::move(equationTransition.find(std::make_pair(a, b))->second)); concat.appendElement(loop); - regexp::UnboundedRegExpAlternation < alphabet::Symbol > alt; + regexp::UnboundedRegExpAlternation < alphabet::Symbol > alt; alt.appendElement(std::move(concat)); equationTransition.find(std::make_pair(a, b))->second = std::move(alt); regexp::simplify::RegExpOptimize::optimize(equationTransition.find(std::make_pair(a, b))->second); } - regexp::UnboundedRegExpConcatenation < alphabet::Symbol > concat; - concat.appendElement(std::move(equationFinal.find(a)->second)); - concat.appendElement(std::move(loop)); - regexp::UnboundedRegExpAlternation < alphabet::Symbol > alt; - alt.appendElement(std::move(concat)); - equationFinal.find(a)->second = std::move(alt); - regexp::simplify::RegExpOptimize::optimize(equationFinal.find(a)->second); + + { + regexp::UnboundedRegExpConcatenation < alphabet::Symbol > concat; + concat.appendElement(std::move(equationFinal.find(a)->second)); + concat.appendElement(std::move(loop)); + regexp::UnboundedRegExpAlternation < alphabet::Symbol > alt; + alt.appendElement(std::move(concat)); + equationFinal.find(a)->second = std::move(alt); + regexp::simplify::RegExpOptimize::optimize(equationFinal.find(a)->second); + } /* * eliminate A from rest of the equations using this pattern: @@ -56,21 +59,23 @@ regexp::UnboundedRegExp < > LeftRegularEquationSolver::eliminate(void) { regexp::UnboundedRegExpConcatenation < alphabet::Symbol > concat; concat.appendElement(equationTransition.find(std::make_pair(a, c))->second); concat.appendElement(equationTransition.find(std::make_pair(b, a))->second); - regexp::UnboundedRegExpAlternation < alphabet::Symbol > alt; + regexp::UnboundedRegExpAlternation < alphabet::Symbol > alt; alt.appendElement(std::move(equationTransition.find(std::make_pair(b, c))->second)); alt.appendElement(std::move(concat)); equationTransition.find(std::make_pair(b, c))->second = std::move(alt); regexp::simplify::RegExpOptimize::optimize(equationTransition.find(std::make_pair(b, c))->second); } - regexp::UnboundedRegExpConcatenation < alphabet::Symbol > concat; - concat.appendElement(equationFinal.find(a)->second); - concat.appendElement(std::move(equationTransition.find(std::make_pair(b, a))->second)); - regexp::UnboundedRegExpAlternation < alphabet::Symbol > alt; - alt.appendElement(std::move(equationFinal.find(b)->second)); - alt.appendElement(std::move(concat)); - equationFinal.find(b)->second = std::move(alt); - regexp::simplify::RegExpOptimize::optimize(equationFinal.find(b)->second); + { + regexp::UnboundedRegExpConcatenation < alphabet::Symbol > concat; + concat.appendElement(equationFinal.find(a)->second); + concat.appendElement(std::move(equationTransition.find(std::make_pair(b, a))->second)); + regexp::UnboundedRegExpAlternation < alphabet::Symbol > alt; + alt.appendElement(std::move(equationFinal.find(b)->second)); + alt.appendElement(std::move(concat)); + equationFinal.find(b)->second = std::move(alt); + regexp::simplify::RegExpOptimize::optimize(equationFinal.find(b)->second); + } } } diff --git a/alib2algo/src/equations/RightRegularEquationSolver.cpp b/alib2algo/src/equations/RightRegularEquationSolver.cpp index 891caedf8b5b84b5dc7a2329d97dd9dbecd8b5f6..aa32ad7b38da17b09675756dd8f377c8c8977059 100644 --- a/alib2algo/src/equations/RightRegularEquationSolver.cpp +++ b/alib2algo/src/equations/RightRegularEquationSolver.cpp @@ -30,18 +30,21 @@ regexp::UnboundedRegExp < > RightRegularEquationSolver::eliminate(void) { regexp::UnboundedRegExpConcatenation < alphabet::Symbol > concat; concat.appendElement(loop); concat.appendElement(std::move(equationTransition.find(std::make_pair(a,b))->second)); - regexp::UnboundedRegExpAlternation < alphabet::Symbol > alt; + regexp::UnboundedRegExpAlternation < alphabet::Symbol > alt; alt.appendElement(std::move(concat)); equationTransition.find(std::make_pair(a, b))->second = std::move(alt); regexp::simplify::RegExpOptimize::optimize(equationTransition.find(std::make_pair(a, b))->second); } - regexp::UnboundedRegExpConcatenation < alphabet::Symbol > concat; - concat.appendElement(std::move(loop)); - concat.appendElement(std::move(equationFinal.find(a)->second)); - regexp::UnboundedRegExpAlternation < alphabet::Symbol > alt; - alt.appendElement(std::move(concat)); - equationFinal.find(a)->second = std::move(alt); - regexp::simplify::RegExpOptimize::optimize(equationFinal.find(a)->second); + + { + regexp::UnboundedRegExpConcatenation < alphabet::Symbol > concat; + concat.appendElement(std::move(loop)); + concat.appendElement(std::move(equationFinal.find(a)->second)); + regexp::UnboundedRegExpAlternation < alphabet::Symbol > alt; + alt.appendElement(std::move(concat)); + equationFinal.find(a)->second = std::move(alt); + regexp::simplify::RegExpOptimize::optimize(equationFinal.find(a)->second); + } /* * eliminate A from rest of the equations using this pattern: @@ -56,21 +59,23 @@ regexp::UnboundedRegExp < > RightRegularEquationSolver::eliminate(void) { regexp::UnboundedRegExpConcatenation < alphabet::Symbol > concat; concat.appendElement(equationTransition.find(std::make_pair(b, a))->second); concat.appendElement(equationTransition.find(std::make_pair(a, c))->second); - regexp::UnboundedRegExpAlternation < alphabet::Symbol > alt; + regexp::UnboundedRegExpAlternation < alphabet::Symbol > alt; alt.appendElement(std::move(equationTransition.find(std::make_pair(b, c))->second)); alt.appendElement(std::move(concat)); equationTransition.find(std::make_pair(b, c))->second = std::move(alt); regexp::simplify::RegExpOptimize::optimize(equationTransition.find(std::make_pair(b, c))->second); } - regexp::UnboundedRegExpConcatenation < alphabet::Symbol > concat; - concat.appendElement(std::move(equationTransition.find(std::make_pair(b, a))->second)); - concat.appendElement(equationFinal.find(a)->second); - regexp::UnboundedRegExpAlternation < alphabet::Symbol > alt; - alt.appendElement(std::move(equationFinal.find(b)->second)); - alt.appendElement(std::move(concat)); - equationFinal.find(b)->second = std::move(alt); - regexp::simplify::RegExpOptimize::optimize(equationFinal.find(b)->second); + { + regexp::UnboundedRegExpConcatenation < alphabet::Symbol > concat; + concat.appendElement(std::move(equationTransition.find(std::make_pair(b, a))->second)); + concat.appendElement(equationFinal.find(a)->second); + regexp::UnboundedRegExpAlternation < alphabet::Symbol > alt; + alt.appendElement(std::move(equationFinal.find(b)->second)); + alt.appendElement(std::move(concat)); + equationFinal.find(b)->second = std::move(alt); + regexp::simplify::RegExpOptimize::optimize(equationFinal.find(b)->second); + } } } diff --git a/alib2algo/src/grammar/convert/ToGrammarLeftRG.cpp b/alib2algo/src/grammar/convert/ToGrammarLeftRG.cpp index 847b0b5553a7bb9d81282c9e5b20136aa9bb3d13..ced00f9e09e6f8308f2d6c6574d9e989d4bbb8c6 100644 --- a/alib2algo/src/grammar/convert/ToGrammarLeftRG.cpp +++ b/alib2algo/src/grammar/convert/ToGrammarLeftRG.cpp @@ -41,9 +41,9 @@ grammar::LeftRG < > ToGrammarLeftRG::convert(const grammar::RightRG < > & gramma lrg.addRule( leftSide, rightSide ); if( lhs == grammar.getInitialSymbol( ) ) { - alphabet::Symbol leftSide = rhs.second; - alphabet::Symbol rightSide = rhs.first; - lrg.addRule( leftSide, rightSide ); + leftSide = rhs.second; + alphabet::Symbol rightSide2 = rhs.first; + lrg.addRule( leftSide, rightSide2 ); } } else { const alphabet::Symbol& rhs = ruleRHS.get<alphabet::Symbol>(); @@ -53,9 +53,9 @@ grammar::LeftRG < > ToGrammarLeftRG::convert(const grammar::RightRG < > & gramma lrg.addRule( leftSide, rightSide ); if( lhs == grammar.getInitialSymbol( ) ) { - alphabet::Symbol leftSide = lrg.getInitialSymbol( ); - alphabet::Symbol rightSide = rhs; - lrg.addRule( leftSide, rightSide ); + leftSide = lrg.getInitialSymbol( ); + alphabet::Symbol rightSide2 = rhs; + lrg.addRule( leftSide, rightSide2 ); } } } diff --git a/alib2algo/src/grammar/convert/ToGrammarRightRG.cpp b/alib2algo/src/grammar/convert/ToGrammarRightRG.cpp index beccc40f23a344f694c23f74c6b0a7c7638dde68..74a132e8d04fc2b786325bb17d234a150ba9163e 100644 --- a/alib2algo/src/grammar/convert/ToGrammarRightRG.cpp +++ b/alib2algo/src/grammar/convert/ToGrammarRightRG.cpp @@ -41,9 +41,9 @@ grammar::RightRG < > ToGrammarRightRG::convert(const grammar::LeftRG < > & gramm rrg.addRule( leftSide, rightSide ); if( lhs == grammar.getInitialSymbol( ) ) { - alphabet::Symbol leftSide = rhs.first; - alphabet::Symbol rightSide = rhs.second; - rrg.addRule( leftSide, rightSide ); + leftSide = rhs.first; + alphabet::Symbol rightSide2 = rhs.second; + rrg.addRule( leftSide, rightSide2 ); } } else { const alphabet::Symbol& rhs = ruleRHS.get<alphabet::Symbol>(); @@ -53,9 +53,9 @@ grammar::RightRG < > ToGrammarRightRG::convert(const grammar::LeftRG < > & gramm rrg.addRule( leftSide, rightSide ); if( lhs == grammar.getInitialSymbol( ) ) { - alphabet::Symbol leftSide = rrg.getInitialSymbol( ); - alphabet::Symbol rightSide = rhs; - rrg.addRule( leftSide, rightSide ); + leftSide = rrg.getInitialSymbol( ); + alphabet::Symbol rightSide2 = rhs; + rrg.addRule( leftSide, rightSide2 ); } } } diff --git a/alib2algo/src/rte/convert/ToPostfixPushdownAutomatonGlushkov.cpp b/alib2algo/src/rte/convert/ToPostfixPushdownAutomatonGlushkov.cpp index dfc06d9bd151cfd342090486993e3ab463426b14..a82cd278251895056a99fce24457eb5c326e11a8 100644 --- a/alib2algo/src/rte/convert/ToPostfixPushdownAutomatonGlushkov.cpp +++ b/alib2algo/src/rte/convert/ToPostfixPushdownAutomatonGlushkov.cpp @@ -105,8 +105,8 @@ automaton::NPDA < > ToPostfixPushdownAutomatonGlushkov::convert ( const rte::For if ( kv.second.empty ( ) ) std::cerr << "\t" << "{}" << std::endl; - for ( const auto & f : kv.second ) { - for ( const auto & symbol : f ) + for ( const auto & follow : kv.second ) { + for ( const auto & symbol : follow ) std::cerr << "\t" << symbol << std::endl; std::cerr << std::endl; @@ -121,8 +121,8 @@ automaton::NPDA < > ToPostfixPushdownAutomatonGlushkov::convert ( const rte::For if ( symb.getRank ( ) == primitive::Unsigned ( 0 ) ) automaton.addTransition ( q, rte::GlushkovIndexate::getSymbolFromGlushkovPair ( symb ).getSymbol ( ), { }, q, { alphabet::Symbol ( alphabet::RankedSymbol < > ( symb ) ) } ); else - for ( const std::vector < std::ranked_symbol < > > & f : followSet[symb] ) { - std::vector < alphabet::Symbol > fstring = phi ( f ); + for ( const std::vector < std::ranked_symbol < > > & follow : followSet[symb] ) { + std::vector < alphabet::Symbol > fstring = phi ( follow ); std::reverse ( fstring.begin ( ), fstring.end ( ) ); automaton.addTransition ( q, rte::GlushkovIndexate::getSymbolFromGlushkovPair ( symb ).getSymbol ( ), fstring, q, { alphabet::Symbol ( alphabet::RankedSymbol < > ( symb ) ) } ); }