summaryrefslogtreecommitdiffstats
path: root/yql/essentials/parser/lexer_common
diff options
context:
space:
mode:
authorvvvv <[email protected]>2025-02-18 14:49:48 +0300
committervvvv <[email protected]>2025-02-18 16:08:18 +0300
commit1213d16b7fd20d4255d2ebb709a1745efbfeb91b (patch)
treea1cd11d96b5abf0a0ec287c76c4f3cfe9b32a86e /yql/essentials/parser/lexer_common
parent408888e6801333da2d97af0b27a1c4da4448b9e0 (diff)
Introduced lexer & parser interfaces
commit_hash:fee365c90a176dd33a967cee20994b21d530080c
Diffstat (limited to 'yql/essentials/parser/lexer_common')
-rw-r--r--yql/essentials/parser/lexer_common/lexer.cpp49
-rw-r--r--yql/essentials/parser/lexer_common/lexer.h11
-rw-r--r--yql/essentials/parser/lexer_common/ya.make1
3 files changed, 61 insertions, 0 deletions
diff --git a/yql/essentials/parser/lexer_common/lexer.cpp b/yql/essentials/parser/lexer_common/lexer.cpp
new file mode 100644
index 00000000000..c93dd35bd48
--- /dev/null
+++ b/yql/essentials/parser/lexer_common/lexer.cpp
@@ -0,0 +1,49 @@
+#include "lexer.h"
+#include <yql/essentials/public/issue/yql_issue.h>
+
+#include <util/string/builder.h>
+
+namespace NSQLTranslation {
+
+namespace {
+
+class TDummyLexer : public ILexer {
+public:
+ TDummyLexer(const TString& name)
+ : Name_(name)
+ {}
+
+ bool Tokenize(const TString& query, const TString& queryName, const TTokenCallback& onNextToken, NYql::TIssues& issues, size_t maxErrors) final {
+ Y_UNUSED(query);
+ Y_UNUSED(queryName);
+ Y_UNUSED(onNextToken);
+ Y_UNUSED(maxErrors);
+ issues.AddIssue(NYql::TIssue({}, TStringBuilder() << "Lexer " << Name_ << " is not supported"));
+ return false;
+ }
+
+private:
+ const TString Name_;
+};
+
+class TDummyFactory: public ILexerFactory {
+public:
+ TDummyFactory(const TString& name)
+ : Name_(name)
+ {}
+
+ ILexer::TPtr MakeLexer() const final {
+ return MakeHolder<TDummyLexer>(Name_);
+ }
+
+private:
+ const TString Name_;
+};
+
+}
+
+TLexerFactoryPtr MakeDummyLexerFactory(const TString& name) {
+ return MakeIntrusive<TDummyFactory>(name);
+}
+
+}
diff --git a/yql/essentials/parser/lexer_common/lexer.h b/yql/essentials/parser/lexer_common/lexer.h
index f5d96006813..4de7eedb836 100644
--- a/yql/essentials/parser/lexer_common/lexer.h
+++ b/yql/essentials/parser/lexer_common/lexer.h
@@ -39,5 +39,16 @@ using TParsedTokenList = TVector<TParsedToken>;
IOutputStream& OutputTokens(IOutputStream& out, TParsedTokenList::const_iterator begin, TParsedTokenList::const_iterator end);
bool Tokenize(ILexer& lexer, const TString& query, const TString& queryName, TParsedTokenList& tokens, NYql::TIssues& issues, size_t maxErrors);
+class ILexerFactory : public TThrRefBase {
+public:
+ virtual ~ILexerFactory() = default;
+
+ virtual ILexer::TPtr MakeLexer() const = 0;
+};
+
+using TLexerFactoryPtr = TIntrusivePtr<ILexerFactory>;
+
+TLexerFactoryPtr MakeDummyLexerFactory(const TString& name);
+
}
diff --git a/yql/essentials/parser/lexer_common/ya.make b/yql/essentials/parser/lexer_common/ya.make
index a7601be02f4..14573434c47 100644
--- a/yql/essentials/parser/lexer_common/ya.make
+++ b/yql/essentials/parser/lexer_common/ya.make
@@ -7,6 +7,7 @@ PEERDIR(
SRCS(
tokens.cpp
lexer.h
+ lexer.cpp
hints.cpp
hints.h
parse_hints_impl.cpp