44 template <
class TerminalSymbolType,
class NonterminalSymbolType >
57 template <
class TerminalSymbolType,
class NonterminalSymbolType >
71 template <
class T,
class TerminalSymbolType =
typename grammar::TerminalSymbolTypeOfGrammar < T >,
class NonterminalSymbolType =
typename grammar::NonterminalSymbolTypeOfGrammar < T > >
75template <
class TerminalSymbolType,
class NonterminalSymbolType >
78 NonterminalSymbolType
q0 =
common::createUnique ( label::InitialStateLabel::instance < NonterminalSymbolType > ( ),
grammar.getNonterminalAlphabet ( ) );
81 for (
const NonterminalSymbolType & nonterminal :
grammar.getNonterminalAlphabet ( ) )
85 for(
const auto& rule :
grammar.getRules()) {
86 const NonterminalSymbolType& lhs = rule.first;
87 for(
const auto& ruleRHS : rule.second) {
90 automaton.addTransition(rhs.first, rhs.second, lhs);
93 const TerminalSymbolType& rhs = ruleRHS.template get < TerminalSymbolType > ( );
101 if(
grammar.getGeneratesEpsilon())
107template <
class TerminalSymbolType,
class NonterminalSymbolType >
110 NonterminalSymbolType AState =
common::createUnique(label::FinalStateLabel::instance < NonterminalSymbolType > ( ),
grammar.getNonterminalAlphabet ( ) );
112 for (
const NonterminalSymbolType & nonterminal :
grammar.getNonterminalAlphabet ( ) )
119 for(
const auto& rule :
grammar.getRules()) {
120 const NonterminalSymbolType& lhs = rule.first;
121 for(
const auto& ruleRHS : rule.second) {
124 automaton.addTransition(lhs, rhs.first, rhs.second);
127 const TerminalSymbolType& rhs = ruleRHS.template get < TerminalSymbolType > ( );
128 automaton.addTransition(lhs, rhs, AState);
135 if(
grammar.getGeneratesEpsilon())
141template <
class T,
class TerminalSymbolType,
class NonterminalSymbolType >
Nondeterministic finite automaton. Accepts regular languages.
Definition: NFA.h:66
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
Right regular grammar in Chomsky hierarchy or type 3 in Chomsky hierarchy. Generates regular language...
Definition: RightRG.h:70
static automaton::NPDA< TerminalSymbolType, ext::variant< TerminalSymbolType, NonterminalSymbolType >, unsigned > convert(const T &grammar)
Definition: ToAutomatonTopDown.h:41
Definition: ToAutomaton.h:32
static automaton::NFA< TerminalSymbolType, NonterminalSymbolType > convert(const grammar::LeftRG< TerminalSymbolType, NonterminalSymbolType > &grammar)
Definition: ToAutomaton.h:76
StateType q0
Definition: SingleInitialState.h:96
Definition: ToGrammar.h:31
T createUnique(T object, const Alphabets &... alphabets)
Definition: createUnique.hpp:46
Definition: converterCommon.hpp:8
Definition: ToAutomaton.h:24