aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/regex/pire/pcre2pire.cpp
diff options
context:
space:
mode:
authorsmikler <smikler@yandex-team.ru>2022-02-10 16:49:33 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:49:33 +0300
commit0e68ae909d3b76a5a001a07880eb0010dec6b2ea (patch)
tree5d5cb817648f650d76cf1076100726fd9b8448e8 /library/cpp/regex/pire/pcre2pire.cpp
parente4f0fd4ab53ca40eb91e750cf3e7f76c21e930db (diff)
downloadydb-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.cpp210
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];
+}