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/parser/lexer_common | |
parent | 408888e6801333da2d97af0b27a1c4da4448b9e0 (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.cpp | 49 | ||||
-rw-r--r-- | yql/essentials/parser/lexer_common/lexer.h | 11 | ||||
-rw-r--r-- | yql/essentials/parser/lexer_common/ya.make | 1 |
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 |