diff --git a/alib2algo/src/grammar/generate/RandomGrammarFactory.cpp b/alib2algo/src/grammar/generate/RandomGrammarFactory.cpp index a379e509b79e6d6583d5cc26ce776695188c9892..60359f1465a8f37b579a8113f504f12af73664ac 100644 --- a/alib2algo/src/grammar/generate/RandomGrammarFactory.cpp +++ b/alib2algo/src/grammar/generate/RandomGrammarFactory.cpp @@ -1,42 +1,6 @@ #include "RandomGrammarFactory.h" #include <registration/AlgoRegistration.hpp> -namespace grammar::generate { - -namespace { - constexpr unsigned ENGLISH_ALPHABET_SIZE = 26; -} - -grammar::CFG < std::string, std::string > grammar::generate::RandomGrammarFactory::generateCFG ( size_t nonterminalsCount, size_t terminalsCount, bool randomizedAlphabet, double density ) { - if ( terminalsCount > ENGLISH_ALPHABET_SIZE ) - throw exception::CommonException("Too big terminals count."); - - ext::deque < std::string > terminals; - for ( char i = 'a'; i <= 'z'; i ++ ) - terminals.push_back ( std::string ( 1, i ) ); - - if(randomizedAlphabet) - shuffle ( terminals.begin ( ), terminals.end ( ), ext::random_devices::semirandom ); - - terminals.resize ( terminalsCount ); - - if ( nonterminalsCount > ENGLISH_ALPHABET_SIZE ) - throw exception::CommonException("Too big nonterminals count."); - - ext::deque < std::string > nonterminals; - for ( char i = 'A'; i <= 'Z'; i ++ ) - nonterminals.push_back ( std::string ( 1, i ) ); - - if ( randomizedAlphabet ) - shuffle ( nonterminals.begin ( ), nonterminals.end ( ), ext::random_devices::semirandom ); - - nonterminals.resize ( nonterminalsCount); - - return grammar::generate::RandomGrammarFactory::randomCFG ( nonterminals, terminals, density ); -} - -} /* namespace grammar::generate */ - namespace { auto GenerateCFG1 = registration::AbstractRegister < grammar::generate::RandomGrammarFactory, grammar::CFG < >, ext::set < DefaultSymbolType >, ext::set < DefaultSymbolType >, double > ( grammar::generate::RandomGrammarFactory::generateCFG, abstraction::AlgorithmCategories::AlgorithmCategory::DEFAULT, "nonterminals", "terminals", "density" ).setDocumentation ( @@ -47,13 +11,4 @@ auto GenerateCFG1 = registration::AbstractRegister < grammar::generate::RandomGr @param density density of the rule set of the generated grammar\n\ @return random context free grammar" ); -auto GenerateCFG2 = registration::AbstractRegister < grammar::generate::RandomGrammarFactory, grammar::CFG < std::string, std::string >, size_t, size_t, bool, double> ( grammar::generate::RandomGrammarFactory::generateCFG, abstraction::AlgorithmCategories::AlgorithmCategory::DEFAULT, "nonterminalsCount", "terminalsCount", "randomizedAlphabet", "density" ).setDocumentation ( -"Generates a random context free grammar.\n\ -\n\ -@param nonterminalsCount number of nonterminals in the generated grammar\n\ -@param terminalsSize the number of terminals used in the generated grammar\n\ -@param randomizedAlphabet selects random symbols from a-z range for terminal and A-Z for nonterminal alphabet if true\n\ -@param density density of the rule set of the generated grammar\n\ -@return random context free grammar" ); - } /* namespace */ diff --git a/alib2algo/src/grammar/generate/RandomGrammarFactory.h b/alib2algo/src/grammar/generate/RandomGrammarFactory.h index ab093a2b7e1c9aed4cc579567effd455053392db..24706682b73bf9c727f55072de2ad992dc6aa801 100644 --- a/alib2algo/src/grammar/generate/RandomGrammarFactory.h +++ b/alib2algo/src/grammar/generate/RandomGrammarFactory.h @@ -33,21 +33,6 @@ public: template < class TerminalSymbolType, class NonterminalSymbolType > static grammar::CFG < TerminalSymbolType, NonterminalSymbolType > generateCFG ( ext::set < NonterminalSymbolType > nonterminals, ext::set < TerminalSymbolType > terminals, double density ); - /** - * Generates a random context free grammar. - * - * \tparam TerminalSymbolType the type of terminal symbols of the random grammar - * \tparam NonterminalSymbolType the type of nonterminal symbols of the random grammar - * - * \param nonterminalsCount number of nonterminals in the generated grammar - * \param terminalsSize the number of terminals used in the generated grammar - * \param randomizedAlphabet selects random symbols from a-z range for terminal and A-Z for nonterminal alphabet if true - * \param density density of the rule set of the generated grammar - * - * \return random context free grammar - */ - static grammar::CFG < std::string, std::string > generateCFG( size_t nonterminalsCount, size_t terminalsCount, bool randomizedAlphabet, double density ); - private: template < class TerminalSymbolType, class NonterminalSymbolType > static grammar::CFG < TerminalSymbolType, NonterminalSymbolType > randomCFG ( const ext::deque < NonterminalSymbolType > & nonterminals, const ext::deque < TerminalSymbolType > & terminals, double density ); diff --git a/alib2algo/src/regexp/generate/RandomRegExpFactory.cpp b/alib2algo/src/regexp/generate/RandomRegExpFactory.cpp index 5f27ce8da5944e0da2caf2cdaff02c15473e22c9..d4dea83eecd3594da8673daa644c19e56b9af404 100644 --- a/alib2algo/src/regexp/generate/RandomRegExpFactory.cpp +++ b/alib2algo/src/regexp/generate/RandomRegExpFactory.cpp @@ -9,35 +9,8 @@ namespace regexp::generate { -namespace { - constexpr unsigned ENGLISH_ALPHABET_SIZE = 26; -} - -regexp::UnboundedRegExp < std::string > regexp::generate::RandomRegExpFactory::generateUnboundedRegExp( size_t leafNodes, size_t height, size_t alphabetSize, bool randomizedAlphabet ) { - if ( alphabetSize > ENGLISH_ALPHABET_SIZE ) - throw exception::CommonException( "Too big alphabet." ); - - if ( alphabetSize <= 0 ) - throw exception::CommonException( "Alphabet size must be greater than 0." ); - - ext::vector < std::string > symbols; - for ( char i = 'a'; i <= 'z'; i++ ) - symbols.push_back ( std::string ( 1, i ) ); - - if ( randomizedAlphabet ) - shuffle ( symbols.begin ( ), symbols.end ( ), ext::random_devices::semirandom ); - - ext::set < std::string > alphabet ( symbols.begin ( ), symbols.begin ( ) + alphabetSize ); - - return regexp::generate::RandomRegExpFactory::generateUnboundedRegExp ( leafNodes, height, alphabet ); -} - template < class SymbolType > regexp::UnboundedRegExp < SymbolType > regexp::generate::RandomRegExpFactory::generateUnboundedRegExp( size_t leafNodes, size_t height, ext::set < SymbolType > alphabet) { - - if ( alphabet.size() > ENGLISH_ALPHABET_SIZE ) - throw exception::CommonException("Too big alphabet."); - if( alphabet.empty ( ) ) throw exception::CommonException( "Alphabet size must be greater than 0." ); @@ -143,17 +116,3 @@ ext::ptr_value < regexp::UnboundedRegExpElement < SymbolType > > regexp::generat } } /* namespace regexp::generate */ - -namespace { - -auto GenerateUnboundedRegExp1 = registration::AbstractRegister < regexp::generate::RandomRegExpFactory, regexp::UnboundedRegExp < std::string >, size_t, size_t, size_t, bool > ( regexp::generate::RandomRegExpFactory::generateUnboundedRegExp, abstraction::AlgorithmCategories::AlgorithmCategory::DEFAULT, "leafNodes", "height", "alphabetSize", "randomizedAlphabet" ).setDocumentation ( -"Generates a random regular expression.\n\ -\n\ -@param leafNodes number of leaf nodes in the generated regexp\n\ -@param height the height of the generated regular expression\n\ -@param alphabetSize size of the alphabet (1-26)\n\ -@param randomizedAlphabet selects random symbols from a-z range if true\n\ -\n\ -@return random regular expression" ); - -} /* namespace */ diff --git a/alib2algo/src/regexp/generate/RandomRegExpFactory.h b/alib2algo/src/regexp/generate/RandomRegExpFactory.h index b889d98273d6824d9fa1c28cd072e496fb7b33a7..430fbb63f696a15c1c4fba57616ee9c0275d05bc 100644 --- a/alib2algo/src/regexp/generate/RandomRegExpFactory.h +++ b/alib2algo/src/regexp/generate/RandomRegExpFactory.h @@ -16,18 +16,6 @@ namespace generate { */ class RandomRegExpFactory { public: - /** - * Generates a random regular expression. - * - * \param leafNodes number of leaf nodes in the generated regexp - * \param height the height of the generated regular expression - * \param alphabetSize size of the alphabet (1-26) - * \param randomizedAlphabet selects random symbols from a-z range if true - * - * \return random regular expression - */ - static regexp::UnboundedRegExp < std::string > generateUnboundedRegExp( size_t leafNodes, size_t height, size_t alphabetSize, bool randomizedAlphabet ); - /** * Generates a random regular expression. * diff --git a/tests/cppaql/normalizeTest.cpp b/tests/cppaql/normalizeTest.cpp index 380c7b5a70a25be5cea00c9e7ae1c6268a389b2f..03de54ab48c69787919bc31a33f8368a12e38c02 100644 --- a/tests/cppaql/normalizeTest.cpp +++ b/tests/cppaql/normalizeTest.cpp @@ -13,7 +13,7 @@ static constexpr size_t RANDOM_ITERATIONS = 50; std::string qGenerateCfg ( const std::string & var ) { - return ext::concat ( "execute grammar::generate::RandomGrammarFactory (int) ", rand ( ) % RAND_NONTERMINALS + 1, " (int) ", rand ( ) % RAND_TERMINALS + 1, " (bool) true (double) ", RAND_DENSITY, " | grammar::simplify::EpsilonRemover - | grammar::simplify::SimpleRulesRemover - > $", var ); + return ext::concat ( "execute grammar::generate::RandomGrammarFactory <(alphabet::generate::GenerateAlphabet (int) ", rand ( ) % RAND_NONTERMINALS + 1, " true false) <(alphabet::generate::GenerateAlphabet (int) ", rand ( ) % RAND_TERMINALS + 1, " true true) (double) ", RAND_DENSITY, " | grammar::simplify::EpsilonRemover - | grammar::simplify::SimpleRulesRemover - > $", var ); } TEST_CASE ( "Normalize test", "[integration]" ) { diff --git a/tests/cppaql/regexpOptimizeTest.cpp b/tests/cppaql/regexpOptimizeTest.cpp index 71468613647750b87aec7ffbc6d63a72ebd1a48f..7ee411c37df7ea97b6376913aaf5d3d681bb52f1 100644 --- a/tests/cppaql/regexpOptimizeTest.cpp +++ b/tests/cppaql/regexpOptimizeTest.cpp @@ -11,7 +11,7 @@ const double ALPHABET_SIZE = 2; const size_t ITERATIONS = 100; std::string qGenRE ( ) { - return ext::concat ( "execute regexp::generate::RandomRegExpFactory (size_t)", rand ( ) % LEAF_NODES + 1, " (size_t)", rand ( ) % HEIGHT + 1, " (size_t)", ALPHABET_SIZE, " (bool)false" ); + return ext::concat ( "execute regexp::generate::RandomRegExpFactory (size_t)", rand ( ) % LEAF_NODES + 1, " (size_t)", rand ( ) % HEIGHT + 1, "<(alphabet::generate::GenerateAlphabet (size_t)", ALPHABET_SIZE, " false false)" ); } TEST_CASE ( "RE optimize test", "[integration]" ) {