#pragma once #include "libsyntax_global.h" #include namespace lib_token { /** * @brief 解析异常 */ class LIBSYNTAX_EXPORT TokenException { private: QString msg_store; public: TokenException(const QString& message); virtual QString message() const; }; /** * @brief token类型定义 */ class ITokenDefine { public: /** * @brief 整数类型标识. * * \return */ virtual int typeMark() const = 0; /** * @brief 解析机制关键定义 * @return */ virtual QString regex() const = 0; }; /** * @brief token解析结果 */ class IToken : public lib_words::IWordBase { public: /** * @brief token解析机制关联 * @return */ virtual std::shared_ptr defines() const = 0; /** * @brief 上一个Token * @return */ virtual std::shared_ptr previousToken() const = 0; }; /** * @brief token解析机制定义 */ class ITokenProcess : public ITokenDefine { public: /** * @brief 解析机制名称 * @return */ virtual QString reviseWords() const = 0; /** * @brief 解析词语处理过程 * @param content 词语 * @return tuple 解析结果 */ virtual std::tuple, std::shared_ptr> analysis(std::shared_ptr content) const = 0; }; /** * @brief 词法解析成果 */ class TokenContent : public IToken { private: int row_n, col_n, doc_offset; QString text_n, path_p; std::shared_ptr type_def; public: /** * @brief 词法解析内容 * @param r 行 * @param c 列 * @param pos 位置 * @param t 内容 * @param p path * @param paramType 类型定义 */ TokenContent(int r, int c, uint64_t pos, const QString& t, const QString& p, std::shared_ptr paramType); // WordBase interface public: virtual QString file() const override; virtual uint64_t position() const override; virtual QString content() const override; virtual int row() const override; virtual int column() const override; // Token interface public: virtual std::shared_ptr defines() const override; virtual std::shared_ptr previousToken() const override; }; class TokenChain : public IToken { private: std::shared_ptr _token_previous; std::shared_ptr _token_content; public: TokenChain(std::shared_ptr content, std::shared_ptr prev); // 通过 IToken 继承 QString file() const override; uint64_t position() const override; QString content() const override; int row() const override; int column() const override; std::shared_ptr defines() const override; std::shared_ptr previousToken() const override; }; }