proto_parser.cpp 1.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. #include "proto_parser.h"
  2. #include <yql/essentials/parser/proto_ast/antlr3/proto_ast_antlr3.h>
  3. #include <yql/essentials/parser/proto_ast/gen/v1_ansi/SQLv1Lexer.h>
  4. #include <yql/essentials/parser/proto_ast/gen/v1_ansi/SQLv1Parser.h>
  5. #include <yql/essentials/utils/yql_panic.h>
  6. namespace NSQLTranslationV1 {
  7. namespace {
  8. class TParser : public NSQLTranslation::IParser {
  9. public:
  10. google::protobuf::Message* Parse(
  11. const TString& query, const TString& queryName, NProtoAST::IErrorCollector& err,
  12. google::protobuf::Arena* arena) final {
  13. YQL_ENSURE(arena);
  14. NProtoAST::TProtoASTBuilder3<NALPAnsi::SQLv1Parser, NALPAnsi::SQLv1Lexer> builder(query, queryName, arena);
  15. return builder.BuildAST(err);
  16. }
  17. };
  18. class TFactory: public NSQLTranslation::IParserFactory {
  19. public:
  20. std::unique_ptr<NSQLTranslation::IParser> MakeParser() const final {
  21. return std::make_unique<TParser>();
  22. }
  23. };
  24. }
  25. NSQLTranslation::TParserFactoryPtr MakeAntlr3AnsiParserFactory() {
  26. return MakeIntrusive<TFactory>();
  27. }
  28. }