#pragma once #include #include #include #include #include #include #ifdef TOKEN_QUERY // Conflict with the winnt.h #undef TOKEN_QUERY #endif #include #define RULE(name) NALADefaultAntlr4::SQLv1Antlr4Parser::Rule##name namespace NSQLComplete { class ISqlGrammar { public: virtual ~ISqlGrammar() = default; [[nodiscard]] virtual const antlr4::dfa::Vocabulary& GetVocabulary() const = 0; [[nodiscard]] virtual const std::string& SymbolizedRule(TRuleId rule) const = 0; [[nodiscard]] virtual TTokenId GetTokenId(std::string_view symbolized) const = 0; [[nodiscard]] virtual TRuleId GetRuleId(std::string_view symbolized) const = 0; [[nodiscard]] virtual const std::vector& GetAllRules() const = 0; [[nodiscard]] virtual const std::unordered_set& GetAllTokens() const = 0; [[nodiscard]] virtual const std::unordered_set& GetKeywordTokens() const = 0; [[nodiscard]] virtual const std::unordered_set& GetPunctuationTokens() const = 0; [[nodiscard]] virtual bool IsPlainIdentifier(TStringBuf content) const = 0; }; const ISqlGrammar& GetSqlGrammar(); } // namespace NSQLComplete