Algorithms Library Toolkit
A toolkit for algorithms, especially for algorithms on formal languages
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Concepts
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