From 761f2e94a7b6daba070d0d59fbfebf4060ee1139 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Sun, 21 Aug 2016 12:58:51 +0200 Subject: [PATCH] classes for initial, final, fail state labels --- alib2algo/src/automaton/run/Result.h | 17 ++--- alib2algo/src/automaton/run/Run.cpp | 6 +- alib2algo/src/automaton/simplify/Minimize.cpp | 2 +- alib2algo/src/automaton/simplify/Total.cpp | 5 +- .../AutomataUnionEpsilonTransition.cpp | 7 +- .../src/automaton/transform/PDAToRHPDA.cpp | 5 +- alib2algo/src/grammar/convert/ToAutomaton.cpp | 8 ++- .../grammar/convert/ToAutomatonBottomUp.cpp | 6 +- .../grammar/convert/GrammarCFGtoPDATest.cpp | 9 ++- alib2data/src/automaton/FSM/CompactNFA.cpp | 3 +- alib2data/src/automaton/FSM/EpsilonNFA.cpp | 3 +- alib2data/src/automaton/FSM/ExtendedNFA.cpp | 3 +- alib2data/src/label/FailStateLabel.cpp | 70 +++++++++++++++++++ alib2data/src/label/FailStateLabel.h | 62 ++++++++++++++++ alib2data/src/label/FinalStateLabel.cpp | 70 +++++++++++++++++++ alib2data/src/label/FinalStateLabel.h | 62 ++++++++++++++++ alib2data/src/label/InitialStateLabel.cpp | 70 +++++++++++++++++++ alib2data/src/label/InitialStateLabel.h | 62 ++++++++++++++++ 18 files changed, 441 insertions(+), 29 deletions(-) create mode 100644 alib2data/src/label/FailStateLabel.cpp create mode 100644 alib2data/src/label/FailStateLabel.h create mode 100644 alib2data/src/label/FinalStateLabel.cpp create mode 100644 alib2data/src/label/FinalStateLabel.h create mode 100644 alib2data/src/label/InitialStateLabel.cpp create mode 100644 alib2data/src/label/InitialStateLabel.h diff --git a/alib2algo/src/automaton/run/Result.h b/alib2algo/src/automaton/run/Result.h index e54648d735..88751a71d8 100644 --- a/alib2algo/src/automaton/run/Result.h +++ b/alib2algo/src/automaton/run/Result.h @@ -15,6 +15,7 @@ #include <object/Object.h> #include <label/Label.h> #include <tree/ranked/RankedTree.h> +#include <label/FailStateLabel.h> namespace automaton { @@ -26,14 +27,14 @@ public: * Performs conversion. * @return left regular grammar equivalent to source automaton. */ - static label::Label result ( const automaton::Automaton & automaton, const alib::Object & object, const label::Label & failLabel = label::labelFrom ( "fail" ) ); - - static label::Label result ( const automaton::DFA & automaton, const string::LinearString & string, const label::Label & failLabel = label::labelFrom ( "fail" ) ); - static label::Label result ( const automaton::DFTA & automaton, const tree::RankedTree & tree, const label::Label & failLabel = label::labelFrom ( "fail" ) ); - static label::Label result ( const automaton::InputDrivenDPDA & automaton, const string::LinearString & string, const label::Label & failLabel = label::labelFrom ( "fail" ) ); - static label::Label result ( const automaton::VisiblyPushdownDPDA & automaton, const string::LinearString & string, const label::Label & failLabel = label::labelFrom ( "fail" ) ); - static label::Label result ( const automaton::RealTimeHeightDeterministicDPDA & automaton, const string::LinearString & string, const label::Label & failLabel = label::labelFrom ( "fail" ) ); - static label::Label result ( const automaton::DPDA & automaton, const string::LinearString & string, const label::Label & failLabel = label::labelFrom ( "fail" ) ); + static label::Label result ( const automaton::Automaton & automaton, const alib::Object & object, const label::Label & failLabel = label::FailStateLabel::FAIL_STATE_LABEL ); + + static label::Label result ( const automaton::DFA & automaton, const string::LinearString & string, const label::Label & failLabel = label::FailStateLabel::FAIL_STATE_LABEL ); + static label::Label result ( const automaton::DFTA & automaton, const tree::RankedTree & tree, const label::Label & failLabel = label::FailStateLabel::FAIL_STATE_LABEL ); + static label::Label result ( const automaton::InputDrivenDPDA & automaton, const string::LinearString & string, const label::Label & failLabel = label::FailStateLabel::FAIL_STATE_LABEL ); + static label::Label result ( const automaton::VisiblyPushdownDPDA & automaton, const string::LinearString & string, const label::Label & failLabel = label::FailStateLabel::FAIL_STATE_LABEL ); + static label::Label result ( const automaton::RealTimeHeightDeterministicDPDA & automaton, const string::LinearString & string, const label::Label & failLabel = label::FailStateLabel::FAIL_STATE_LABEL ); + static label::Label result ( const automaton::DPDA & automaton, const string::LinearString & string, const label::Label & failLabel = label::FailStateLabel::FAIL_STATE_LABEL ); }; diff --git a/alib2algo/src/automaton/run/Run.cpp b/alib2algo/src/automaton/run/Run.cpp index 4c07b2a8fb..14f3161911 100644 --- a/alib2algo/src/automaton/run/Run.cpp +++ b/alib2algo/src/automaton/run/Run.cpp @@ -17,6 +17,8 @@ #include <automaton/PDA/NPDTA.h> #include <global/GlobalData.h> +#include <label/FailStateLabel.h> + #include <deque> #include <algorithm> #include <iterator> @@ -123,11 +125,11 @@ std::pair < bool, label::Label > Run::calculateState ( const automaton::DFTA & a states.push_back ( res.second ); } - if ( !sign ) return std::make_pair ( false, label::labelFrom ( "fail" ) ); + if ( !sign ) return std::make_pair ( false, label::FailStateLabel::FAIL_STATE_LABEL ); const auto & it = automaton.getTransitions ( ).find ( std::make_pair ( node.getSymbol ( ), states ) ); - if ( it == automaton.getTransitions ( ).end ( ) ) return std::make_pair ( false, label::labelFrom ( "fail" ) ); + if ( it == automaton.getTransitions ( ).end ( ) ) return std::make_pair ( false, label::FailStateLabel::FAIL_STATE_LABEL ); label::Label state = it->second; diff --git a/alib2algo/src/automaton/simplify/Minimize.cpp b/alib2algo/src/automaton/simplify/Minimize.cpp index b4fc6b7c36..f4027e87c3 100644 --- a/alib2algo/src/automaton/simplify/Minimize.cpp +++ b/alib2algo/src/automaton/simplify/Minimize.cpp @@ -26,7 +26,7 @@ automaton::Automaton Minimize::minimize(const automaton::Automaton& automaton) { automaton::DFA Minimize::minimize(const automaton::DFA& dfa) { if(dfa.getFinalStates().size() == 0) { - automaton::DFA result(label::labelFrom(0)); + automaton::DFA result(dfa.getInitialState()); result.setInputAlphabet(dfa.getInputAlphabet()); return result; } diff --git a/alib2algo/src/automaton/simplify/Total.cpp b/alib2algo/src/automaton/simplify/Total.cpp index 03d4f5dfb8..34c3244647 100644 --- a/alib2algo/src/automaton/simplify/Total.cpp +++ b/alib2algo/src/automaton/simplify/Total.cpp @@ -11,6 +11,7 @@ #include <automaton/FSM/NFA.h> #include <automaton/FSM/DFA.h> +#include <label/FailStateLabel.h> namespace automaton { @@ -26,7 +27,7 @@ automaton::NFA Total::total(const automaton::NFA& automaton) { } automaton::NFA res(automaton); - label::Label nullState = label::createUniqueLabel(label::labelFrom("q0"), automaton.getStates()); + label::Label nullState = label::createUniqueLabel(label::FailStateLabel::FAIL_STATE_LABEL, automaton.getStates()); res.addState(nullState); for(const auto& q : res.getStates()) { @@ -44,7 +45,7 @@ auto TotalNFA = Total::RegistratorWrapper<automaton::NFA, automaton::NFA>(Total: automaton::DFA Total::total(const automaton::DFA& automaton) { automaton::DFA res(automaton); - label::Label nullState = label::createUniqueLabel(label::labelFrom("q0"), automaton.getStates()); + label::Label nullState = label::createUniqueLabel(label::FailStateLabel::FAIL_STATE_LABEL, automaton.getStates()); res.addState(nullState); for(const auto& q : res.getStates()) { diff --git a/alib2algo/src/automaton/transform/AutomataUnionEpsilonTransition.cpp b/alib2algo/src/automaton/transform/AutomataUnionEpsilonTransition.cpp index b2a6c77e5e..48b69b3fa7 100644 --- a/alib2algo/src/automaton/transform/AutomataUnionEpsilonTransition.cpp +++ b/alib2algo/src/automaton/transform/AutomataUnionEpsilonTransition.cpp @@ -7,6 +7,7 @@ #include "AutomataUnionEpsilonTransition.h" #include "common/PairLabel.h" +#include <label/InitialStateLabel.h> #define AUTOMATON_FIRST 1 #define AUTOMATON_SECOND 2 @@ -26,7 +27,7 @@ automaton::EpsilonNFA AutomataUnionEpsilonTransition::unification(const automato for(const auto& q : second.getStates()) states.insert(pairLabel(label::labelFrom(AUTOMATON_SECOND), q)); - label::Label q0 = label::createUniqueLabel(label::labelFrom("q0"), states); + label::Label q0 = label::createUniqueLabel(label::InitialStateLabel::INITIAL_STATE_LABEL, states); automaton::EpsilonNFA res(q0); for(const auto& a : first.getInputAlphabet()) @@ -65,7 +66,7 @@ automaton::EpsilonNFA AutomataUnionEpsilonTransition::unification(const automato for(const auto& q : second.getStates()) states.insert(pairLabel(label::labelFrom(AUTOMATON_SECOND), q)); - label::Label q0 = label::createUniqueLabel(label::labelFrom("q0"), states); + label::Label q0 = label::createUniqueLabel(label::InitialStateLabel::INITIAL_STATE_LABEL, states); automaton::EpsilonNFA res(q0); for(const auto& a : first.getInputAlphabet()) @@ -104,7 +105,7 @@ automaton::EpsilonNFA AutomataUnionEpsilonTransition::unification(const automato for(const auto& q : second.getStates()) states.insert(pairLabel(label::labelFrom(AUTOMATON_SECOND), q)); - label::Label q0 = label::createUniqueLabel(label::labelFrom("q0"), states); + label::Label q0 = label::createUniqueLabel(label::InitialStateLabel::INITIAL_STATE_LABEL, states); automaton::EpsilonNFA res(q0); for(const auto& a : first.getInputAlphabet()) diff --git a/alib2algo/src/automaton/transform/PDAToRHPDA.cpp b/alib2algo/src/automaton/transform/PDAToRHPDA.cpp index b0630b64a0..11f8692ed8 100644 --- a/alib2algo/src/automaton/transform/PDAToRHPDA.cpp +++ b/alib2algo/src/automaton/transform/PDAToRHPDA.cpp @@ -18,6 +18,7 @@ #include <map> #include <queue> #include <iterator> +#include <label/InitialStateLabel.h> namespace automaton { @@ -34,7 +35,7 @@ automaton::RealTimeHeightDeterministicNPDA PDAToRHPDA::convert ( const automaton auto PDAToRHPDARealTimeHeightDeterministicNPDA = PDAToRHPDA::RegistratorWrapper < automaton::RealTimeHeightDeterministicNPDA, automaton::RealTimeHeightDeterministicNPDA > ( PDAToRHPDA::convert ); automaton::RealTimeHeightDeterministicDPDA PDAToRHPDA::convert ( const automaton::DPDA & pda ) { - label::Label q0 = label::createUniqueLabel ( label::labelFrom ( "q0" ), pda.getStates ( ) ); + label::Label q0 = label::createUniqueLabel ( label::InitialStateLabel::INITIAL_STATE_LABEL, pda.getStates ( ) ); RealTimeHeightDeterministicDPDA res ( q0, alphabet::Symbol { alphabet::BottomOfTheStackSymbol::BOTTOM_OF_THE_STACK } ); @@ -119,7 +120,7 @@ automaton::RealTimeHeightDeterministicNPDA PDAToRHPDA::convert ( const automaton pushdownStoreAlphabet.insert ( alphabet::Symbol { alphabet::BottomOfTheStackSymbol::BOTTOM_OF_THE_STACK } ); res.setPushdownStoreAlphabet ( pushdownStoreAlphabet ); - label::Label q0 = label::createUniqueLabel ( label::labelFrom ( "q0" ), res.getStates ( ) ); + label::Label q0 = label::createUniqueLabel ( label::InitialStateLabel::INITIAL_STATE_LABEL, res.getStates ( ) ); res.addState ( q0 ); res.addInitialState ( q0 ); diff --git a/alib2algo/src/grammar/convert/ToAutomaton.cpp b/alib2algo/src/grammar/convert/ToAutomaton.cpp index 803386be12..686f755d4c 100644 --- a/alib2algo/src/grammar/convert/ToAutomaton.cpp +++ b/alib2algo/src/grammar/convert/ToAutomaton.cpp @@ -8,6 +8,8 @@ #include <label/ObjectLabel.h> #include <label/Label.h> +#include <label/InitialStateLabel.h> +#include <label/FinalStateLabel.h> namespace grammar { @@ -29,7 +31,7 @@ automaton::NFA ToAutomaton::convert(const grammar::LeftRG& grammar) { } // step 1, 4 - label::Label q0 = label::createUniqueLabel(label::labelFrom("q0"), states); + label::Label q0 = label::createUniqueLabel(label::InitialStateLabel::INITIAL_STATE_LABEL, states); states.insert(q0); automaton::NFA automaton(q0); automaton.setInputAlphabet(grammar.getTerminalAlphabet()); @@ -72,7 +74,7 @@ automaton::NFA ToAutomaton::convert(const grammar::RightRG& grammar) { } // step 1, 4 - label::Label AState = label::createUniqueLabel(label::labelFrom("A"), states); + label::Label AState = label::createUniqueLabel(label::FinalStateLabel::FINAL_STATE_LABEL, states); states.insert(AState); automaton::NFA automaton(stateMap.find(grammar.getInitialSymbol())->second); automaton.setStates(states); @@ -106,7 +108,7 @@ auto ToAutomatonRightRG = ToAutomaton::RegistratorWrapper<automaton::NFA, gramma template <class T> automaton::NPDA ToAutomaton::convert(const T& grammar) { - automaton::NPDA automaton(label::labelFrom('q'), grammar.getInitialSymbol()); + automaton::NPDA automaton(label::InitialStateLabel::INITIAL_STATE_LABEL, grammar.getInitialSymbol()); automaton.setInputAlphabet(grammar.getTerminalAlphabet()); diff --git a/alib2algo/src/grammar/convert/ToAutomatonBottomUp.cpp b/alib2algo/src/grammar/convert/ToAutomatonBottomUp.cpp index 50c3146351..137872c6ea 100644 --- a/alib2algo/src/grammar/convert/ToAutomatonBottomUp.cpp +++ b/alib2algo/src/grammar/convert/ToAutomatonBottomUp.cpp @@ -8,6 +8,8 @@ #include <alphabet/BottomOfTheStackSymbol.h> #include <alphabet/LabeledSymbol.h> +#include <label/InitialStateLabel.h> +#include <label/FinalStateLabel.h> namespace grammar { @@ -19,8 +21,8 @@ automaton::Automaton ToAutomatonBottomUp::convert(const grammar::Grammar& gramma template <class T> automaton::NPDA ToAutomatonBottomUp::convert(const T& grammar) { - label::Label q = label::labelFrom('q'); - label::Label r = label::labelFrom('r'); + label::Label q = label::InitialStateLabel::INITIAL_STATE_LABEL; + label::Label r = label::FinalStateLabel::FINAL_STATE_LABEL; automaton::NPDA automaton(q, alphabet::Symbol(alphabet::BottomOfTheStackSymbol::BOTTOM_OF_THE_STACK)); automaton.addState(r); diff --git a/alib2algo/test-src/grammar/convert/GrammarCFGtoPDATest.cpp b/alib2algo/test-src/grammar/convert/GrammarCFGtoPDATest.cpp index ebf1e87483..11edf4e63e 100644 --- a/alib2algo/test-src/grammar/convert/GrammarCFGtoPDATest.cpp +++ b/alib2algo/test-src/grammar/convert/GrammarCFGtoPDATest.cpp @@ -8,6 +8,9 @@ #include <factory/XmlDataFactory.hpp> +#include <label/InitialStateLabel.h> +#include <label/FinalStateLabel.h> + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( GrammarCFGtoPDATest, "grammar" ); CPPUNIT_TEST_SUITE_REGISTRATION( GrammarCFGtoPDATest ); @@ -41,7 +44,7 @@ void GrammarCFGtoPDATest::testTopDown() grammar.addRule(nF, std::vector<alphabet::Symbol>{tA}); - label::Label q = label::labelFrom('q'); + label::Label q = label::InitialStateLabel::INITIAL_STATE_LABEL; automaton::NPDA pda(q, nE); pda.setStates(std::set<label::Label>{q}); @@ -86,8 +89,8 @@ void GrammarCFGtoPDATest::testBottomUp() grammar.addRule(nF, std::vector<alphabet::Symbol>{tA}); - label::Label q = label::labelFrom('q'); - label::Label r = label::labelFrom('r'); + label::Label q = label::InitialStateLabel::INITIAL_STATE_LABEL; + label::Label r = label::FinalStateLabel::FINAL_STATE_LABEL; alphabet::Symbol bots(alphabet::Symbol{alphabet::BottomOfTheStackSymbol::BOTTOM_OF_THE_STACK}); automaton::NPDA pda(q, bots); diff --git a/alib2data/src/automaton/FSM/CompactNFA.cpp b/alib2data/src/automaton/FSM/CompactNFA.cpp index 83d6712e7b..c7264183a0 100644 --- a/alib2data/src/automaton/FSM/CompactNFA.cpp +++ b/alib2data/src/automaton/FSM/CompactNFA.cpp @@ -21,6 +21,7 @@ #include <object/Object.h> #include <XmlApi.hpp> #include <cast/CastApi.hpp> +#include "../../label/InitialStateLabel.h" namespace automaton { @@ -42,7 +43,7 @@ CompactNFA::CompactNFA ( const EpsilonNFA & other ) : CompactNFA ( other.getStat } } -CompactNFA::CompactNFA ( const MultiInitialStateNFA & other ) : CompactNFA ( other.getStates ( ) + std::set < label::Label > { label::createUniqueLabel ( label::labelFrom ( "q0" ), other.getStates ( ) ) }, other.getInputAlphabet ( ), label::createUniqueLabel ( label::labelFrom ( "q0" ), other.getStates ( ) ), other.getFinalStates ( ) ) { +CompactNFA::CompactNFA ( const MultiInitialStateNFA & other ) : CompactNFA ( other.getStates ( ) + std::set < label::Label > { label::createUniqueLabel ( label::InitialStateLabel::INITIAL_STATE_LABEL, other.getStates ( ) ) }, other.getInputAlphabet ( ), label::createUniqueLabel ( label::InitialStateLabel::INITIAL_STATE_LABEL, other.getStates ( ) ), other.getFinalStates ( ) ) { for ( const auto & transition : other.getTransitions ( ) ) { std::pair < label::Label, string::LinearString > key = std::make_pair ( transition.first.first, string::LinearString ( std::vector < alphabet::Symbol > { transition.first.second } ) ); transitions[key] = transition.second; diff --git a/alib2data/src/automaton/FSM/EpsilonNFA.cpp b/alib2data/src/automaton/FSM/EpsilonNFA.cpp index a888b666eb..14acc6af9f 100644 --- a/alib2data/src/automaton/FSM/EpsilonNFA.cpp +++ b/alib2data/src/automaton/FSM/EpsilonNFA.cpp @@ -19,6 +19,7 @@ #include <object/Object.h> #include <XmlApi.hpp> #include <cast/CastApi.hpp> +#include "../../label/InitialStateLabel.h" namespace automaton { @@ -28,7 +29,7 @@ EpsilonNFA::EpsilonNFA ( std::set < label::Label > states, std::set < alphabet:: EpsilonNFA::EpsilonNFA ( label::Label initialState ) : EpsilonNFA ( std::set < label::Label > { initialState }, std::set < alphabet::Symbol > { }, initialState, std::set < label::Label > { } ) { } -EpsilonNFA::EpsilonNFA ( const MultiInitialStateNFA & other ) : EpsilonNFA ( other.getStates ( ) + std::set < label::Label > { label::createUniqueLabel ( label::labelFrom ( "q0" ), other.getStates ( ) ) }, other.getInputAlphabet ( ), label::createUniqueLabel ( label::labelFrom ( "q0" ), other.getStates ( ) ), other.getFinalStates ( ) ) { +EpsilonNFA::EpsilonNFA ( const MultiInitialStateNFA & other ) : EpsilonNFA ( other.getStates ( ) + std::set < label::Label > { label::createUniqueLabel ( label::InitialStateLabel::INITIAL_STATE_LABEL, other.getStates ( ) ) }, other.getInputAlphabet ( ), label::createUniqueLabel ( label::InitialStateLabel::INITIAL_STATE_LABEL, other.getStates ( ) ), other.getFinalStates ( ) ) { for ( const auto & transition : other.getTransitions ( ) ) { std::pair < label::Label, std::variant < string::Epsilon, alphabet::Symbol > > key = std::make_pair ( transition.first.first, std::variant < string::Epsilon, alphabet::Symbol > ( transition.first.second ) ); transitions[key] = transition.second; diff --git a/alib2data/src/automaton/FSM/ExtendedNFA.cpp b/alib2data/src/automaton/FSM/ExtendedNFA.cpp index e700710c1e..c0e8dd76c6 100644 --- a/alib2data/src/automaton/FSM/ExtendedNFA.cpp +++ b/alib2data/src/automaton/FSM/ExtendedNFA.cpp @@ -23,6 +23,7 @@ #include <object/Object.h> #include <XmlApi.hpp> #include <cast/CastApi.hpp> +#include "../../label/InitialStateLabel.h" namespace automaton { @@ -51,7 +52,7 @@ ExtendedNFA::ExtendedNFA ( const EpsilonNFA & other ) : ExtendedNFA ( other.getS } } -ExtendedNFA::ExtendedNFA ( const MultiInitialStateNFA & other ) : ExtendedNFA ( other.getStates ( ) + std::set < label::Label > { label::createUniqueLabel ( label::labelFrom ( "q0" ), other.getStates ( ) ) }, other.getInputAlphabet ( ), label::createUniqueLabel ( label::labelFrom ( "q0" ), other.getStates ( ) ), other.getFinalStates ( ) ) { +ExtendedNFA::ExtendedNFA ( const MultiInitialStateNFA & other ) : ExtendedNFA ( other.getStates ( ) + std::set < label::Label > { label::createUniqueLabel ( label::InitialStateLabel::INITIAL_STATE_LABEL, other.getStates ( ) ) }, other.getInputAlphabet ( ), label::createUniqueLabel ( label::InitialStateLabel::INITIAL_STATE_LABEL, other.getStates ( ) ), other.getFinalStates ( ) ) { for ( const auto & transition : other.getTransitions ( ) ) { std::pair < label::Label, regexp::RegExp > key = std::make_pair ( transition.first.first, regexp::RegExp ( regexp::regexpFrom ( transition.first.second ) ) ); transitions[key] = transition.second; diff --git a/alib2data/src/label/FailStateLabel.cpp b/alib2data/src/label/FailStateLabel.cpp new file mode 100644 index 0000000000..fee70a5d5b --- /dev/null +++ b/alib2data/src/label/FailStateLabel.cpp @@ -0,0 +1,70 @@ +/* + * FailStateLabel.cpp + * + * Created on: Mar 26, 2013 + * Author: Jan Travicek + */ + +#include "FailStateLabel.h" +#include <sax/FromXMLParserHelper.h> +#include "Label.h" +#include <object/Object.h> +#include <XmlApi.hpp> +#include "UniqueLabel.h" + +namespace label { + +FailStateLabel::FailStateLabel() { + +} + +LabelBase* FailStateLabel::clone() const { + return new FailStateLabel(*this); +} + +LabelBase* FailStateLabel::plunder() && { + return new FailStateLabel(std::move(*this)); +} + +int FailStateLabel::compare(const FailStateLabel&) const { + return 0; +} + +void FailStateLabel::operator>>(std::ostream& out) const { + out << "(FailStateLabel)"; +} + +FailStateLabel::operator std::string() const { + return "fail"; +} + +FailStateLabel FailStateLabel::FAIL_STATE = FailStateLabel ( ); +Label FailStateLabel::FAIL_STATE_LABEL = Label ( FailStateLabel ( ) ); + +FailStateLabel FailStateLabel::parse(std::deque<sax::Token>::iterator& input) { + sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::START_ELEMENT, FailStateLabel::getXmlTagName()); + sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::END_ELEMENT, FailStateLabel::getXmlTagName()); + return FailStateLabel(); +} + +void FailStateLabel::compose(std::deque<sax::Token>& out) const { + out.emplace_back(FailStateLabel::getXmlTagName(), sax::Token::TokenType::START_ELEMENT); + out.emplace_back(FailStateLabel::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); +} + +LabelBase* FailStateLabel::next() const { + return new UniqueLabel(Label(*this), primitive::Integer(0)); +} + +LabelBase* FailStateLabel::inc() && { + return new UniqueLabel(Label(std::move(*this)), primitive::Integer(0)); +} + +} /* namespace label */ + +namespace alib { + +auto failStateLabelParserRegister = xmlApi<label::Label>::ParserRegister<label::FailStateLabel>(); +auto failStateLabelParserRegister2 = xmlApi<alib::Object>::ParserRegister<label::FailStateLabel>(); + +} /* namespace alib */ diff --git a/alib2data/src/label/FailStateLabel.h b/alib2data/src/label/FailStateLabel.h new file mode 100644 index 0000000000..a7acb6519d --- /dev/null +++ b/alib2data/src/label/FailStateLabel.h @@ -0,0 +1,62 @@ +/* + * FailStateLabel.h + * + * Created on: Mar 26, 2013 + * Author: Jan Travnicek + */ + +#ifndef FAIL_STATE_LABEL_H_ +#define FAIL_STATE_LABEL_H_ + +#include "LabelBase.h" +#include "Label.h" + +namespace label { + +/** + * Represents symbol in an alphabet. + */ +class FailStateLabel : public LabelBase { +public: + /** + * Creates new symbol with given name. + * @param symbol name of the symbol + */ + explicit FailStateLabel ( ); + + virtual LabelBase * clone ( ) const; + + virtual LabelBase * plunder ( ) &&; + + virtual int compare ( const ObjectBase & other ) const { + if ( std::type_index ( typeid ( * this ) ) == std::type_index ( typeid ( other ) ) ) return this->compare ( ( decltype ( * this ) )other ); + + return std::type_index ( typeid ( * this ) ) - std::type_index ( typeid ( other ) ); + } + + virtual int compare ( const FailStateLabel & other ) const; + + virtual void operator >>( std::ostream & ) const; + + virtual explicit operator std::string ( ) const; + + static FailStateLabel FAIL_STATE; + static Label FAIL_STATE_LABEL; + + static const std::string & getXmlTagName() { + static std::string xmlTagName = "FailStateLabel"; + + return xmlTagName; + } + + static FailStateLabel parse ( std::deque < sax::Token >::iterator & input ); + + void compose ( std::deque < sax::Token > & out ) const; + + virtual LabelBase * next ( ) const; + virtual LabelBase * inc ( ) &&; +}; + +} /* namespace label */ + +#endif /* FAIL_STATE_LABEL_H_ */ diff --git a/alib2data/src/label/FinalStateLabel.cpp b/alib2data/src/label/FinalStateLabel.cpp new file mode 100644 index 0000000000..26e99a22ea --- /dev/null +++ b/alib2data/src/label/FinalStateLabel.cpp @@ -0,0 +1,70 @@ +/* + * FinalStateLabel.cpp + * + * Created on: Mar 26, 2013 + * Author: Jan Travicek + */ + +#include "FinalStateLabel.h" +#include <sax/FromXMLParserHelper.h> +#include "Label.h" +#include <object/Object.h> +#include <XmlApi.hpp> +#include "UniqueLabel.h" + +namespace label { + +FinalStateLabel::FinalStateLabel() { + +} + +LabelBase* FinalStateLabel::clone() const { + return new FinalStateLabel(*this); +} + +LabelBase* FinalStateLabel::plunder() && { + return new FinalStateLabel(std::move(*this)); +} + +int FinalStateLabel::compare(const FinalStateLabel&) const { + return 0; +} + +void FinalStateLabel::operator>>(std::ostream& out) const { + out << "(FinalStateLabel)"; +} + +FinalStateLabel::operator std::string() const { + return "f"; +} + +FinalStateLabel FinalStateLabel::FINAL_STATE = FinalStateLabel ( ); +Label FinalStateLabel::FINAL_STATE_LABEL = Label ( FinalStateLabel ( ) ); + +FinalStateLabel FinalStateLabel::parse(std::deque<sax::Token>::iterator& input) { + sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::START_ELEMENT, FinalStateLabel::getXmlTagName()); + sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::END_ELEMENT, FinalStateLabel::getXmlTagName()); + return FinalStateLabel(); +} + +void FinalStateLabel::compose(std::deque<sax::Token>& out) const { + out.emplace_back(FinalStateLabel::getXmlTagName(), sax::Token::TokenType::START_ELEMENT); + out.emplace_back(FinalStateLabel::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); +} + +LabelBase* FinalStateLabel::next() const { + return new UniqueLabel(Label(*this), primitive::Integer(0)); +} + +LabelBase* FinalStateLabel::inc() && { + return new UniqueLabel(Label(std::move(*this)), primitive::Integer(0)); +} + +} /* namespace label */ + +namespace alib { + +auto finalStateLabelParserRegister = xmlApi<label::Label>::ParserRegister<label::FinalStateLabel>(); +auto finalStateLabelParserRegister2 = xmlApi<alib::Object>::ParserRegister<label::FinalStateLabel>(); + +} /* namespace alib */ diff --git a/alib2data/src/label/FinalStateLabel.h b/alib2data/src/label/FinalStateLabel.h new file mode 100644 index 0000000000..cb2b69a17a --- /dev/null +++ b/alib2data/src/label/FinalStateLabel.h @@ -0,0 +1,62 @@ +/* + * FinalStateLabel.h + * + * Created on: Mar 26, 2013 + * Author: Jan Travnicek + */ + +#ifndef FINAL_STATE_LABEL_H_ +#define FINAL_STATE_LABEL_H_ + +#include "LabelBase.h" +#include "Label.h" + +namespace label { + +/** + * Represents symbol in an alphabet. + */ +class FinalStateLabel : public LabelBase { +public: + /** + * Creates new symbol with given name. + * @param symbol name of the symbol + */ + explicit FinalStateLabel ( ); + + virtual LabelBase * clone ( ) const; + + virtual LabelBase * plunder ( ) &&; + + virtual int compare ( const ObjectBase & other ) const { + if ( std::type_index ( typeid ( * this ) ) == std::type_index ( typeid ( other ) ) ) return this->compare ( ( decltype ( * this ) )other ); + + return std::type_index ( typeid ( * this ) ) - std::type_index ( typeid ( other ) ); + } + + virtual int compare ( const FinalStateLabel & other ) const; + + virtual void operator >>( std::ostream & ) const; + + virtual explicit operator std::string ( ) const; + + static FinalStateLabel FINAL_STATE; + static Label FINAL_STATE_LABEL; + + static const std::string & getXmlTagName() { + static std::string xmlTagName = "FinalStateLabel"; + + return xmlTagName; + } + + static FinalStateLabel parse ( std::deque < sax::Token >::iterator & input ); + + void compose ( std::deque < sax::Token > & out ) const; + + virtual LabelBase * next ( ) const; + virtual LabelBase * inc ( ) &&; +}; + +} /* namespace label */ + +#endif /* FINAL_STATE_LABEL_H_ */ diff --git a/alib2data/src/label/InitialStateLabel.cpp b/alib2data/src/label/InitialStateLabel.cpp new file mode 100644 index 0000000000..b114f48394 --- /dev/null +++ b/alib2data/src/label/InitialStateLabel.cpp @@ -0,0 +1,70 @@ +/* + * InitialStateLabel.cpp + * + * Created on: Mar 26, 2013 + * Author: Jan Travicek + */ + +#include "InitialStateLabel.h" +#include <sax/FromXMLParserHelper.h> +#include "Label.h" +#include <object/Object.h> +#include <XmlApi.hpp> +#include "UniqueLabel.h" + +namespace label { + +InitialStateLabel::InitialStateLabel() { + +} + +LabelBase* InitialStateLabel::clone() const { + return new InitialStateLabel(*this); +} + +LabelBase* InitialStateLabel::plunder() && { + return new InitialStateLabel(std::move(*this)); +} + +int InitialStateLabel::compare(const InitialStateLabel&) const { + return 0; +} + +void InitialStateLabel::operator>>(std::ostream& out) const { + out << "(InitialStateLabel)"; +} + +InitialStateLabel::operator std::string() const { + return "q0"; +} + +InitialStateLabel InitialStateLabel::INITIAL_STATE = InitialStateLabel ( ); +Label InitialStateLabel::INITIAL_STATE_LABEL = Label ( InitialStateLabel ( ) ); + +InitialStateLabel InitialStateLabel::parse(std::deque<sax::Token>::iterator& input) { + sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::START_ELEMENT, InitialStateLabel::getXmlTagName()); + sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::END_ELEMENT, InitialStateLabel::getXmlTagName()); + return InitialStateLabel(); +} + +void InitialStateLabel::compose(std::deque<sax::Token>& out) const { + out.emplace_back(InitialStateLabel::getXmlTagName(), sax::Token::TokenType::START_ELEMENT); + out.emplace_back(InitialStateLabel::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); +} + +LabelBase* InitialStateLabel::next() const { + return new UniqueLabel(Label(*this), primitive::Integer(0)); +} + +LabelBase* InitialStateLabel::inc() && { + return new UniqueLabel(Label(std::move(*this)), primitive::Integer(0)); +} + +} /* namespace label */ + +namespace alib { + +auto initialStateLabelParserRegister = xmlApi<label::Label>::ParserRegister<label::InitialStateLabel>(); +auto initialStateLabelParserRegister2 = xmlApi<alib::Object>::ParserRegister<label::InitialStateLabel>(); + +} /* namespace alib */ diff --git a/alib2data/src/label/InitialStateLabel.h b/alib2data/src/label/InitialStateLabel.h new file mode 100644 index 0000000000..d5ea7a5068 --- /dev/null +++ b/alib2data/src/label/InitialStateLabel.h @@ -0,0 +1,62 @@ +/* + * InitialStateLabel.h + * + * Created on: Mar 26, 2013 + * Author: Jan Travnicek + */ + +#ifndef INITIAL_STATE_LABEL_H_ +#define INITIAL_STATE_LABEL_H_ + +#include "LabelBase.h" +#include "Label.h" + +namespace label { + +/** + * Represents symbol in an alphabet. + */ +class InitialStateLabel : public LabelBase { +public: + /** + * Creates new symbol with given name. + * @param symbol name of the symbol + */ + explicit InitialStateLabel ( ); + + virtual LabelBase * clone ( ) const; + + virtual LabelBase * plunder ( ) &&; + + virtual int compare ( const ObjectBase & other ) const { + if ( std::type_index ( typeid ( * this ) ) == std::type_index ( typeid ( other ) ) ) return this->compare ( ( decltype ( * this ) )other ); + + return std::type_index ( typeid ( * this ) ) - std::type_index ( typeid ( other ) ); + } + + virtual int compare ( const InitialStateLabel & other ) const; + + virtual void operator >>( std::ostream & ) const; + + virtual explicit operator std::string ( ) const; + + static InitialStateLabel INITIAL_STATE; + static Label INITIAL_STATE_LABEL; + + static const std::string & getXmlTagName() { + static std::string xmlTagName = "InitialStateLabel"; + + return xmlTagName; + } + + static InitialStateLabel parse ( std::deque < sax::Token >::iterator & input ); + + void compose ( std::deque < sax::Token > & out ) const; + + virtual LabelBase * next ( ) const; + virtual LabelBase * inc ( ) &&; +}; + +} /* namespace label */ + +#endif /* INITIAL_STATE_LABEL_H_ */ -- GitLab