32 template <
class TerminalSymbolType,
class NonterminalSymbolType >
36template <
class TerminalSymbolType,
class NonterminalSymbolType >
43 for(
const auto & nonterminalSymbol :
grammar.getNonterminalAlphabet()) {
51 for(
const auto & rule :
grammar.getRules( ) ) {
52 const NonterminalSymbolType & lhs = rule.first;
54 for (
const auto & ruleRHS : rule.second ) {
59 lrg.
addRule( rhs.second, std::move ( rightSide ) );
61 if( lhs ==
grammar.getInitialSymbol( ) )
62 lrg.
addRule( rhs.second, rhs.first );
64 const TerminalSymbolType & rhs = ruleRHS.template get < TerminalSymbolType > ( );
69 if ( lhs ==
grammar.getInitialSymbol ( ) )
Class extending the pair class from the standard library. Original reason is to allow printing of the...
Definition: pair.hpp:43
Left regular grammar in Chomsky hierarchy or type 3 in Chomsky hierarchy. Generates regular languages...
Definition: LeftRG.h:70
void setTerminalAlphabet(ext::set< TerminalSymbolType > symbols)
Definition: LeftRG.h:265
const NonterminalSymbolType & getInitialSymbol() const &
Definition: LeftRG.h:169
void setGeneratesEpsilon(bool genEps)
Definition: LeftRG.h:405
bool addNonterminalSymbol(NonterminalSymbolType symbol)
Definition: LeftRG.h:218
bool addRule(NonterminalSymbolType leftHandSide, ext::variant< TerminalSymbolType, ext::pair< NonterminalSymbolType, TerminalSymbolType > > rightHandSide)
Add a new rule of a grammar.
Definition: LeftRG.h:333
Right regular grammar in Chomsky hierarchy or type 3 in Chomsky hierarchy. Generates regular language...
Definition: RightRG.h:70
Definition: ToGrammarLeftRG.h:20
static grammar::LeftRG< TerminalSymbolType, NonterminalSymbolType > convert(const grammar::RightRG< TerminalSymbolType, NonterminalSymbolType > &grammar)
Definition: ToGrammarLeftRG.h:37
T createUnique(T object, const Alphabets &... alphabets)
Definition: createUnique.hpp:46
Definition: converterCommon.hpp:8
constexpr auto make_pair(T1 &&x, T2 &&y)
Definition: pair.hpp:79
Definition: ToAutomaton.h:24