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
DFTA.h
Go to the documentation of this file.
1
6/*
7 * This file is part of Algorithms library toolkit.
8 * Copyright (C) 2017 Jan Travnicek (jan.travnicek@fit.cvut.cz)
9
10 * Algorithms library toolkit is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation, either version 3 of the License, or
13 * (at your option) any later version.
14
15 * Algorithms library toolkit is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19
20 * You should have received a copy of the GNU General Public License
21 * along with Algorithms library toolkit. If not, see <http://www.gnu.org/licenses/>.
22 */
23
24#pragma once
25
26#include <core/xmlApi.hpp>
27#include <automaton/TA/DFTA.h>
28#include "../common/AutomatonFromXMLParser.h"
29#include "../common/AutomatonToXMLComposer.h"
30
31namespace core {
32
33template < class SymbolType, class StateType >
34struct xmlApi < automaton::DFTA < SymbolType, StateType > > {
42 static std::string xmlTagName() {
43 return "DFTA";
44 }
45
53 static bool first ( const ext::deque < sax::Token >::const_iterator & input ) {
55 }
56
65
73
81
88 static void composeTransitions ( ext::deque < sax::Token > & out, const automaton::DFTA < SymbolType, StateType > & automaton );
89};
90
91template<class SymbolType, class StateType >
94
95 ext::set<StateType> states = automaton::AutomatonFromXMLParser::parseStates<StateType>(input);
96 ext::set<common::ranked_symbol < SymbolType >> inputSymbols = automaton::AutomatonFromXMLParser::parseRankedInputAlphabet<common::ranked_symbol < SymbolType >>(input);
97 ext::set<StateType> finalStates = automaton::AutomatonFromXMLParser::parseFinalStates<StateType>(input);
98
100 automaton.setStates(std::move(states));
101 automaton.setInputAlphabet(std::move(inputSymbols));
102 automaton.setFinalStates(std::move(finalStates));
103
105
107 return automaton;
108}
109
110template<class SymbolType, class StateType >
113 common::ranked_symbol < SymbolType > inputSymbol = automaton::AutomatonFromXMLParser::parseTransitionInputSymbol<common::ranked_symbol < SymbolType >>(input);
114 ext::vector<StateType> from = automaton::AutomatonFromXMLParser::parseTransitionFromMultiple<StateType>(input);
115 StateType to = automaton::AutomatonFromXMLParser::parseTransitionTo<StateType>(input);
117
118 automaton.addTransition(std::move(inputSymbol), std::move(from), std::move(to));
119}
120
121template<class SymbolType, class StateType >
123 out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::START_ELEMENT );
124
128 composeTransitions(out, automaton);
129
130 out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
131}
132
133template<class SymbolType, class StateType >
135 out.emplace_back(sax::Token("transitions", sax::Token::TokenType::START_ELEMENT));
136 for(const auto& transition : automaton.getTransitions()) {
137 out.emplace_back(sax::Token("transition", sax::Token::TokenType::START_ELEMENT));
138
142
143 out.emplace_back(sax::Token("transition", sax::Token::TokenType::END_ELEMENT));
144 }
145
146 out.emplace_back(sax::Token("transitions", sax::Token::TokenType::END_ELEMENT));
147}
148
149} /* namespace core */
150
static void parseTransitions(ext::deque< sax::Token >::iterator &input, T &automaton)
Definition: AutomatonFromXMLParser.h:114
static void composeTransitionTo(ext::deque< sax::Token > &, const StateType &state)
Definition: AutomatonToXMLComposer.h:252
static void composeStates(ext::deque< sax::Token > &, const ext::set< StateType > &states)
Definition: AutomatonToXMLComposer.h:100
static void composeTransitionFrom(ext::deque< sax::Token > &, const StateType &state)
Definition: AutomatonToXMLComposer.h:259
static void composeFinalStates(ext::deque< sax::Token > &, const ext::set< StateType > &states)
Definition: AutomatonToXMLComposer.h:170
static void composeTransitionInputSymbol(ext::deque< sax::Token > &, const SymbolType &symbol)
Definition: AutomatonToXMLComposer.h:316
static void composeRankedInputAlphabet(ext::deque< sax::Token > &, const ext::set< SymbolType > &symbols)
Definition: AutomatonToXMLComposer.h:145
Nondeterministic finite tree automaton without epsilon transitions. Accepts regular tree languages.
Definition: DFTA.h:74
Definition: ranked_symbol.hpp:20
Class extending the deque class from the standard library. Original reason is to allow printing of th...
Definition: deque.hpp:44
Definition: set.hpp:44
Class extending the vector class from the standard library. Original reason is to allow printing of t...
Definition: vector.hpp:45
static void popToken(ext::deque< Token >::iterator &input, Token::TokenType type, const std::string &data)
Definition: FromXMLParserHelper.cpp:39
static bool isToken(ext::deque< Token >::const_iterator input, Token::TokenType type, const std::string &data)
Definition: FromXMLParserHelper.cpp:29
Definition: Token.h:17
typename T::StateType StateType
Definition: ToGrammarLeftRG.h:64
Definition: ToGrammar.h:31
Definition: normalize.hpp:10
static bool first(const ext::deque< sax::Token >::const_iterator &input)
Tests whether the token stream starts with this type.
Definition: DFTA.h:53
static std::string xmlTagName()
The XML tag name of class.
Definition: DFTA.h:42
Definition: xmlApi.hpp:27