Algorithms Library Toolkit
A toolkit for algorithms, especially for algorithms on formal languages
ToAutomatonTopDown.h
Go to the documentation of this file.
1
6#pragma once
7
8#include <grammar/Grammar.h>
11#include <grammar/RawRules.h>
12
13#include <automaton/PDA/NPDA.h>
14
16
17namespace grammar {
18
19namespace convert {
20
24public:
36 template < class T, class TerminalSymbolType = typename grammar::TerminalSymbolTypeOfGrammar < T >, class NonterminalSymbolType = typename grammar::NonterminalSymbolTypeOfGrammar < T > >
38};
39
40template < class T, class TerminalSymbolType, class NonterminalSymbolType >
42 automaton::NPDA < TerminalSymbolType, ext::variant < TerminalSymbolType, NonterminalSymbolType >, unsigned > automaton ( label::InitialStateLabel::instance < unsigned > ( ), grammar.getInitialSymbol ( ) );
43
44 automaton.setInputAlphabet ( grammar.getTerminalAlphabet ( ) );
45
46 for ( const NonterminalSymbolType & nonterminal : grammar.getNonterminalAlphabet ( ) )
47 automaton.addPushdownStoreSymbol ( nonterminal );
48 for ( const TerminalSymbolType & terminal : grammar.getTerminalAlphabet ( ) )
49 automaton.addPushdownStoreSymbol ( terminal );
50
51 for ( const std::pair < const NonterminalSymbolType, ext::set < ext::vector < ext::variant < TerminalSymbolType, NonterminalSymbolType > > > > & kv : grammar.getRules ( ) )
53 automaton.addTransition ( automaton.getInitialState ( ), ext::vector < ext::variant < TerminalSymbolType, NonterminalSymbolType > > { kv.first }, automaton.getInitialState ( ), rhs );
54
55 for ( const TerminalSymbolType & symbol : grammar.getTerminalAlphabet ( ) )
57
58 return automaton;
59}
60
61} /* namespace convert */
62
63} /* namespace grammar */
Definition: NPDA.h:74
Definition: set.hpp:44
Implementation of the variant class allowing to store any type of those listed in the template parame...
Definition: variant.hpp:98
Class extending the vector class from the standard library. Original reason is to allow printing of t...
Definition: vector.hpp:45
Definition: ToAutomatonTopDown.h:23
static automaton::NPDA< TerminalSymbolType, ext::variant< TerminalSymbolType, NonterminalSymbolType >, unsigned > convert(const T &grammar)
Definition: ToAutomatonTopDown.h:41
Definition: ToGrammar.h:31
Definition: converterCommon.hpp:8
Definition: ToAutomaton.h:24