diff options
author | vvvv <[email protected]> | 2025-02-18 14:49:48 +0300 |
---|---|---|
committer | vvvv <[email protected]> | 2025-02-18 16:08:18 +0300 |
commit | 1213d16b7fd20d4255d2ebb709a1745efbfeb91b (patch) | |
tree | a1cd11d96b5abf0a0ec287c76c4f3cfe9b32a86e /yql/essentials/sql/v1/lexer/antlr3_ansi/lexer.cpp | |
parent | 408888e6801333da2d97af0b27a1c4da4448b9e0 (diff) |
Introduced lexer & parser interfaces
commit_hash:fee365c90a176dd33a967cee20994b21d530080c
Diffstat (limited to 'yql/essentials/sql/v1/lexer/antlr3_ansi/lexer.cpp')
-rw-r--r-- | yql/essentials/sql/v1/lexer/antlr3_ansi/lexer.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/yql/essentials/sql/v1/lexer/antlr3_ansi/lexer.cpp b/yql/essentials/sql/v1/lexer/antlr3_ansi/lexer.cpp new file mode 100644 index 00000000000..5b5c459f701 --- /dev/null +++ b/yql/essentials/sql/v1/lexer/antlr3_ansi/lexer.cpp @@ -0,0 +1,40 @@ +#include "lexer.h" +#include <yql/essentials/parser/proto_ast/gen/v1_ansi/SQLv1Lexer.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/antlr3/proto_ast_antlr3.h> + +namespace NALPAnsi { +extern ANTLR_UINT8 *SQLv1ParserTokenNames[]; +} + +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::TLexerTokensCollector3<NALPAnsi::SQLv1Lexer> tokensCollector(query, (const char**)NALPAnsi::SQLv1ParserTokenNames, 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 MakeAntlr3AnsiLexerFactory() { + return MakeIntrusive<TFactory>(); +} + +} |