#pragma once #include "libsyntax_global.h" #include namespace ast_basic { class IExprInstance; } namespace lib_token { /** * @brief 解析异常 */ class LIBSYNTAX_EXPORT TokenException { private: QString msg_store; public: TokenException(const QString& message); virtual QString message() const; }; // token 解析机制抽象接口========================================== /** * @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 std::enable_shared_from_this { public: /** * @brief token解析机制关联 * @return */ virtual std::shared_ptr defines() 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 动作Token */ class IActionToken : public lib_token::IToken { public: enum class Type { ElementBegin, TokenBind, ElementEnd }; /** * @brief 获取ActionToken类型. * * \return */ virtual Type tokenType() const = 0; /** * @brief 上一个Token * @return */ virtual std::shared_ptr prevToken() const = 0; /** * @brief 落实本Token内容到指定expr,返回完善状态后的expr * @param expr 目标表达式实例 * @return 完善后的表达式 */ virtual std::shared_ptr makeSure(std::shared_ptr expr) = 0; }; }