WsParser_VS/libSyntax/libtokens.h

107 lines
2.1 KiB
C
Raw Normal View History

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-15 04:57:53 +00:00
enum class Type { ElementBegin, TokenBind, ElementEnd };
/**
* @brief ActionToken类型.
*
* \return
*/
virtual Type tokenType() const = 0;
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内容到指定exprexpr
* @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
}