Skip to content
Snippets Groups Projects
Commit 761f2e94 authored by Jan Trávníček's avatar Jan Trávníček
Browse files

classes for initial, final, fail state labels

parent c2f56c27
No related branches found
No related tags found
No related merge requests found
Showing
with 441 additions and 29 deletions
......@@ -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 );
 
};
 
......
......@@ -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;
 
......
......@@ -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;
}
......
......@@ -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()) {
......
......@@ -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())
......
......@@ -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 );
 
......
......@@ -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());
 
......
......@@ -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);
......
......@@ -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);
......
......@@ -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;
......
......@@ -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;
......
......@@ -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;
......
/*
* 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 */
/*
* 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_ */
/*
* 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 */
/*
* 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_ */
/*
* 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 */
/*
* 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_ */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment