diff --git a/alib2algo/src/grammar/generate/RandomGrammarFactory.cpp b/alib2algo/src/grammar/generate/RandomGrammarFactory.cpp index bdc047df55fd214fed1de9d859f1d5eaf2e509ad..65f351a6d792ff5464e1a470cf1affd794900af8 100644 --- a/alib2algo/src/grammar/generate/RandomGrammarFactory.cpp +++ b/alib2algo/src/grammar/generate/RandomGrammarFactory.cpp @@ -35,7 +35,7 @@ grammar::CFG RandomGrammarFactory::generateCFG( size_t nonterminalsCount, size_t throw exception::AlibException("Too big nonterminals count."); std::vector<alphabet::Symbol> symbols2; - for(int i = 0; i < 26; i++) symbols2.push_back(alphabet::symbolFrom(i + 'a')); + for(int i = 0; i < 26; i++) symbols2.push_back(alphabet::symbolFrom(i + 'A')); if(randomizedAlphabet) random_shuffle(symbols2.begin(), symbols2.end()); std::deque<alphabet::Symbol> nonterminals(symbols2.begin(), symbols2.begin() + nonterminalsCount); diff --git a/alib2data/src/grammar/common/TerminalNonterminalAlphabetInitialSymbol.cpp b/alib2data/src/grammar/common/TerminalNonterminalAlphabetInitialSymbol.cpp index b201de1dd3f26126f63a82cdf3b371b41bf4f742..f5871fc07ed207b6570b28fe036b45a2e138e826 100644 --- a/alib2data/src/grammar/common/TerminalNonterminalAlphabetInitialSymbol.cpp +++ b/alib2data/src/grammar/common/TerminalNonterminalAlphabetInitialSymbol.cpp @@ -42,7 +42,10 @@ void TerminalNonterminalAlphabetInitialSymbol::setTerminalAlphabet(std::set<alph for(const alphabet::Symbol& removedSymbol : removed) { removeTerminalSymbol(removedSymbol); } - // TODO check intersection with nonterminal alphabet + + if(!std::excludes(terminalAlphabet.begin(), terminalAlphabet.end(), nonterminalAlphabet.begin(), nonterminalAlphabet.end())) + throw GrammarException("Terminal alphabet and nonterminal alphabet intersect"); + terminalAlphabet = std::move(alphabet); } @@ -65,7 +68,10 @@ void TerminalNonterminalAlphabetInitialSymbol::setNonterminalAlphabet(std::set<a for(const alphabet::Symbol& removedSymbol : removed) { removeNonterminalSymbol(removedSymbol); } - // TODO check intersection with nonterminal alphabet + + if(!std::excludes(terminalAlphabet.begin(), terminalAlphabet.end(), nonterminalAlphabet.begin(), nonterminalAlphabet.end())) + throw GrammarException("Terminal alphabet and nonterminal alphabet intersect"); + nonterminalAlphabet = std::move(alphabet); }