summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/lexer/antlr4/lexer.cpp
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/sql/v1/lexer/antlr4/lexer.cpp
parent408888e6801333da2d97af0b27a1c4da4448b9e0 (diff)
Introduced lexer & parser interfaces
commit_hash:fee365c90a176dd33a967cee20994b21d530080c
Diffstat (limited to 'yql/essentials/sql/v1/lexer/antlr4/lexer.cpp')
-rw-r--r--yql/essentials/sql/v1/lexer/antlr4/lexer.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/yql/essentials/sql/v1/lexer/antlr4/lexer.cpp b/yql/essentials/sql/v1/lexer/antlr4/lexer.cpp
new file mode 100644
index 00000000000..5add4fc6bfb
--- /dev/null
+++ b/yql/essentials/sql/v1/lexer/antlr4/lexer.cpp
@@ -0,0 +1,36 @@
+#include "lexer.h"
+#include <yql/essentials/parser/proto_ast/gen/v1_antlr4/SQLv1Antlr4Lexer.h>
+#include <yql/essentials/public/issue/yql_issue.h>
+#include <yql/essentials/parser/proto_ast/collect_issues/collect_issues.h>
+#include <yql/essentials/parser/proto_ast/antlr4/proto_ast_antlr4.h>
+
+namespace NSQLTranslationV1 {
+
+namespace {
+
+class TLexer: public NSQLTranslation::ILexer {
+public:
+ bool Tokenize(const TString& query, const TString& queryName, const TTokenCallback& onNextToken, NYql::TIssues& issues, size_t maxErrors) final {
+ NYql::TIssues newIssues;
+ NSQLTranslation::TErrorCollectorOverIssues collector(newIssues, maxErrors, queryName);
+ NProtoAST::TLexerTokensCollector4<NALPDefaultAntlr4::SQLv1Antlr4Lexer> tokensCollector(query, queryName);
+ tokensCollector.CollectTokens(collector, onNextToken);
+ issues.AddIssues(newIssues);
+ return !AnyOf(newIssues.begin(), newIssues.end(), [](auto issue) { return issue.GetSeverity() == NYql::ESeverity::TSeverityIds_ESeverityId_S_ERROR; });
+ }
+};
+
+class TFactory: public NSQLTranslation::ILexerFactory {
+public:
+ THolder<NSQLTranslation::ILexer> MakeLexer() const final {
+ return MakeHolder<TLexer>();
+ }
+};
+
+}
+
+NSQLTranslation::TLexerFactoryPtr MakeAntlr4LexerFactory() {
+ return MakeIntrusive<TFactory>();
+}
+
+}