2025-02-02 12:54:32 +00:00
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "libsyntax_global.h"
|
|
|
|
|
#include <libwords.h>
|
|
|
|
|
|
2025-02-07 15:26:20 +00:00
|
|
|
|
namespace ast_basic {
|
|
|
|
|
class IExprInstance;
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-02 12:54:32 +00:00
|
|
|
|
namespace lib_token {
|
|
|
|
|
|
|
|
|
|
/**
|
2025-02-11 14:32:10 +00:00
|
|
|
|
* @brief 解析异常
|
2025-02-02 12:54:32 +00:00
|
|
|
|
*/
|
|
|
|
|
class LIBSYNTAX_EXPORT TokenException {
|
|
|
|
|
private:
|
|
|
|
|
QString msg_store;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
TokenException(const QString& message);
|
|
|
|
|
virtual QString message() const;
|
|
|
|
|
};
|
|
|
|
|
|
2025-02-07 15:26:20 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-02-11 14:32:10 +00:00
|
|
|
|
// token 解析机制抽象接口==========================================
|
2025-02-02 12:54:32 +00:00
|
|
|
|
/**
|
2025-02-11 14:32:10 +00:00
|
|
|
|
* @brief token类型定义
|
2025-02-02 12:54:32 +00:00
|
|
|
|
*/
|
|
|
|
|
class ITokenDefine {
|
|
|
|
|
public:
|
|
|
|
|
/**
|
2025-02-11 14:32:10 +00:00
|
|
|
|
* @brief 整数类型标识.
|
2025-02-02 12:54:32 +00:00
|
|
|
|
*
|
|
|
|
|
* \return
|
|
|
|
|
*/
|
|
|
|
|
virtual int typeMark() const = 0;
|
|
|
|
|
/**
|
2025-02-11 14:32:10 +00:00
|
|
|
|
* @brief 解析机制关键定义
|
2025-02-02 12:54:32 +00:00
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
virtual QString regex() const = 0;
|
2025-02-04 14:26:34 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
2025-02-11 14:32:10 +00:00
|
|
|
|
* @brief token解析结果
|
2025-02-04 14:26:34 +00:00
|
|
|
|
*/
|
2025-02-07 15:26:20 +00:00
|
|
|
|
class IToken : public lib_words::IWordBase, public std::enable_shared_from_this<IToken> {
|
2025-02-04 14:26:34 +00:00
|
|
|
|
public:
|
|
|
|
|
/**
|
2025-02-11 14:32:10 +00:00
|
|
|
|
* @brief token解析机制关联
|
2025-02-04 14:26:34 +00:00
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
virtual std::shared_ptr<const ITokenDefine> defines() const = 0;
|
|
|
|
|
};
|
2025-02-02 12:54:32 +00:00
|
|
|
|
|
2025-02-07 15:26:20 +00:00
|
|
|
|
|
2025-02-11 14:32:10 +00:00
|
|
|
|
// 拓展基础接口=========================
|
2025-02-04 14:26:34 +00:00
|
|
|
|
/**
|
2025-02-11 14:32:10 +00:00
|
|
|
|
* @brief token解析机制定义
|
2025-02-04 14:26:34 +00:00
|
|
|
|
*/
|
|
|
|
|
class ITokenProcess : public ITokenDefine {
|
|
|
|
|
public:
|
|
|
|
|
/**
|
2025-02-11 14:32:10 +00:00
|
|
|
|
* @brief 解析机制名称
|
2025-02-04 14:26:34 +00:00
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
virtual QString reviseWords() const = 0;
|
2025-02-02 12:54:32 +00:00
|
|
|
|
/**
|
2025-02-11 14:32:10 +00:00
|
|
|
|
* @brief 解析词语处理过程
|
|
|
|
|
* @param content 词语
|
|
|
|
|
* @return tuple<token/null,remains> 解析结果
|
2025-02-02 12:54:32 +00:00
|
|
|
|
*/
|
2025-02-04 14:26:34 +00:00
|
|
|
|
virtual std::tuple<std::shared_ptr<const IToken>, std::shared_ptr<const lib_words::IPrimitiveWord>>
|
|
|
|
|
analysis(std::shared_ptr<const lib_words::IPrimitiveWord> content) const = 0;
|
2025-02-02 12:54:32 +00:00
|
|
|
|
};
|
|
|
|
|
|
2025-02-04 14:26:34 +00:00
|
|
|
|
|
2025-02-07 15:26:20 +00:00
|
|
|
|
/**
|
2025-02-11 14:32:10 +00:00
|
|
|
|
* @brief 动作Token
|
2025-02-07 15:26:20 +00:00
|
|
|
|
*/
|
|
|
|
|
class IActionToken : public lib_token::IToken {
|
2025-02-02 12:54:32 +00:00
|
|
|
|
public:
|
2025-02-07 15:26:20 +00:00
|
|
|
|
|
2025-02-02 12:54:32 +00:00
|
|
|
|
/**
|
2025-02-11 14:32:10 +00:00
|
|
|
|
* @brief 上一个Token
|
2025-02-07 15:26:20 +00:00
|
|
|
|
* @return
|
2025-02-04 14:26:34 +00:00
|
|
|
|
*/
|
2025-02-07 15:26:20 +00:00
|
|
|
|
virtual std::shared_ptr<const IActionToken> prevToken() const = 0;
|
|
|
|
|
/**
|
2025-02-11 14:32:10 +00:00
|
|
|
|
* @brief 落实本Token内容到指定expr,返回完善状态后的expr
|
|
|
|
|
* @param expr 目标表达式实例
|
|
|
|
|
* @return 完善后的表达式
|
2025-02-07 15:26:20 +00:00
|
|
|
|
*/
|
|
|
|
|
virtual std::shared_ptr<ast_basic::IExprInstance> makeSure(std::shared_ptr<ast_basic::IExprInstance> expr) = 0;
|
2025-02-04 14:26:34 +00:00
|
|
|
|
};
|
|
|
|
|
|
2025-02-02 12:54:32 +00:00
|
|
|
|
}
|