lexer.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536
  1. #include "lexer.h"
  2. #include <yql/essentials/parser/proto_ast/gen/v1_antlr4/SQLv1Antlr4Lexer.h>
  3. #include <yql/essentials/public/issue/yql_issue.h>
  4. #include <yql/essentials/parser/proto_ast/collect_issues/collect_issues.h>
  5. #include <yql/essentials/parser/proto_ast/antlr4/proto_ast_antlr4.h>
  6. namespace NSQLTranslationV1 {
  7. namespace {
  8. class TLexer: public NSQLTranslation::ILexer {
  9. public:
  10. bool Tokenize(const TString& query, const TString& queryName, const TTokenCallback& onNextToken, NYql::TIssues& issues, size_t maxErrors) final {
  11. NYql::TIssues newIssues;
  12. NSQLTranslation::TErrorCollectorOverIssues collector(newIssues, maxErrors, queryName);
  13. NProtoAST::TLexerTokensCollector4<NALPDefaultAntlr4::SQLv1Antlr4Lexer> tokensCollector(query, queryName);
  14. tokensCollector.CollectTokens(collector, onNextToken);
  15. issues.AddIssues(newIssues);
  16. return !AnyOf(newIssues.begin(), newIssues.end(), [](auto issue) { return issue.GetSeverity() == NYql::ESeverity::TSeverityIds_ESeverityId_S_ERROR; });
  17. }
  18. };
  19. class TFactory: public NSQLTranslation::ILexerFactory {
  20. public:
  21. THolder<NSQLTranslation::ILexer> MakeLexer() const final {
  22. return MakeHolder<TLexer>();
  23. }
  24. };
  25. }
  26. NSQLTranslation::TLexerFactoryPtr MakeAntlr4LexerFactory() {
  27. return MakeIntrusive<TFactory>();
  28. }
  29. }