diff --git a/alib2/src/regexp/RegExpFeatures.h b/alib2/src/regexp/RegExpFeatures.h new file mode 100644 index 0000000000000000000000000000000000000000..a1b64f7cedfdda9a192aa3e9adf72107fa0a267b --- /dev/null +++ b/alib2/src/regexp/RegExpFeatures.h @@ -0,0 +1,19 @@ +/* + * RegExpFeatures.h + * + * Created on: Jun 19, 2014 + * Author: Jan Travnicek + */ + +#ifndef REG_EXP_FEATURES_H_ +#define REG_EXP_FEATURES_H_ + +namespace regexp { + +enum class FEATURES { + COMPACT +}; + +} /* namespace regexp */ + +#endif /* REG_EXP_FEATURES_H_ */ diff --git a/alib2/src/regexp/RegExpFromStringParser.cpp b/alib2/src/regexp/RegExpFromStringParser.cpp index 77995d4cb610905fca09f4001fdd61c8d06caf6e..5af3a1e1a7a94b28323cc4595bc3f1530770bf40 100644 --- a/alib2/src/regexp/RegExpFromStringParser.cpp +++ b/alib2/src/regexp/RegExpFromStringParser.cpp @@ -9,6 +9,11 @@ RegExpFromStringParser::RegExpFromStringParser(std::stringstream& input) : m_Reg } RegExp RegExpFromStringParser::parse() { + return parse(std::set<FEATURES>({FEATURES::COMPACT})); +} + +RegExp RegExpFromStringParser::parse(const std::set<FEATURES>& features) { + if(!features.count(FEATURES::COMPACT)) throw alib::AlibException(); RegExpElement* element = this->alternation(); RegExp regexp(std::move(*element)); delete element; diff --git a/alib2/src/regexp/RegExpFromStringParser.h b/alib2/src/regexp/RegExpFromStringParser.h index f7775f82bb8c0f2bbf0a33d99910ede488510237..f12db58fa694ebc89c53498ca6e4bbae2d8c4c48 100644 --- a/alib2/src/regexp/RegExpFromStringParser.h +++ b/alib2/src/regexp/RegExpFromStringParser.h @@ -13,6 +13,7 @@ #include "RegExpFromStringLexer.h" #include "../alphabet/SymbolFromStringParser.h" +#include "RegExpFeatures.h" namespace regexp { @@ -32,6 +33,7 @@ class RegExpFromStringParser { alphabet::SymbolFromStringParser m_SymbolParser; RegExp parse(); + RegExp parse(const std::set<FEATURES>& features); RegExp* parsePointer(); public: RegExpFromStringParser(std::stringstream&); diff --git a/alib2/src/regexp/RegExpFromXMLParser.cpp b/alib2/src/regexp/RegExpFromXMLParser.cpp index 9d29abb388890d3c8e485ff0b474faf9ec87cea8..ef747b99e489a375b3b8eddc28438e8611a960d1 100644 --- a/alib2/src/regexp/RegExpFromXMLParser.cpp +++ b/alib2/src/regexp/RegExpFromXMLParser.cpp @@ -14,6 +14,11 @@ namespace regexp { RegExp RegExpFromXMLParser::parse(std::list<sax::Token>& input) const { + return parse(input, std::set<FEATURES>({FEATURES::COMPACT})); +} + +RegExp RegExpFromXMLParser::parse(std::list<sax::Token>& input, const std::set<FEATURES>& features) const { + if(!features.count(FEATURES::COMPACT)) throw alib::AlibException(); popToken(input, sax::Token::TokenType::START_ELEMENT, "regexp"); RegExp regexp; diff --git a/alib2/src/regexp/RegExpFromXMLParser.h b/alib2/src/regexp/RegExpFromXMLParser.h index 6ce576a756f02030e0f9cd0c3587c63f2559f7e6..5d868d9a0347d263408c79507cf24e5054e91806 100644 --- a/alib2/src/regexp/RegExpFromXMLParser.h +++ b/alib2/src/regexp/RegExpFromXMLParser.h @@ -10,6 +10,7 @@ #include "../sax/FromXMLParser.h" #include "RegExp.h" +#include "RegExpFeatures.h" #include "RegExpElements.h" #include "../sax/Token.h" #include "../alphabet/Symbol.h" @@ -21,7 +22,7 @@ namespace regexp { */ class RegExpFromXMLParser : public sax::FromXMLParser { void parseAlphabet(std::list<sax::Token>& input, RegExp& regexp) const; - + RegExpElement* parseElement(std::list<sax::Token>& input) const; RegExpEpsilon* parseEpsilon(std::list<sax::Token>& input) const; @@ -31,6 +32,7 @@ class RegExpFromXMLParser : public sax::FromXMLParser { Concatenation* parseConcatenation(std::list<sax::Token> &input) const; RegExp parse(std::list<sax::Token>& input) const; + RegExp parse(std::list<sax::Token>& input, const std::set<FEATURES>& features) const; RegExp* parsePointer(std::list<sax::Token>& input) const; public: /**