#pragma once #include #include #include #include "./keyword_types.hpp" namespace tsl { class KeywordManager { public: KeywordManager(const KeywordManager&) = delete; KeywordManager& operator=(const KeywordManager&) = delete; static KeywordManager& GetInstance(); std::vector GetAllKeywords(); std::vector GetKeyWordByPrefix(std::string prefix); std::optional GetKeywordInfo(std::string key); private: KeywordManager(); void InitKeywords(); void InitProgramStructureKeywords(); void InitDataTypeKeywords(); void InitClassKeywords(); void InitControlFlowKeywords(); void InitOperatorKeywords(); void InitSqlKeywords(); void InitBuiltinKeywords(); void InitConstantKeywords(); std::unordered_map keywords_; }; }