WsParser_VS/libSyntax/libtokens.h

107 lines
2.1 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
};
}