26#include <ext/algorithm>
69 struct EpsilonNFATra {
107 requires isDFA < T > || isNFA < T >
108 static Rename::RenamedAutomaton < T >
rename (
const T & fsm );
120 requires isDFTA < T > || isNFTA < T >
121 static Rename::RenamedTreeAutomaton < T >
rename (
const T & fta );
135 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
150 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
165 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
180 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
195 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
210 template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
224 template <
class InputSymbolType,
class StateType >
238 template <
class InputSymbolType,
class StateType >
243requires isDFA < T > || isNFA < T >
250 for (
const StateType & state : fsm.getStates ( ) )
255 result.setInputAlphabet ( fsm.getInputAlphabet ( ) );
260 for (
const StateType & state : fsm.getFinalStates ( ) )
263 for (
const auto & transition : fsm.getTransitions ( ) )
270requires isDFTA < T > || isNFTA < T >
271Rename::RenamedTreeAutomaton < T >
Rename::rename (
const T & fta ) {
277 for (
const StateType & state : fta.getStates ( ) )
280 Rename::RenamedTreeAutomaton < T >
result;
282 result.setInputAlphabet ( fta.getInputAlphabet ( ) );
287 for (
const StateType & state : fta.getFinalStates ( ) )
290 for (
const auto & transition : fta.getTransitions ( ) ) {
293 for (
const StateType & source : transition.first.second )
296 result.addTransition ( transition.first.first, sourceStates,
renamingData.at ( transition.second ) );
302template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
304 unsigned counterState = 0;
306 unsigned counterSymbol = 0;
320 result.addPushdownStoreSymbol ( renamingDataSymbol.
at ( symbol ) );
323 result.addState ( renamingDataState.
at ( state ) );
326 result.addFinalState ( renamingDataState.
at ( state ) );
331 for (
const InputSymbolType & symbol : std::get < 2 > ( transition.first ) )
332 pop.push_back ( renamingDataSymbol.
at ( symbol ) );
336 for (
const InputSymbolType & symbol : transition.second.second )
337 push.push_back ( renamingDataSymbol.
at ( symbol ) );
339 result.addTransition ( renamingDataState.
at ( std::get < 0 > ( transition.first ) ), std::get < 1 > ( transition.first ), pop, renamingDataState.
at ( transition.second.first ), push );
345template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
347 unsigned counterState = 0;
349 unsigned counterSymbol = 0;
363 result.addPushdownStoreSymbol ( renamingDataSymbol.
at ( symbol ) );
366 result.addState ( renamingDataState.
at ( state ) );
369 result.addFinalState ( renamingDataState.
at ( state ) );
373 for (
const InputSymbolType & symbol : std::get < 2 > ( transition.first ) )
374 pop.push_back ( renamingDataSymbol.
at ( symbol ) );
377 for (
const InputSymbolType & symbol : transition.second.second )
378 push.push_back ( renamingDataSymbol.
at ( symbol ) );
380 result.addTransition ( renamingDataState.
at ( std::get < 0 > ( transition.first ) ), std::get < 1 > ( transition.first ), pop, renamingDataState.
at ( transition.second.first ), push );
386template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
388 int counterState = 0;
390 int counterSymbol = 0;
404 result.addPushdownStoreSymbol ( renamingDataSymbol.
at ( symbol ) );
407 result.addState ( renamingDataState.
at ( state ) );
410 result.addFinalState ( renamingDataState.
at ( state ) );
415 for (
const PushdownStoreSymbolType & symbol : transition.second.second )
416 push.push_back ( renamingDataSymbol.
at ( symbol ) );
418 result.addTransition ( renamingDataState.
at ( std::get < 0 > ( transition.first ) ), std::get < 1 > ( transition.first ), renamingDataSymbol.
at ( std::get < 2 > ( transition.first ) ), renamingDataState.
at ( transition.second.first ), push );
424template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
426 int counterState = 0;
428 int counterSymbol = 0;
442 result.addPushdownStoreSymbol ( renamingDataSymbol.
at ( symbol ) );
447 for (
const PushdownStoreSymbolType & symbol : operation.second.first )
448 pop.push_back ( renamingDataSymbol.
at ( symbol ) );
452 for (
const PushdownStoreSymbolType & symbol : operation.second.second )
453 push.push_back ( renamingDataSymbol.
at ( symbol ) );
455 result.setPushdownStoreOperation ( operation.first, pop, push );
459 result.addState ( renamingDataState.
at ( state ) );
462 result.addFinalState ( renamingDataState.
at ( state ) );
465 result.addTransition ( renamingDataState.
at ( transition.first.first ), transition.first.second, renamingDataState.
at ( transition.second ) );
470template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
472 int counterState = 0;
474 int counterSymbol = 0;
490 result.addPushdownStoreSymbol ( renamingDataSymbol.
at ( symbol ) );
493 result.addState ( renamingDataState.
at ( state ) );
496 result.addFinalState ( renamingDataState.
at ( state ) );
499 result.addCallTransition ( renamingDataState.
at ( transition.first.first ), transition.first.second, renamingDataState.
at ( transition.second.first ), renamingDataSymbol.
at ( transition.second.second ) );
502 result.addLocalTransition ( renamingDataState.
at ( transition.first.first ), transition.first.second, renamingDataState.
at ( transition.second ) );
505 result.addReturnTransition ( renamingDataState.
at ( std::get < 0 > ( transition.first ) ), std::get < 1 > ( transition.first ), renamingDataSymbol.
at ( std::get < 2 > ( transition.first ) ), renamingDataState.
at ( transition.second ) );
510template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
512 int counterState = 0;
514 int counterSymbol = 0;
528 result.addPushdownStoreSymbol ( renamingDataSymbol.
at ( symbol ) );
531 result.addState ( renamingDataState.
at ( state ) );
534 result.addFinalState ( renamingDataState.
at ( state ) );
537 result.addCallTransition ( renamingDataState.
at ( transition.first.first ), transition.first.second, renamingDataState.
at ( transition.second.first ), renamingDataSymbol.
at ( transition.second.second ) );
540 result.addLocalTransition ( renamingDataState.
at ( transition.first.first ), transition.first.second, renamingDataState.
at ( transition.second ) );
543 result.addReturnTransition ( renamingDataState.
at ( std::get < 0 > ( transition.first ) ), std::get < 1 > ( transition.first ), renamingDataSymbol.
at ( std::get < 2 > ( transition.first ) ), renamingDataState.
at ( transition.second ) );
548template <
class SymbolType,
class StateType >
550 int counterState = 0;
561 result.addState ( renamingDataState.
at ( state ) );
564 result.addFinalState ( renamingDataState.
at ( state ) );
567 if ( transition.first.template is < SymbolType > ( ) ) {
568 result.addTransition ( transition.first.template get < SymbolType > ( ), renamingDataState.
at ( transition.second ) );
570 auto source = transition.first.template get < ext::pair < StateType, StateType > > ( );
571 result.addTransition (
ext::make_pair ( renamingDataState.
at ( source.first ), renamingDataState.
at ( source.second ) ), renamingDataState.
at ( transition.second ) );
578template <
class SymbolType,
class StateType >
580 int counterState = 0;
591 result.addState ( renamingDataState.
at ( state ) );
594 result.addFinalState ( renamingDataState.
at ( state ) );
597 if ( transition.first.template is < SymbolType > ( ) ) {
598 result.addTransition ( transition.first.template get < SymbolType > ( ), renamingDataState.
at ( transition.second ) );
600 auto source = transition.first.template get < ext::pair < StateType, StateType > > ( );
601 result.addTransition (
ext::make_pair ( renamingDataState.
at ( source.first ), renamingDataState.
at ( source.second ) ), renamingDataState.
at ( transition.second ) );
Deterministic Z-Automaton in Arc-Factored Normal Form. Computation model for unranked regular tree la...
Definition: ArcFactoredDeterministicZAutomaton.h:65
const ext::set< StateType > & getFinalStates() const &
Definition: ArcFactoredDeterministicZAutomaton.h:145
const ext::map< ext::variant< SymbolType, ext::pair< StateType, StateType > >, StateType > & getTransitions() const &
Definition: ArcFactoredDeterministicZAutomaton.h:284
const ext::set< SymbolType > & getInputAlphabet() const &
Definition: ArcFactoredDeterministicZAutomaton.h:194
const ext::set< StateType > & getStates() const &
Definition: ArcFactoredDeterministicZAutomaton.h:96
Nondeterministic Z-Automaton in Arc-Factored Normal Form. Computation model for unranked regular tree...
Definition: ArcFactoredNondeterministicZAutomaton.h:67
const ext::set< SymbolType > & getInputAlphabet() const &
Definition: ArcFactoredNondeterministicZAutomaton.h:203
const ext::set< StateType > & getFinalStates() const &
Definition: ArcFactoredNondeterministicZAutomaton.h:154
const ext::multimap< ext::variant< SymbolType, ext::pair< StateType, StateType > >, StateType > & getTransitions() const &
Definition: ArcFactoredNondeterministicZAutomaton.h:293
const ext::set< StateType > & getStates() const &
Definition: ArcFactoredNondeterministicZAutomaton.h:105
Deterministic finite automaton. Accepts regular languages.
Definition: DFA.h:71
Nondeterministic finite tree automaton without epsilon transitions. Accepts regular tree languages.
Definition: DFTA.h:74
Deterministic pushdown automaton. Accepts subset of context free languages.
Definition: DPDA.h:78
const PushdownStoreSymbolType & getInitialSymbol() const &
Definition: DPDA.h:301
const ext::set< PushdownStoreSymbolType > & getPushdownStoreAlphabet() const &
Definition: DPDA.h:243
const ext::set< InputSymbolType > & getInputAlphabet() const &
Definition: DPDA.h:330
const ext::set< StateType > & getStates() const &
Definition: DPDA.h:145
const ext::map< ext::tuple< StateType, common::symbol_or_epsilon< InputSymbolType >, ext::vector< PushdownStoreSymbolType > >, ext::pair< StateType, ext::vector< PushdownStoreSymbolType > > > & getTransitions() const &
Definition: DPDA.h:682
const ext::set< StateType > & getFinalStates() const &
Definition: DPDA.h:194
const StateType & getInitialState() const &
Definition: DPDA.h:116
Epsilon nondeterministic finite automaton. Accepts regular languages.
Definition: EpsilonNFA.h:74
Nondeterministic finite automaton. Accepts regular languages.
Definition: NFA.h:66
Nondeterministic finite tree automaton without epsilon transitions. Accepts regular tree languages.
Definition: NFTA.h:72
const PushdownStoreSymbolType & getInitialSymbol() const &
Definition: NPDA.h:304
const ext::set< StateType > & getFinalStates() const &
Definition: NPDA.h:197
const StateType & getInitialState() const &
Definition: NPDA.h:119
const ext::set< StateType > & getStates() const &
Definition: NPDA.h:148
const ext::multimap< ext::tuple< StateType, common::symbol_or_epsilon< InputSymbolType >, ext::vector< PushdownStoreSymbolType > >, ext::pair< StateType, ext::vector< PushdownStoreSymbolType > > > & getTransitions() const &
Definition: NPDA.h:644
const ext::set< InputSymbolType > & getInputAlphabet() const &
Definition: NPDA.h:333
const ext::set< PushdownStoreSymbolType > & getPushdownStoreAlphabet() const &
Definition: NPDA.h:246
Deterministic real time height deterministic pushdown automaton. Accepts subset of context free langu...
Definition: RealTimeHeightDeterministicDPDA.h:89
const ext::set< InputSymbolType > & getInputAlphabet() const &
Definition: RealTimeHeightDeterministicDPDA.h:363
const StateType & getInitialState() const &
Definition: RealTimeHeightDeterministicDPDA.h:149
const ext::map< ext::pair< StateType, common::symbol_or_epsilon< InputSymbolType > >, ext::pair< StateType, PushdownStoreSymbolType > > & getCallTransitions() const &
Definition: RealTimeHeightDeterministicDPDA.h:1062
const ext::set< PushdownStoreSymbolType > & getPushdownStoreAlphabet() const &
Definition: RealTimeHeightDeterministicDPDA.h:276
const ext::map< ext::pair< StateType, common::symbol_or_epsilon< InputSymbolType > >, StateType > & getLocalTransitions() const &
Definition: RealTimeHeightDeterministicDPDA.h:1082
const ext::map< ext::tuple< StateType, common::symbol_or_epsilon< InputSymbolType >, PushdownStoreSymbolType >, StateType > & getReturnTransitions() const &
Definition: RealTimeHeightDeterministicDPDA.h:1072
const ext::set< StateType > & getStates() const &
Definition: RealTimeHeightDeterministicDPDA.h:178
const ext::set< StateType > & getFinalStates() const &
Definition: RealTimeHeightDeterministicDPDA.h:227
const PushdownStoreSymbolType & getBottomOfTheStackSymbol() const &
Definition: RealTimeHeightDeterministicDPDA.h:334
Deterministic pushdown automaton requiring a symbol pop from pushdown store on each transition use....
Definition: SinglePopDPDA.h:78
const ext::set< PushdownStoreSymbolType > & getPushdownStoreAlphabet() const &
Definition: SinglePopDPDA.h:243
const StateType & getInitialState() const &
Definition: SinglePopDPDA.h:116
const ext::set< InputSymbolType > & getInputAlphabet() const &
Definition: SinglePopDPDA.h:330
const ext::set< StateType > & getFinalStates() const &
Definition: SinglePopDPDA.h:194
const ext::set< StateType > & getStates() const &
Definition: SinglePopDPDA.h:145
const PushdownStoreSymbolType & getInitialSymbol() const &
Definition: SinglePopDPDA.h:301
const ext::map< ext::tuple< StateType, common::symbol_or_epsilon< InputSymbolType >, PushdownStoreSymbolType >, ext::pair< StateType, ext::vector< PushdownStoreSymbolType > > > & getTransitions() const &
Definition: SinglePopDPDA.h:639
Deterministic visibly pushdown automaton. Accepts subset of context free languages.
Definition: VisiblyPushdownDPDA.h:86
const PushdownStoreSymbolType & getBottomOfTheStackSymbol() const &
Definition: VisiblyPushdownDPDA.h:331
const ext::set< InputSymbolType > & getCallInputAlphabet() const &
Definition: VisiblyPushdownDPDA.h:360
const ext::map< ext::tuple< StateType, InputSymbolType, PushdownStoreSymbolType >, StateType > & getReturnTransitions() const &
Definition: VisiblyPushdownDPDA.h:899
const ext::map< ext::pair< StateType, InputSymbolType >, StateType > & getLocalTransitions() const &
Definition: VisiblyPushdownDPDA.h:909
const ext::set< StateType > & getFinalStates() const &
Definition: VisiblyPushdownDPDA.h:224
const ext::set< InputSymbolType > & getLocalInputAlphabet() const &
Definition: VisiblyPushdownDPDA.h:476
const ext::map< ext::pair< StateType, InputSymbolType >, ext::pair< StateType, PushdownStoreSymbolType > > & getCallTransitions() const &
Definition: VisiblyPushdownDPDA.h:889
const ext::set< StateType > & getStates() const &
Definition: VisiblyPushdownDPDA.h:175
const ext::set< PushdownStoreSymbolType > & getPushdownStoreAlphabet() const &
Definition: VisiblyPushdownDPDA.h:273
const ext::set< InputSymbolType > & getReturnInputAlphabet() const &
Definition: VisiblyPushdownDPDA.h:418
const StateType & getInitialState() const &
Definition: VisiblyPushdownDPDA.h:146
static Rename::RenamedAutomaton< T > rename(const T &fsm)
static automaton::ArcFactoredDeterministicZAutomaton< InputSymbolType, unsigned > rename(const automaton::ArcFactoredDeterministicZAutomaton< InputSymbolType, StateType > &a)
static Rename::RenamedTreeAutomaton< T > rename(const T &fta)
static automaton::ArcFactoredNondeterministicZAutomaton< InputSymbolType, unsigned > rename(const automaton::ArcFactoredNondeterministicZAutomaton< InputSymbolType, StateType > &a)
Class extending the map class from the standard library. Original reason is to allow printing of the ...
Definition: map.hpp:48
R & at(const T &key, R &defaultValue)
Definition: map.hpp:163
std::pair< iterator, bool > insert(const T &key, const R &value)
Insert variant with explicit key and value parameters.
Definition: map.hpp:118
Class extending the pair class from the standard library. Original reason is to allow printing of the...
Definition: pair.hpp:43
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
typename T::StateType StateType
Definition: ToGrammarLeftRG.h:64
typename T::SymbolType SymbolType
Definition: SingleInitialStateEpsilonTransition.h:72
unsigned counter
Definition: Rename.h:247
ext::map< StateType, unsigned > renamingData
Definition: Rename.h:248
for(const StateType &state :fsm.getStates()) renamingData.insert(std Rename::RenamedAutomaton< T > result(renamingData.at(fsm.getInitialState()))
Definition: Rename.h:253
Definition: ToGrammar.h:31
constexpr auto make_pair(T1 &&x, T2 &&y)
Definition: pair.hpp:79
typename std::conditional< value, std::true_type, std::false_type >::type boolean
Definition: type_traits.hpp:145
Definition: type_traits.hpp:148