From 7bf8c8a84d9820577f308a2cf97e0a3d1b8c62f6 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Sat, 28 Jun 2014 21:10:53 +0200 Subject: [PATCH] features of regexp --- alib2/src/regexp/RegExpFeatures.h | 19 +++++++++++++++++++ alib2/src/regexp/RegExpFromStringParser.cpp | 5 +++++ alib2/src/regexp/RegExpFromStringParser.h | 2 ++ alib2/src/regexp/RegExpFromXMLParser.cpp | 5 +++++ alib2/src/regexp/RegExpFromXMLParser.h | 4 +++- 5 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 alib2/src/regexp/RegExpFeatures.h diff --git a/alib2/src/regexp/RegExpFeatures.h b/alib2/src/regexp/RegExpFeatures.h new file mode 100644 index 0000000000..a1b64f7ced --- /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 77995d4cb6..5af3a1e1a7 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 f7775f82bb..f12db58fa6 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 9d29abb388..ef747b99e4 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 6ce576a756..5d868d9a03 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: /** -- GitLab