diff options
author | smikler <smikler@yandex-team.ru> | 2022-02-10 16:49:33 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:49:33 +0300 |
commit | 0e68ae909d3b76a5a001a07880eb0010dec6b2ea (patch) | |
tree | 5d5cb817648f650d76cf1076100726fd9b8448e8 /library/cpp/regex/pire/pcre2pire.cpp | |
parent | e4f0fd4ab53ca40eb91e750cf3e7f76c21e930db (diff) | |
download | ydb-0e68ae909d3b76a5a001a07880eb0010dec6b2ea.tar.gz |
Restoring authorship annotation for <smikler@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'library/cpp/regex/pire/pcre2pire.cpp')
-rw-r--r-- | library/cpp/regex/pire/pcre2pire.cpp | 210 |
1 files changed, 105 insertions, 105 deletions
diff --git a/library/cpp/regex/pire/pcre2pire.cpp b/library/cpp/regex/pire/pcre2pire.cpp index bb5c79634d..f788beb85f 100644 --- a/library/cpp/regex/pire/pcre2pire.cpp +++ b/library/cpp/regex/pire/pcre2pire.cpp @@ -1,110 +1,110 @@ -#include "pcre2pire.h" -#include <util/generic/vector.h> -#include <util/generic/yexception.h> - +#include "pcre2pire.h" +#include <util/generic/vector.h> +#include <util/generic/yexception.h> + TString Pcre2Pire(const TString& src) { TVector<char> result; result.reserve(src.size() + 1); - - enum EState { - S_SIMPLE, - S_SLASH, - S_BRACE, - S_EXPECT_Q, - S_QUESTION, - S_P, - S_COMMA, - S_IN, - }; - - EState state = S_SIMPLE; - + + enum EState { + S_SIMPLE, + S_SLASH, + S_BRACE, + S_EXPECT_Q, + S_QUESTION, + S_P, + S_COMMA, + S_IN, + }; + + EState state = S_SIMPLE; + for (ui32 i = 0; i < src.size(); ++i) { - const char c = src[i]; - - switch (state) { - case S_SIMPLE: - if (c == '\\') { - state = S_SLASH; - } else if (c == '(') { - state = S_BRACE; - } else if (c == '*' || c == '?') { - state = S_EXPECT_Q; - result.push_back(c); - } else { + const char c = src[i]; + + switch (state) { + case S_SIMPLE: + if (c == '\\') { + state = S_SLASH; + } else if (c == '(') { + state = S_BRACE; + } else if (c == '*' || c == '?') { + state = S_EXPECT_Q; + result.push_back(c); + } else { if (c == ')' && result.size() > 0 && result.back() == '(') { - // eliminating "()" - result.pop_back(); - } else { - result.push_back(c); - } - } - break; - case S_SLASH: - state = S_SIMPLE; - if (c == ':' || c == '=' || c == '#' || c == '&') { - result.push_back(c); - } else { - result.push_back('\\'); - --i; - } - break; - case S_BRACE: - if (c == '?') { - state = S_QUESTION; - } else { - state = S_COMMA; - --i; - } - break; - case S_EXPECT_Q: - state = S_SIMPLE; - if (c != '?') { - --i; - } - break; - case S_QUESTION: - if (c == 'P') { - state = S_P; - } else if (c == ':' || c == '=') { - state = S_COMMA; - } else { - ythrow yexception() << "Pcre to pire convertaion failed: unexpected symbol '" << c << "' at posiotion " << i << "!"; - } - break; - case S_P: - if (c == '<') { - state = S_IN; - } else { - ythrow yexception() << "Pcre to pire convertaion failed: unexpected symbol '" << c << "' at posiotion " << i << "!"; - } - break; - case S_IN: - if (c == '>') { - state = S_COMMA; - } else { - // nothing to do - } - break; - case S_COMMA: - state = S_SIMPLE; - if (c == ')') { - // nothing to do - } else { - result.push_back('('); - --i; - } - break; - default: - ythrow yexception() << "Pcre to pire convertaion failed: unexpected automata state!"; - } - } - - if (state != S_SIMPLE && state != S_EXPECT_Q) { - ythrow yexception() << "Pcre to pire convertaion failed: unexpected end of expression!"; - } - - result.push_back('\0'); - - return &result[0]; -} + // eliminating "()" + result.pop_back(); + } else { + result.push_back(c); + } + } + break; + case S_SLASH: + state = S_SIMPLE; + if (c == ':' || c == '=' || c == '#' || c == '&') { + result.push_back(c); + } else { + result.push_back('\\'); + --i; + } + break; + case S_BRACE: + if (c == '?') { + state = S_QUESTION; + } else { + state = S_COMMA; + --i; + } + break; + case S_EXPECT_Q: + state = S_SIMPLE; + if (c != '?') { + --i; + } + break; + case S_QUESTION: + if (c == 'P') { + state = S_P; + } else if (c == ':' || c == '=') { + state = S_COMMA; + } else { + ythrow yexception() << "Pcre to pire convertaion failed: unexpected symbol '" << c << "' at posiotion " << i << "!"; + } + break; + case S_P: + if (c == '<') { + state = S_IN; + } else { + ythrow yexception() << "Pcre to pire convertaion failed: unexpected symbol '" << c << "' at posiotion " << i << "!"; + } + break; + case S_IN: + if (c == '>') { + state = S_COMMA; + } else { + // nothing to do + } + break; + case S_COMMA: + state = S_SIMPLE; + if (c == ')') { + // nothing to do + } else { + result.push_back('('); + --i; + } + break; + default: + ythrow yexception() << "Pcre to pire convertaion failed: unexpected automata state!"; + } + } + + if (state != S_SIMPLE && state != S_EXPECT_Q) { + ythrow yexception() << "Pcre to pire convertaion failed: unexpected end of expression!"; + } + + result.push_back('\0'); + + return &result[0]; +} |