From 40ba7ac8367ae87a61c9916b5b9aa847820e35a3 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Sat, 9 Aug 2014 21:12:17 +0200 Subject: [PATCH] to string for the rest of data classes --- alib2data/src/automaton/AutomatonBase.h | 2 ++ alib2data/src/automaton/FSM/CompactNFA.cpp | 7 +++++++ alib2data/src/automaton/FSM/CompactNFA.h | 2 ++ alib2data/src/automaton/FSM/DFA.cpp | 7 +++++++ alib2data/src/automaton/FSM/DFA.h | 2 ++ alib2data/src/automaton/FSM/EpsilonNFA.cpp | 7 +++++++ alib2data/src/automaton/FSM/EpsilonNFA.h | 2 ++ alib2data/src/automaton/FSM/ExtendedNFA.cpp | 7 +++++++ alib2data/src/automaton/FSM/ExtendedNFA.h | 2 ++ alib2data/src/automaton/FSM/NFA.cpp | 7 +++++++ alib2data/src/automaton/FSM/NFA.h | 2 ++ alib2data/src/automaton/PDA/NPDA.cpp | 7 +++++++ alib2data/src/automaton/PDA/NPDA.h | 1 + alib2data/src/automaton/PDA/SinglePopNPDA.cpp | 7 +++++++ alib2data/src/automaton/PDA/SinglePopNPDA.h | 1 + alib2data/src/automaton/TM/OneTapeDTM.cpp | 7 +++++++ alib2data/src/automaton/TM/OneTapeDTM.h | 2 ++ alib2data/src/automaton/UnknownAutomaton.cpp | 7 +++++++ alib2data/src/automaton/UnknownAutomaton.h | 2 ++ alib2data/src/grammar/ContextFree/CFG.cpp | 6 ++++++ alib2data/src/grammar/ContextFree/CFG.h | 3 +++ alib2data/src/grammar/ContextFree/CNF.cpp | 6 ++++++ alib2data/src/grammar/ContextFree/CNF.h | 3 +++ .../src/grammar/ContextFree/EpsilonFreeCFG.cpp | 6 ++++++ .../src/grammar/ContextFree/EpsilonFreeCFG.h | 3 +++ alib2data/src/grammar/ContextFree/GNF.cpp | 6 ++++++ alib2data/src/grammar/ContextFree/GNF.h | 3 +++ alib2data/src/grammar/ContextFree/LG.cpp | 6 ++++++ alib2data/src/grammar/ContextFree/LG.h | 3 +++ alib2data/src/grammar/ContextSensitive/CSG.cpp | 7 +++++++ alib2data/src/grammar/ContextSensitive/CSG.h | 2 ++ .../ContextSensitive/NonContractingGrammar.cpp | 7 +++++++ .../ContextSensitive/NonContractingGrammar.h | 2 ++ alib2data/src/grammar/GrammarBase.h | 12 +++++++----- alib2data/src/grammar/Regular/LeftLG.cpp | 7 +++++++ alib2data/src/grammar/Regular/LeftLG.h | 2 ++ alib2data/src/grammar/Regular/LeftRG.cpp | 7 +++++++ alib2data/src/grammar/Regular/LeftRG.h | 2 ++ alib2data/src/grammar/Regular/RightLG.cpp | 7 +++++++ alib2data/src/grammar/Regular/RightLG.h | 2 ++ alib2data/src/grammar/Regular/RightRG.cpp | 7 +++++++ alib2data/src/grammar/Regular/RightRG.h | 2 ++ alib2data/src/grammar/UnknownGrammar.cpp | 7 +++++++ alib2data/src/grammar/UnknownGrammar.h | 1 + .../ContextPreservingUnrestrictedGrammar.cpp | 7 +++++++ .../ContextPreservingUnrestrictedGrammar.h | 2 ++ .../Unrestricted/UnrestrictedGrammar.cpp | 7 +++++++ .../grammar/Unrestricted/UnrestrictedGrammar.h | 2 ++ alib2data/src/regexp/RegExpBase.cpp | 8 ++++++++ alib2data/src/regexp/RegExpBase.h | 12 +++++++++--- alib2data/src/regexp/formal/FormalRegExp.cpp | 4 ++-- alib2data/src/regexp/formal/FormalRegExp.h | 17 ++++++++--------- 52 files changed, 240 insertions(+), 19 deletions(-) diff --git a/alib2data/src/automaton/AutomatonBase.h b/alib2data/src/automaton/AutomatonBase.h index 4038de9f78..48bb33c069 100644 --- a/alib2data/src/automaton/AutomatonBase.h +++ b/alib2data/src/automaton/AutomatonBase.h @@ -59,6 +59,8 @@ public: friend std::ostream& operator<<(std::ostream& os, const AutomatonBase& automaton); virtual void operator>>(std::ostream&) const = 0; + + virtual operator std::string () const = 0; }; } /* namespace automaton */ diff --git a/alib2data/src/automaton/FSM/CompactNFA.cpp b/alib2data/src/automaton/FSM/CompactNFA.cpp index 5e3a22d065..6671cf8e07 100644 --- a/alib2data/src/automaton/FSM/CompactNFA.cpp +++ b/alib2data/src/automaton/FSM/CompactNFA.cpp @@ -11,6 +11,7 @@ #include "../../string/StringAlphabetGetter.h" #include <ostream> #include <algorithm> +#include <sstream> namespace automaton { @@ -126,4 +127,10 @@ void CompactNFA::operator>>(std::ostream& out) const { << ")"; } +CompactNFA::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace automaton */ diff --git a/alib2data/src/automaton/FSM/CompactNFA.h b/alib2data/src/automaton/FSM/CompactNFA.h index 3ec1959049..17baf98b81 100644 --- a/alib2data/src/automaton/FSM/CompactNFA.h +++ b/alib2data/src/automaton/FSM/CompactNFA.h @@ -75,6 +75,8 @@ public: virtual bool operator==(const CompactNFA& other) const; virtual void operator>>(std::ostream& os) const; + + virtual operator std::string() const; }; } /* namespace automaton */ diff --git a/alib2data/src/automaton/FSM/DFA.cpp b/alib2data/src/automaton/FSM/DFA.cpp index b7e15b791c..6ff34348fb 100644 --- a/alib2data/src/automaton/FSM/DFA.cpp +++ b/alib2data/src/automaton/FSM/DFA.cpp @@ -10,6 +10,7 @@ #include "../../std/map.hpp" #include "../AutomatonException.h" #include <ostream> +#include <sstream> namespace automaton { @@ -149,4 +150,10 @@ void DFA::operator>>(std::ostream& out) const { << ")"; } +DFA::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace automaton */ diff --git a/alib2data/src/automaton/FSM/DFA.h b/alib2data/src/automaton/FSM/DFA.h index ec5a979539..a87fd23d71 100644 --- a/alib2data/src/automaton/FSM/DFA.h +++ b/alib2data/src/automaton/FSM/DFA.h @@ -85,6 +85,8 @@ public: virtual bool operator==(const DFA& other) const; virtual void operator>>(std::ostream& os) const; + + virtual operator std::string() const; }; } /* namespace automaton */ diff --git a/alib2data/src/automaton/FSM/EpsilonNFA.cpp b/alib2data/src/automaton/FSM/EpsilonNFA.cpp index 79a1268dac..2558499995 100644 --- a/alib2data/src/automaton/FSM/EpsilonNFA.cpp +++ b/alib2data/src/automaton/FSM/EpsilonNFA.cpp @@ -9,6 +9,7 @@ #include "../../std/map.hpp" #include "../AutomatonException.h" #include <ostream> +#include <sstream> namespace automaton { @@ -249,4 +250,10 @@ void EpsilonNFA::operator>>(std::ostream& out) const { << ")"; } +EpsilonNFA::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace automaton */ diff --git a/alib2data/src/automaton/FSM/EpsilonNFA.h b/alib2data/src/automaton/FSM/EpsilonNFA.h index cb2fe65b5b..d60f89c74c 100644 --- a/alib2data/src/automaton/FSM/EpsilonNFA.h +++ b/alib2data/src/automaton/FSM/EpsilonNFA.h @@ -156,6 +156,8 @@ public: virtual bool operator==(const EpsilonNFA& other) const; virtual void operator>>(std::ostream& os) const; + + virtual operator std::string() const; }; } /* namespace automaton */ diff --git a/alib2data/src/automaton/FSM/ExtendedNFA.cpp b/alib2data/src/automaton/FSM/ExtendedNFA.cpp index c21145a5d5..e376438117 100644 --- a/alib2data/src/automaton/FSM/ExtendedNFA.cpp +++ b/alib2data/src/automaton/FSM/ExtendedNFA.cpp @@ -11,6 +11,7 @@ #include <ostream> #include <algorithm> #include "../../regexp/RegExpAlphabetGetter.h" +#include <sstream> namespace automaton { @@ -126,4 +127,10 @@ void ExtendedNFA::operator>>(std::ostream& out) const { << ")"; } +ExtendedNFA::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace automaton */ diff --git a/alib2data/src/automaton/FSM/ExtendedNFA.h b/alib2data/src/automaton/FSM/ExtendedNFA.h index d0847d82e2..c95bb77aa3 100644 --- a/alib2data/src/automaton/FSM/ExtendedNFA.h +++ b/alib2data/src/automaton/FSM/ExtendedNFA.h @@ -74,6 +74,8 @@ public: virtual bool operator==(const ExtendedNFA& other) const; virtual void operator>>(std::ostream& os) const; + + virtual operator std::string() const; }; } /* namespace automaton */ diff --git a/alib2data/src/automaton/FSM/NFA.cpp b/alib2data/src/automaton/FSM/NFA.cpp index dd1d8f5837..ff79e0b4d8 100644 --- a/alib2data/src/automaton/FSM/NFA.cpp +++ b/alib2data/src/automaton/FSM/NFA.cpp @@ -8,6 +8,7 @@ #include "NFA.h" #include "../AutomatonException.h" #include <ostream> +#include <sstream> namespace automaton { @@ -138,4 +139,10 @@ void NFA::operator>>(std::ostream& out) const { << ")"; } +NFA::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace automaton */ diff --git a/alib2data/src/automaton/FSM/NFA.h b/alib2data/src/automaton/FSM/NFA.h index e3efb77104..8bcfba5c5b 100644 --- a/alib2data/src/automaton/FSM/NFA.h +++ b/alib2data/src/automaton/FSM/NFA.h @@ -94,6 +94,8 @@ public: virtual bool operator==(const NFA& other) const; virtual void operator>>(std::ostream& os) const; + + virtual operator std::string() const; }; } /* namespace automaton */ diff --git a/alib2data/src/automaton/PDA/NPDA.cpp b/alib2data/src/automaton/PDA/NPDA.cpp index 5c498c2b3b..6a4809e22a 100644 --- a/alib2data/src/automaton/PDA/NPDA.cpp +++ b/alib2data/src/automaton/PDA/NPDA.cpp @@ -9,6 +9,7 @@ #include "../../std/map.hpp" #include "../AutomatonException.h" #include <algorithm> +#include <sstream> namespace automaton { @@ -152,4 +153,10 @@ void NPDA::operator>>(std::ostream& out) const { << ")"; } +NPDA::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace automaton */ diff --git a/alib2data/src/automaton/PDA/NPDA.h b/alib2data/src/automaton/PDA/NPDA.h index 3cfb2372ba..dc4c65c5f1 100644 --- a/alib2data/src/automaton/PDA/NPDA.h +++ b/alib2data/src/automaton/PDA/NPDA.h @@ -81,6 +81,7 @@ public: virtual void operator>>(std::ostream& os) const; + virtual operator std::string() const; }; } /* namespace automaton */ diff --git a/alib2data/src/automaton/PDA/SinglePopNPDA.cpp b/alib2data/src/automaton/PDA/SinglePopNPDA.cpp index f11d563453..cb7787a39a 100644 --- a/alib2data/src/automaton/PDA/SinglePopNPDA.cpp +++ b/alib2data/src/automaton/PDA/SinglePopNPDA.cpp @@ -9,6 +9,7 @@ #include "../../std/map.hpp" #include "../AutomatonException.h" #include <algorithm> +#include <sstream> namespace automaton { @@ -148,4 +149,10 @@ void SinglePopNPDA::operator>>(std::ostream& out) const { << ")"; } +SinglePopNPDA::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace automaton */ diff --git a/alib2data/src/automaton/PDA/SinglePopNPDA.h b/alib2data/src/automaton/PDA/SinglePopNPDA.h index 4544d6195e..12767c98da 100644 --- a/alib2data/src/automaton/PDA/SinglePopNPDA.h +++ b/alib2data/src/automaton/PDA/SinglePopNPDA.h @@ -81,6 +81,7 @@ public: virtual void operator>>(std::ostream& os) const; + virtual operator std::string() const; }; } /* namespace automaton */ diff --git a/alib2data/src/automaton/TM/OneTapeDTM.cpp b/alib2data/src/automaton/TM/OneTapeDTM.cpp index 2e699ca519..27fb8467af 100644 --- a/alib2data/src/automaton/TM/OneTapeDTM.cpp +++ b/alib2data/src/automaton/TM/OneTapeDTM.cpp @@ -8,6 +8,7 @@ #include "OneTapeDTM.h" #include "../../std/map.hpp" #include "../AutomatonException.h" +#include <sstream> namespace automaton { @@ -130,4 +131,10 @@ void OneTapeDTM::operator>>(std::ostream& out) const { << ")"; } +OneTapeDTM::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace automaton */ diff --git a/alib2data/src/automaton/TM/OneTapeDTM.h b/alib2data/src/automaton/TM/OneTapeDTM.h index 805ad65488..0329719551 100644 --- a/alib2data/src/automaton/TM/OneTapeDTM.h +++ b/alib2data/src/automaton/TM/OneTapeDTM.h @@ -78,6 +78,8 @@ public: virtual bool operator==(const OneTapeDTM& other) const; virtual void operator>>(std::ostream& os) const; + + virtual operator std::string() const; }; } /* namespace automaton */ diff --git a/alib2data/src/automaton/UnknownAutomaton.cpp b/alib2data/src/automaton/UnknownAutomaton.cpp index b66f57f5d0..19eed66137 100644 --- a/alib2data/src/automaton/UnknownAutomaton.cpp +++ b/alib2data/src/automaton/UnknownAutomaton.cpp @@ -7,6 +7,7 @@ #include "UnknownAutomaton.h" #include "../std/set.hpp" +#include <sstream> #include "AutomatonException.h" @@ -210,5 +211,11 @@ void UnknownAutomaton::operator>>(std::ostream& out) const { << ")"; } +UnknownAutomaton::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace automaton */ diff --git a/alib2data/src/automaton/UnknownAutomaton.h b/alib2data/src/automaton/UnknownAutomaton.h index 6b7f65fa31..f8bd8f1375 100644 --- a/alib2data/src/automaton/UnknownAutomaton.h +++ b/alib2data/src/automaton/UnknownAutomaton.h @@ -280,6 +280,8 @@ public: virtual bool operator==(const AutomatonBase& other) const; virtual void operator>>(std::ostream& os) const; + + virtual operator std::string() const; }; } /* namespace automaton */ diff --git a/alib2data/src/grammar/ContextFree/CFG.cpp b/alib2data/src/grammar/ContextFree/CFG.cpp index 5a49d3dfeb..af0ee70557 100644 --- a/alib2data/src/grammar/ContextFree/CFG.cpp +++ b/alib2data/src/grammar/ContextFree/CFG.cpp @@ -94,4 +94,10 @@ void CFG::operator>>(std::ostream& out) const { << ")"; } +CFG::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace grammar */ diff --git a/alib2data/src/grammar/ContextFree/CFG.h b/alib2data/src/grammar/ContextFree/CFG.h index 721fee7c46..ea6ef6f3d6 100644 --- a/alib2data/src/grammar/ContextFree/CFG.h +++ b/alib2data/src/grammar/ContextFree/CFG.h @@ -11,6 +11,7 @@ #include "../GrammarBase.h" #include <map> #include <vector> +#include <sstream> #include "../common/TerminalNonterminalAlphabetInitialSymbol.h" namespace grammar { @@ -44,6 +45,8 @@ public: virtual bool operator==(const CFG& other) const; virtual void operator>>(std::ostream& os) const; + + virtual operator std::string () const; }; } /* namespace grammar */ diff --git a/alib2data/src/grammar/ContextFree/CNF.cpp b/alib2data/src/grammar/ContextFree/CNF.cpp index 711cc84d54..a5b7050dbc 100644 --- a/alib2data/src/grammar/ContextFree/CNF.cpp +++ b/alib2data/src/grammar/ContextFree/CNF.cpp @@ -137,4 +137,10 @@ void CNF::operator>>(std::ostream& out) const { << ")"; } +CNF::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace grammar */ diff --git a/alib2data/src/grammar/ContextFree/CNF.h b/alib2data/src/grammar/ContextFree/CNF.h index 9f2317e31c..277c64a399 100644 --- a/alib2data/src/grammar/ContextFree/CNF.h +++ b/alib2data/src/grammar/ContextFree/CNF.h @@ -11,6 +11,7 @@ #include "../GrammarBase.h" #include <map> #include <vector> +#include <sstream> #include "../../std/variant.hpp" #include "../common/TerminalNonterminalAlphabetInitialSymbol.h" @@ -53,6 +54,8 @@ public: virtual bool operator==(const CNF& other) const; virtual void operator>>(std::ostream& os) const; + + virtual operator std::string () const; }; } /* namespace grammar */ diff --git a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp index 9ed84f4ac1..b72ab20e60 100644 --- a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp +++ b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp @@ -110,4 +110,10 @@ void EpsilonFreeCFG::operator>>(std::ostream& out) const { << ")"; } +EpsilonFreeCFG::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace grammar */ diff --git a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h index 149d0c65ed..871b0e027e 100644 --- a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h +++ b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h @@ -11,6 +11,7 @@ #include "../GrammarBase.h" #include <map> #include <vector> +#include <sstream> #include "../common/TerminalNonterminalAlphabetInitialSymbol.h" namespace grammar { @@ -48,6 +49,8 @@ public: virtual bool operator==(const EpsilonFreeCFG& other) const; virtual void operator>>(std::ostream& os) const; + + virtual operator std::string () const; }; } /* namespace grammar */ diff --git a/alib2data/src/grammar/ContextFree/GNF.cpp b/alib2data/src/grammar/ContextFree/GNF.cpp index 4bf533992a..c86c40af01 100644 --- a/alib2data/src/grammar/ContextFree/GNF.cpp +++ b/alib2data/src/grammar/ContextFree/GNF.cpp @@ -105,4 +105,10 @@ void GNF::operator>>(std::ostream& out) const { << ")"; } +GNF::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace grammar */ diff --git a/alib2data/src/grammar/ContextFree/GNF.h b/alib2data/src/grammar/ContextFree/GNF.h index b3341ec7be..d56dc66bf7 100644 --- a/alib2data/src/grammar/ContextFree/GNF.h +++ b/alib2data/src/grammar/ContextFree/GNF.h @@ -11,6 +11,7 @@ #include "../GrammarBase.h" #include <map> #include <vector> +#include <sstream> #include "../common/TerminalNonterminalAlphabetInitialSymbol.h" namespace grammar { @@ -48,6 +49,8 @@ public: virtual bool operator==(const GNF& other) const; virtual void operator>>(std::ostream& os) const; + + virtual operator std::string () const; }; } /* namespace grammar */ diff --git a/alib2data/src/grammar/ContextFree/LG.cpp b/alib2data/src/grammar/ContextFree/LG.cpp index 61a5b80b67..ac1fd82d8f 100644 --- a/alib2data/src/grammar/ContextFree/LG.cpp +++ b/alib2data/src/grammar/ContextFree/LG.cpp @@ -165,4 +165,10 @@ void LG::operator>>(std::ostream& out) const { << ")"; } +LG::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace grammar */ diff --git a/alib2data/src/grammar/ContextFree/LG.h b/alib2data/src/grammar/ContextFree/LG.h index 61fae87f03..c76c41dc9a 100644 --- a/alib2data/src/grammar/ContextFree/LG.h +++ b/alib2data/src/grammar/ContextFree/LG.h @@ -12,6 +12,7 @@ #include <map> #include <tuple> #include <vector> +#include <sstream> #include "../../std/variant.hpp" #include "../common/TerminalNonterminalAlphabetInitialSymbol.h" @@ -52,6 +53,8 @@ public: virtual bool operator==(const LG& other) const; virtual void operator>>(std::ostream& os) const; + + virtual operator std::string () const; }; } /* namespace grammar */ diff --git a/alib2data/src/grammar/ContextSensitive/CSG.cpp b/alib2data/src/grammar/ContextSensitive/CSG.cpp index 7e0a12b5e0..a6be7481a8 100644 --- a/alib2data/src/grammar/ContextSensitive/CSG.cpp +++ b/alib2data/src/grammar/ContextSensitive/CSG.cpp @@ -9,6 +9,7 @@ #include "../../std/map.hpp" #include "../GrammarException.h" #include <algorithm> +#include <sstream> #include "../../alphabet/Symbol.h" @@ -136,4 +137,10 @@ void CSG::operator>>(std::ostream& out) const { << ")"; } +CSG::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace grammar */ diff --git a/alib2data/src/grammar/ContextSensitive/CSG.h b/alib2data/src/grammar/ContextSensitive/CSG.h index d1384c28ff..df441b07db 100644 --- a/alib2data/src/grammar/ContextSensitive/CSG.h +++ b/alib2data/src/grammar/ContextSensitive/CSG.h @@ -48,6 +48,8 @@ public: virtual bool operator==(const CSG& other) const; virtual void operator>>(std::ostream& os) const; + + virtual operator std::string () const; }; } /* namespace grammar */ diff --git a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.cpp b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.cpp index 710964b9d7..14a365d635 100644 --- a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.cpp +++ b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.cpp @@ -9,6 +9,7 @@ #include "../../std/map.hpp" #include "../GrammarException.h" #include <algorithm> +#include <sstream> #include "../../alphabet/Symbol.h" @@ -117,4 +118,10 @@ void NonContractingGrammar::operator>>(std::ostream& out) const { << ")"; } +NonContractingGrammar::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace grammar */ diff --git a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h index 9565901647..b868f2d362 100644 --- a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h +++ b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h @@ -48,6 +48,8 @@ public: virtual bool operator==(const NonContractingGrammar& other) const; virtual void operator>>(std::ostream& os) const; + + virtual operator std::string () const; }; } /* namespace grammar */ diff --git a/alib2data/src/grammar/GrammarBase.h b/alib2data/src/grammar/GrammarBase.h index 4953e8b004..a28b9d1ac2 100644 --- a/alib2data/src/grammar/GrammarBase.h +++ b/alib2data/src/grammar/GrammarBase.h @@ -58,15 +58,15 @@ public: virtual bool operator==(const EpsilonFreeCFG& other) const; virtual bool operator==(const CNF& other) const; - + virtual bool operator==(const GNF& other) const; - + virtual bool operator==(const CSG& other) const; - + virtual bool operator==(const NonContractingGrammar& other) const; - + virtual bool operator==(const UnrestrictedGrammar& other) const; - + virtual bool operator==(const ContextPreservingUnrestrictedGrammar& other) const; virtual bool operator==(const GrammarBase& other) const = 0; @@ -74,6 +74,8 @@ public: friend std::ostream& operator<<(std::ostream& os, const GrammarBase& grammar); virtual void operator>>(std::ostream&) const = 0; + + virtual operator std::string () const = 0; }; } /* namespace grammar */ diff --git a/alib2data/src/grammar/Regular/LeftLG.cpp b/alib2data/src/grammar/Regular/LeftLG.cpp index f3ca254390..91ba66a931 100644 --- a/alib2data/src/grammar/Regular/LeftLG.cpp +++ b/alib2data/src/grammar/Regular/LeftLG.cpp @@ -9,6 +9,7 @@ #include "../../std/map.hpp" #include "../GrammarException.h" #include <algorithm> +#include <sstream> #include "../../alphabet/Symbol.h" @@ -153,4 +154,10 @@ void LeftLG::operator>>(std::ostream& out) const { << ")"; } +LeftLG::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace grammar */ diff --git a/alib2data/src/grammar/Regular/LeftLG.h b/alib2data/src/grammar/Regular/LeftLG.h index b251bb09c2..1561c938d5 100644 --- a/alib2data/src/grammar/Regular/LeftLG.h +++ b/alib2data/src/grammar/Regular/LeftLG.h @@ -51,6 +51,8 @@ public: virtual bool operator==(const LeftLG& other) const; virtual void operator>>(std::ostream& os) const; + + virtual operator std::string () const; }; } /* namespace grammar */ diff --git a/alib2data/src/grammar/Regular/LeftRG.cpp b/alib2data/src/grammar/Regular/LeftRG.cpp index 3f652862b5..6db45d239d 100644 --- a/alib2data/src/grammar/Regular/LeftRG.cpp +++ b/alib2data/src/grammar/Regular/LeftRG.cpp @@ -9,6 +9,7 @@ #include "../../std/map.hpp" #include "../GrammarException.h" #include <algorithm> +#include <sstream> #include "../../alphabet/Symbol.h" @@ -133,4 +134,10 @@ void LeftRG::operator>>(std::ostream& out) const { << ")"; } +LeftRG::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace grammar */ diff --git a/alib2data/src/grammar/Regular/LeftRG.h b/alib2data/src/grammar/Regular/LeftRG.h index 442061f6e3..734c583b86 100644 --- a/alib2data/src/grammar/Regular/LeftRG.h +++ b/alib2data/src/grammar/Regular/LeftRG.h @@ -68,6 +68,8 @@ public: virtual bool operator==(const LeftRG& other) const; virtual void operator>>(std::ostream& os) const; + + virtual operator std::string () const; }; } /* namespace grammar */ diff --git a/alib2data/src/grammar/Regular/RightLG.cpp b/alib2data/src/grammar/Regular/RightLG.cpp index 1ba4a09b65..58c386295d 100644 --- a/alib2data/src/grammar/Regular/RightLG.cpp +++ b/alib2data/src/grammar/Regular/RightLG.cpp @@ -9,6 +9,7 @@ #include "../../std/map.hpp" #include "../GrammarException.h" #include <algorithm> +#include <sstream> #include "../../alphabet/Symbol.h" @@ -153,4 +154,10 @@ void RightLG::operator>>(std::ostream& out) const { << ")"; } +RightLG::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace grammar */ diff --git a/alib2data/src/grammar/Regular/RightLG.h b/alib2data/src/grammar/Regular/RightLG.h index 3446bf5774..c807a57bcd 100644 --- a/alib2data/src/grammar/Regular/RightLG.h +++ b/alib2data/src/grammar/Regular/RightLG.h @@ -51,6 +51,8 @@ public: virtual bool operator==(const RightLG& other) const; virtual void operator>>(std::ostream& os) const; + + virtual operator std::string () const; }; } /* namespace grammar */ diff --git a/alib2data/src/grammar/Regular/RightRG.cpp b/alib2data/src/grammar/Regular/RightRG.cpp index f5977479e9..344c6a1446 100644 --- a/alib2data/src/grammar/Regular/RightRG.cpp +++ b/alib2data/src/grammar/Regular/RightRG.cpp @@ -9,6 +9,7 @@ #include "../../std/map.hpp" #include "../GrammarException.h" #include <algorithm> +#include <sstream> #include "../../alphabet/Symbol.h" @@ -133,4 +134,10 @@ void RightRG::operator>>(std::ostream& out) const { << ")"; } +RightRG::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace grammar */ diff --git a/alib2data/src/grammar/Regular/RightRG.h b/alib2data/src/grammar/Regular/RightRG.h index e70dce3805..f9d3c5e3e5 100644 --- a/alib2data/src/grammar/Regular/RightRG.h +++ b/alib2data/src/grammar/Regular/RightRG.h @@ -68,6 +68,8 @@ public: virtual bool operator==(const RightRG& other) const; virtual void operator>>(std::ostream& os) const; + + virtual operator std::string () const; }; } /* namespace grammar */ diff --git a/alib2data/src/grammar/UnknownGrammar.cpp b/alib2data/src/grammar/UnknownGrammar.cpp index fd05065400..869cde6aa7 100644 --- a/alib2data/src/grammar/UnknownGrammar.cpp +++ b/alib2data/src/grammar/UnknownGrammar.cpp @@ -8,6 +8,7 @@ #include "UnknownGrammar.h" #include "GrammarException.h" #include "../std/set.hpp" +#include <sstream> namespace grammar { @@ -106,4 +107,10 @@ void UnknownGrammar::operator>>(std::ostream& out) const { << ")"; } +UnknownGrammar::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace grammar */ diff --git a/alib2data/src/grammar/UnknownGrammar.h b/alib2data/src/grammar/UnknownGrammar.h index 72fa0ff513..0bf2d89510 100644 --- a/alib2data/src/grammar/UnknownGrammar.h +++ b/alib2data/src/grammar/UnknownGrammar.h @@ -65,6 +65,7 @@ public: virtual void operator>>(std::ostream& out) const; + virtual operator std::string () const; }; } /* namespace grammar */ diff --git a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.cpp b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.cpp index 6938804fc1..2069a60578 100644 --- a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.cpp +++ b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.cpp @@ -9,6 +9,7 @@ #include "../../std/map.hpp" #include "../GrammarException.h" #include <algorithm> +#include <sstream> #include "../../alphabet/Symbol.h" @@ -121,4 +122,10 @@ void ContextPreservingUnrestrictedGrammar::operator>>(std::ostream& out) const { << ")"; } +ContextPreservingUnrestrictedGrammar::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace grammar */ diff --git a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h index 81784fb841..180bdf5ee0 100644 --- a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h +++ b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h @@ -44,6 +44,8 @@ public: virtual bool operator==(const ContextPreservingUnrestrictedGrammar& other) const; virtual void operator>>(std::ostream& os) const; + + virtual operator std::string () const; }; } /* namespace grammar */ diff --git a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.cpp b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.cpp index a03aabbfbb..f6ca0fb904 100644 --- a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.cpp +++ b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.cpp @@ -9,6 +9,7 @@ #include "../../std/map.hpp" #include "../GrammarException.h" #include <algorithm> +#include <sstream> #include "../../alphabet/Symbol.h" @@ -102,4 +103,10 @@ void UnrestrictedGrammar::operator>>(std::ostream& out) const { << ")"; } +UnrestrictedGrammar::operator std::string () const { + std::stringstream ss; + ss << *this; + return ss.str(); +} + } /* namespace grammar */ diff --git a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h index d161652a27..1f37ac9a5c 100644 --- a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h +++ b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h @@ -45,6 +45,8 @@ public: virtual bool operator==(const UnrestrictedGrammar& other) const; virtual void operator>>(std::ostream& os) const; + + virtual operator std::string () const; }; } /* namespace grammar */ diff --git a/alib2data/src/regexp/RegExpBase.cpp b/alib2data/src/regexp/RegExpBase.cpp index 82cd52b2d7..5d6ee1d24d 100644 --- a/alib2data/src/regexp/RegExpBase.cpp +++ b/alib2data/src/regexp/RegExpBase.cpp @@ -13,6 +13,14 @@ RegExpBase::~RegExpBase() { } +bool RegExpBase::operator>=(const RegExpBase& other) const { + return !(*this < other); +} + +bool RegExpBase::operator<=(const RegExpBase& other) const { + return !(*this > other); +} + bool RegExpBase::operator!=(const RegExpBase& other) const { return !(*this == other); } diff --git a/alib2data/src/regexp/RegExpBase.h b/alib2data/src/regexp/RegExpBase.h index a18f1f59be..cf96030187 100644 --- a/alib2data/src/regexp/RegExpBase.h +++ b/alib2data/src/regexp/RegExpBase.h @@ -27,20 +27,26 @@ public: virtual ~RegExpBase() noexcept; - virtual bool operator <(const RegExpBase& other) const = 0; - virtual bool operator ==(const RegExpBase& other) const = 0; - virtual bool operator >(const RegExpBase& other) const = 0; + bool operator>=(const RegExpBase& other) const; + + bool operator<=(const RegExpBase& other) const; + bool operator !=(const RegExpBase& other) const; + virtual bool operator==(const RegExpBase& other) const = 0; virtual bool operator==(const FormalRegExp& other) const = 0; virtual bool operator==(const UnboundedRegExp& other) const = 0; + virtual bool operator<(const RegExpBase& other) const = 0; virtual bool operator<(const FormalRegExp& other) const = 0; virtual bool operator<(const UnboundedRegExp& other) const = 0; + virtual bool operator>(const RegExpBase& other) const = 0; friend std::ostream& operator<<(std::ostream& os, const RegExpBase& regexp); virtual void operator>>(std::ostream&) const = 0; + + virtual operator std::string () const = 0; }; } /* namespace regexp */ diff --git a/alib2data/src/regexp/formal/FormalRegExp.cpp b/alib2data/src/regexp/formal/FormalRegExp.cpp index e1a6319427..14c2340f57 100644 --- a/alib2data/src/regexp/formal/FormalRegExp.cpp +++ b/alib2data/src/regexp/formal/FormalRegExp.cpp @@ -127,7 +127,7 @@ void FormalRegExp::setAlphabet(const std::set<alphabet::Symbol> & symbols) { bool FormalRegExp::removeSymbolFromAlphabet(const alphabet::Symbol & symbol) { if(this->regExp->testSymbol(symbol)) throw exception::AlibException("Input symbol \"" + (std::string) symbol + "\" is used."); - + return alphabet.erase(symbol); } @@ -180,7 +180,7 @@ bool FormalRegExp::operator >(const RegExpBase& other) const { FormalRegExp::operator std::string () const { std::stringstream ss; ss << *this; - return ss.str(); + return ss.str(); } } /* namespace regexp */ diff --git a/alib2data/src/regexp/formal/FormalRegExp.h b/alib2data/src/regexp/formal/FormalRegExp.h index 2a2f7082b4..0b2be3ade7 100644 --- a/alib2data/src/regexp/formal/FormalRegExp.h +++ b/alib2data/src/regexp/formal/FormalRegExp.h @@ -27,14 +27,14 @@ class FormalRegExpElement; class FormalRegExp : public std::element<FormalRegExp, RegExpBase> { protected: FormalRegExpElement* regExp; - + std::set<alphabet::Symbol> alphabet; /** * @copydoc FormalRegExpElement::clone() const */ virtual RegExpBase* clone() const; - + /** * @copydoc FormalRegExpElement::plunder() const */ @@ -61,7 +61,7 @@ public: * @return Root node of the regular expression tree */ const FormalRegExpElement& getRegExp() const; - + /** * @return Root node of the regular expression tree */ @@ -73,19 +73,19 @@ public: * @param regExp root node to set */ void setRegExp(const FormalRegExpElement& regExp); - + /** * Sets the root node of the regular expression tree * @param regExp root node to set */ void setRegExp(FormalRegExpElement&& regExp); - + /** * Gets alphabet symbols used in RegExp. * @return set of alphabet symbols used in regexp. */ const std::set<alphabet::Symbol>& getAlphabet() const; - + /** * Adds symbol to the alphabet available in the regular expression * @param symbol new symbol added to the alphabet @@ -97,13 +97,13 @@ public: * @param symbols new alphabet */ void setAlphabet(const std::set<alphabet::Symbol>& symbols); - + /** * Removes symbol from the alphabet of symbol available in the regular expression * @param symbol removed symbol from the alphabet */ bool removeSymbolFromAlphabet(const alphabet::Symbol & symbol); - + /** * @return true if regexp represents empty language */ @@ -132,7 +132,6 @@ public: virtual bool operator<(const UnboundedRegExp&) const; virtual operator std::string() const; - }; } /* namespace regexp */ -- GitLab