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
OneTapeDTM.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>
28#include "../common/AutomatonFromXMLParser.h"
29#include "../common/AutomatonToXMLComposer.h"
30
31namespace core {
32
33template < class SymbolType, class StateType >
34struct xmlApi < automaton::OneTapeDTM < SymbolType, StateType > > {
42 static std::string xmlTagName() {
43 return "OneTapeDTM";
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::OneTapeDTM < SymbolType, StateType > & automaton );
89};
90
91template < class SymbolType, class StateType >
94
95 ext::set<StateType> states = automaton::AutomatonFromXMLParser::parseStates<StateType>(input);
96 ext::set<SymbolType> tapeSymbols = automaton::AutomatonFromXMLParser::parseTapeAlphabet<SymbolType>(input);
97 ext::set<SymbolType> inputSymbols = automaton::AutomatonFromXMLParser::parseInputAlphabet<SymbolType>(input);
98 SymbolType blank = automaton::AutomatonFromXMLParser::parseBlankSymbol<SymbolType>(input);
99 StateType initialState = automaton::AutomatonFromXMLParser::parseInitialState<StateType>(input);
100 ext::set<StateType> finalStates = automaton::AutomatonFromXMLParser::parseFinalStates<StateType>(input);
101
102 automaton::OneTapeDTM < SymbolType, StateType > automaton(std::move(initialState), std::move(blank));
103 automaton.setStates(std::move(states));
104 automaton.setTapeAlphabet(std::move(tapeSymbols));
105 automaton.setInputAlphabet(std::move(inputSymbols));
106 automaton.setFinalStates(std::move(finalStates));
107
109
111 return automaton;
112}
113
114template<class SymbolType, class StateType >
117 StateType from = automaton::AutomatonFromXMLParser::parseTransitionFrom<StateType>(input);
118 SymbolType inputSymbol = automaton::AutomatonFromXMLParser::parseTransitionInputSymbol<SymbolType>(input);
119 StateType to = automaton::AutomatonFromXMLParser::parseTransitionTo<StateType>(input);
120 SymbolType outputSymbol = automaton::AutomatonFromXMLParser::parseTransitionOutputSymbol<SymbolType>(input);
123
124 automaton.addTransition(std::move(from), std::move(inputSymbol), std::move(to), std::move(outputSymbol), shift);
125}
126
127template<class SymbolType, class StateType >
129 out.emplace_back ( xmlTagName(), sax::Token::TokenType::START_ELEMENT );
130
137 composeTransitions(out, automaton);
138
139 out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
140}
141
142template<class SymbolType, class StateType >
144 out.emplace_back("transitions", sax::Token::TokenType::START_ELEMENT);
145 for(const auto& transition : automaton.getTransitions()) {
146 out.emplace_back("transition", sax::Token::TokenType::START_ELEMENT);
147
150 automaton::AutomatonToXMLComposer::composeTransitionTo(out, std::get<0>(transition.second));
151 automaton::AutomatonToXMLComposer::composeTransitionOutputSymbol(out, std::get<1>(transition.second));
152 automaton::AutomatonToXMLComposer::composeTransitionShift(out, std::get<2>(transition.second));
153
154 out.emplace_back("transition", sax::Token::TokenType::END_ELEMENT);
155 }
156
157 out.emplace_back("transitions", sax::Token::TokenType::END_ELEMENT);
158}
159
160} /* namespace core */
161
static Shift parseTransitionShift(ext::deque< sax::Token >::iterator &input)
Definition: AutomatonFromXMLParser.h:95
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 composeInputAlphabet(ext::deque< sax::Token > &, const ext::set< SymbolType > &symbols)
Definition: AutomatonToXMLComposer.h:109
static void composeTransitionOutputSymbol(ext::deque< sax::Token > &, const SymbolType &symbol)
Definition: AutomatonToXMLComposer.h:323
static void composeBlankSymbol(ext::deque< sax::Token > &, const SymbolType &symbol)
Definition: AutomatonToXMLComposer.h:222
static void composeTransitionShift(ext::deque< sax::Token > &out, Shift shift)
Definition: AutomatonToXMLComposer.h:91
static void composeFinalStates(ext::deque< sax::Token > &, const ext::set< StateType > &states)
Definition: AutomatonToXMLComposer.h:170
static void composeTapeAlphabet(ext::deque< sax::Token > &, const ext::set< SymbolType > &symbols)
Definition: AutomatonToXMLComposer.h:213
static void composeTransitionInputSymbol(ext::deque< sax::Token > &, const SymbolType &symbol)
Definition: AutomatonToXMLComposer.h:316
static void composeInitialState(ext::deque< sax::Token > &, const StateType &state)
Definition: AutomatonToXMLComposer.h:163
Deterministic single tape turing machine. Accepts recursive languages.
Definition: OneTapeDTM.h:71
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
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
typename T::StateType StateType
Definition: ToGrammarLeftRG.h:64
typename T::SymbolType SymbolType
Definition: ReachableStates.h:176
Definition: ToGrammar.h:31
Shift
Definition: Shift.h:15
Definition: normalize.hpp:10
static std::string xmlTagName()
The XML tag name of class.
Definition: OneTapeDTM.h:42
static bool first(const ext::deque< sax::Token >::const_iterator &input)
Tests whether the token stream starts with this type.
Definition: OneTapeDTM.h:53
Definition: xmlApi.hpp:27