2025-02-02 12:54:32 +00:00
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "libsyntax_global.h"
|
|
|
|
|
#include <libwords.h>
|
|
|
|
|
|
|
|
|
|
namespace lib_token {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣
|
|
|
|
|
*/
|
|
|
|
|
class LIBSYNTAX_EXPORT TokenException {
|
|
|
|
|
private:
|
|
|
|
|
QString msg_store;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
TokenException(const QString& message);
|
|
|
|
|
virtual QString message() const;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
2025-02-04 14:26:34 +00:00
|
|
|
|
* @brief token<EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><EFBFBD><EFBFBD>
|
2025-02-02 12:54:32 +00:00
|
|
|
|
*/
|
|
|
|
|
class ITokenDefine {
|
|
|
|
|
public:
|
|
|
|
|
/**
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>ʶ.
|
|
|
|
|
*
|
|
|
|
|
* \return
|
|
|
|
|
*/
|
|
|
|
|
virtual int typeMark() const = 0;
|
|
|
|
|
/**
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƹؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
virtual QString regex() const = 0;
|
2025-02-04 14:26:34 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief token<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
class IToken : public lib_words::IWordBase {
|
|
|
|
|
public:
|
|
|
|
|
/**
|
|
|
|
|
* @brief token<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƹ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
virtual std::shared_ptr<const ITokenDefine> defines() const = 0;
|
|
|
|
|
/**
|
|
|
|
|
* @brief <EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Token
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
virtual std::shared_ptr<const IToken> previousToken() const = 0;
|
|
|
|
|
};
|
2025-02-02 12:54:32 +00:00
|
|
|
|
|
2025-02-04 14:26:34 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief token<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
class ITokenProcess : public ITokenDefine {
|
|
|
|
|
public:
|
|
|
|
|
/**
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
virtual QString reviseWords() const = 0;
|
2025-02-02 12:54:32 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ﴦ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* @param content <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* @return tuple<token/null,remains> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
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
|
|
|
|
* @brief <EFBFBD>ʷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
2025-02-02 12:54:32 +00:00
|
|
|
|
*/
|
2025-02-04 14:26:34 +00:00
|
|
|
|
class TokenContent : public IToken {
|
|
|
|
|
private:
|
|
|
|
|
int row_n, col_n, doc_offset;
|
|
|
|
|
QString text_n, path_p;
|
|
|
|
|
std::shared_ptr<const ITokenDefine> type_def;
|
|
|
|
|
|
2025-02-02 12:54:32 +00:00
|
|
|
|
public:
|
|
|
|
|
/**
|
2025-02-04 14:26:34 +00:00
|
|
|
|
* @brief <EFBFBD>ʷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* @param r <EFBFBD><EFBFBD>
|
|
|
|
|
* @param c <EFBFBD><EFBFBD>
|
|
|
|
|
* @param pos λ<EFBFBD><EFBFBD>
|
|
|
|
|
* @param t <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* @param p path
|
|
|
|
|
* @param paramType <EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
TokenContent(int r, int c, uint64_t pos, const QString& t, const QString& p, std::shared_ptr<const ITokenDefine> paramType);
|
|
|
|
|
|
|
|
|
|
// WordBase interface
|
|
|
|
|
public:
|
|
|
|
|
virtual QString file() const override;
|
|
|
|
|
virtual uint64_t position() const override;
|
|
|
|
|
virtual QString content() const override;
|
|
|
|
|
virtual int row() const override;
|
|
|
|
|
virtual int column() const override;
|
|
|
|
|
|
|
|
|
|
// Token interface
|
|
|
|
|
public:
|
|
|
|
|
virtual std::shared_ptr<const ITokenDefine> defines() const override;
|
|
|
|
|
virtual std::shared_ptr<const IToken> previousToken() const override;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class TokenChain : public IToken {
|
|
|
|
|
private:
|
|
|
|
|
std::shared_ptr<const IToken> _token_previous;
|
|
|
|
|
std::shared_ptr<const IToken> _token_content;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
TokenChain(std::shared_ptr<const IToken> content, std::shared_ptr<const IToken> prev);
|
|
|
|
|
|
|
|
|
|
// ͨ<><CDA8> IToken <20>̳<EFBFBD>
|
|
|
|
|
QString file() const override;
|
|
|
|
|
uint64_t position() const override;
|
|
|
|
|
QString content() const override;
|
|
|
|
|
int row() const override;
|
|
|
|
|
int column() const override;
|
|
|
|
|
std::shared_ptr<const ITokenDefine> defines() const override;
|
|
|
|
|
std::shared_ptr<const IToken> previousToken() const override;
|
2025-02-02 12:54:32 +00:00
|
|
|
|
};
|
|
|
|
|
}
|