107 lines
2.1 KiB
C++
107 lines
2.1 KiB
C++
#pragma once
|
||
|
||
#include "libsyntax_global.h"
|
||
#include <libwords.h>
|
||
|
||
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<IToken> {
|
||
public:
|
||
/**
|
||
* @brief token解析机制关联
|
||
* @return
|
||
*/
|
||
virtual std::shared_ptr<const ITokenDefine> defines() const = 0;
|
||
};
|
||
|
||
|
||
// 拓展基础接口=========================
|
||
/**
|
||
* @brief token解析机制定义
|
||
*/
|
||
class ITokenProcess : public ITokenDefine {
|
||
public:
|
||
/**
|
||
* @brief 解析机制名称
|
||
* @return
|
||
*/
|
||
virtual QString reviseWords() const = 0;
|
||
/**
|
||
* @brief 解析词语处理过程
|
||
* @param content 词语
|
||
* @return tuple<token/null,remains> 解析结果
|
||
*/
|
||
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;
|
||
};
|
||
|
||
|
||
/**
|
||
* @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<const IActionToken> prevToken() const = 0;
|
||
/**
|
||
* @brief 落实本Token内容到指定expr,返回完善状态后的expr
|
||
* @param expr 目标表达式实例
|
||
* @return 完善后的表达式
|
||
*/
|
||
virtual std::shared_ptr<ast_basic::IExprInstance> makeSure(std::shared_ptr<ast_basic::IExprInstance> expr) = 0;
|
||
};
|
||
|
||
} |