lexer.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #include "lexer.h"
  2. #include <yql/essentials/parser/proto_ast/gen/v1_ansi/SQLv1Lexer.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/antlr3/proto_ast_antlr3.h>
  6. namespace NALPAnsi {
  7. extern ANTLR_UINT8 *SQLv1ParserTokenNames[];
  8. }
  9. namespace NSQLTranslationV1 {
  10. namespace {
  11. class TLexer: public NSQLTranslation::ILexer {
  12. public:
  13. bool Tokenize(const TString& query, const TString& queryName, const TTokenCallback& onNextToken, NYql::TIssues& issues, size_t maxErrors) final {
  14. NYql::TIssues newIssues;
  15. NSQLTranslation::TErrorCollectorOverIssues collector(newIssues, maxErrors, queryName);
  16. NProtoAST::TLexerTokensCollector3<NALPAnsi::SQLv1Lexer> tokensCollector(query, (const char**)NALPAnsi::SQLv1ParserTokenNames, queryName);
  17. tokensCollector.CollectTokens(collector, onNextToken);
  18. issues.AddIssues(newIssues);
  19. return !AnyOf(newIssues.begin(), newIssues.end(), [](auto issue) { return issue.GetSeverity() == NYql::ESeverity::TSeverityIds_ESeverityId_S_ERROR; });
  20. }
  21. };
  22. class TFactory: public NSQLTranslation::ILexerFactory {
  23. public:
  24. THolder<NSQLTranslation::ILexer> MakeLexer() const final {
  25. return MakeHolder<TLexer>();
  26. }
  27. };
  28. }
  29. NSQLTranslation::TLexerFactoryPtr MakeAntlr3AnsiLexerFactory() {
  30. return MakeIntrusive<TFactory>();
  31. }
  32. }