diff --git a/alib2algo/src/automaton/run/Result.h b/alib2algo/src/automaton/run/Result.h index e54648d735cac2d34b7b7934c7dd9d9f941ee249..88751a71d8c0ec7aef9cd7f904f5b158b21bc4dd 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 4c07b2a8fb0918cb20c91d4a8d90180b62eb6000..14f31619118ce3c371d60aab209110488c06768a 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 b4fc6b7c360019ed99da07810815a807adb30579..f4027e87c3b24849d053565c699ae16f38704c77 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 03d4f5dfb847a3695d925dd6cc464321054c0795..34c3244647131e7aeb4c384835bdec2a66e0ff2d 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 b2a6c77e5e426c4e7e610a372b2e990618dd8c12..48b69b3fa7bc61665ca74f79465da7864430607f 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 b0630b64a06060de57ad305310bdbc7abbedb0ef..11f8692ed855e3891a052b7ae5a09d0187fac91b 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 803386be1256ef2580e8b25c682f7cc55a1139ce..686f755d4c995908909cc832c8d591a07b335bd7 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 50c31463517df7cbc85fb66957b35a5619b0344d..137872c6ea7a77d97d1a1ffd69d1cc034136b1dd 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 ebf1e87483989743498da405e65014431f6d3f98..11edf4e63ed011c341d6a298cc759367a689d6b8 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 83d6712e7bb4bf06e7d81216816c4a2394c1ba6d..c7264183a0bfbf07a31f7ad3e0df7b0f8097455a 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 a888b666ebb0b024e9092eba1de77a3fb0bbad6f..14acc6af9fc5107d9bc5ad43695d7782c707c91a 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 e700710c1e254cba18b24eaac6905fa4a4db0a1b..c0e8dd76c68e1e0666dea358149b28c9b9a8c7e5 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 0000000000000000000000000000000000000000..fee70a5d5b3064c6926566559c15e1531de4285b --- /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 0000000000000000000000000000000000000000..a7acb6519d082a9d10bebdd39cc3f5d33d57fc19 --- /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 0000000000000000000000000000000000000000..26e99a22ea66790e9bf5fbb2774572845dda8529 --- /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 0000000000000000000000000000000000000000..cb2b69a17a0b87da1e19a75ec255049001eb81f0 --- /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 0000000000000000000000000000000000000000..b114f48394d8ad8b6678f148ec28fe35ebed4b8d --- /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 0000000000000000000000000000000000000000..d5ea7a506838224793f04261ba98fd6e2b9fb534 --- /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_ */