重构token

This commit is contained in:
codeboss 2024-06-20 19:18:41 +08:00
parent 3c320da2cd
commit dba8c71f84
3 changed files with 18 additions and 18 deletions

View File

@ -5,7 +5,7 @@
using namespace lib_token; using namespace lib_token;
std::shared_ptr<const IWordBase> TokenReader::wordsFrom(const QString& path) const { std::shared_ptr<const IWordBase> WordReader::wordsFrom(const QString& path) const {
auto content_list = extract_from(path); auto content_list = extract_from(path);
if (!content_list.size()) if (!content_list.size())
return nullptr; return nullptr;
@ -19,7 +19,7 @@ std::shared_ptr<const IWordBase> TokenReader::wordsFrom(const QString& path) con
return prev_ptr; return prev_ptr;
} }
QList<std::shared_ptr<const IWordBase>> TokenReader::extract_from(const QString& path) const { QList<std::shared_ptr<const IWordBase>> WordReader::extract_from(const QString& path) const {
QFile file(path); QFile file(path);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
throw new TokenException(u8"Lex[0x0000]指定文件无法打开:" + path); throw new TokenException(u8"Lex[0x0000]指定文件无法打开:" + path);
@ -38,7 +38,7 @@ QList<std::shared_ptr<const IWordBase>> TokenReader::extract_from(const QString&
} }
#include <QRegExp> #include <QRegExp>
QList<std::shared_ptr<const IWordBase>> TokenReader::parse_line(int row, const QString& line_text, const QString& path) const { QList<std::shared_ptr<const IWordBase>> WordReader::parse_line(int row, const QString& line_text, const QString& path) const {
QRegExp split_char(u8"\\s"); QRegExp split_char(u8"\\s");
auto words = line_text.split(split_char, QString::SplitBehavior::SkipEmptyParts); auto words = line_text.split(split_char, QString::SplitBehavior::SkipEmptyParts);

View File

@ -59,7 +59,7 @@ namespace lib_token {
virtual std::shared_ptr<const IWordBase> nextWord() const override; virtual std::shared_ptr<const IWordBase> nextWord() const override;
}; };
class WordImpl : public IWordBase { class LIBTOKEN_EXPORT WordImpl : public IWordBase {
private: private:
std::shared_ptr<const IWordBase> content_ptr; std::shared_ptr<const IWordBase> content_ptr;
std::shared_ptr<const IWordBase> next_ptr; std::shared_ptr<const IWordBase> next_ptr;
@ -134,7 +134,7 @@ namespace lib_token {
/** /**
* @brief ´Ê·¨»ñÈ¡Æ÷ * @brief ´Ê·¨»ñÈ¡Æ÷
*/ */
class LIBTOKEN_EXPORT TokenReader { class LIBTOKEN_EXPORT WordReader {
private: private:
QList<std::shared_ptr<const IWordBase>> parse_line(int row, const QString& line_text, const QString& path) const; QList<std::shared_ptr<const IWordBase>> parse_line(int row, const QString& line_text, const QString& path) const;
QList<std::shared_ptr<const IWordBase>> extract_from(const QString& path) const; QList<std::shared_ptr<const IWordBase>> extract_from(const QString& path) const;

View File

@ -24,7 +24,7 @@ std::shared_ptr<const ITokenDefine> TokenContent::define() const { return this->
QString LeftBracket::typeName() const { return u8"left-bracket"; } QString LeftBracket::typeName() const { return u8"left-bracket"; }
int example_novel::LeftBracket::typeMark() const int LeftBracket::typeMark() const
{ {
return 0x01000000; return 0x01000000;
} }
@ -49,7 +49,7 @@ LeftBracket::analysis(std::shared_ptr<const IWordBase> content) const {
QString RightBracket::typeName() const { return u8"right-bracket"; } QString RightBracket::typeName() const { return u8"right-bracket"; }
int example_novel::RightBracket::typeMark() const int RightBracket::typeMark() const
{ {
return 0x02000000; return 0x02000000;
} }
@ -58,7 +58,7 @@ QString RightBracket::regex() const { return u8"}"; }
QString ReferMark::typeName() const { return u8"refer-mark"; } QString ReferMark::typeName() const { return u8"refer-mark"; }
int example_novel::ReferMark::typeMark() const int ReferMark::typeMark() const
{ {
return 0x03000000; return 0x03000000;
} }
@ -69,7 +69,7 @@ Keywords::Keywords(const QString& val, const QString& nm, uint type_code) : valu
QString Keywords::typeName() const { return name_store; } QString Keywords::typeName() const { return name_store; }
int example_novel::Keywords::typeMark() const int Keywords::typeMark() const
{ {
return 0x06000000 | (0x00ffffff & type_code); return 0x06000000 | (0x00ffffff & type_code);
} }
@ -88,7 +88,7 @@ Keywords::analysis(std::shared_ptr<const IWordBase> content) const {
QString NewLine::typeName() const { return u8"new-line"; } QString NewLine::typeName() const { return u8"new-line"; }
int example_novel::NewLine::typeMark() const int NewLine::typeMark() const
{ {
return 0x04000000; return 0x04000000;
} }
@ -97,7 +97,7 @@ QString NewLine::regex() const { return u8"\n"; }
QString Numbers::typeName() const { return u8"numbers"; } QString Numbers::typeName() const { return u8"numbers"; }
int example_novel::Numbers::typeMark() const int Numbers::typeMark() const
{ {
return 0x07000000; return 0x07000000;
} }
@ -117,7 +117,7 @@ Numbers::analysis(std::shared_ptr<const IWordBase> content) const {
QString VTextSection::typeName() const { return u8"text-section"; } QString VTextSection::typeName() const { return u8"text-section"; }
int example_novel::VTextSection::typeMark() const int VTextSection::typeMark() const
{ {
return 0x09000000; return 0x09000000;
} }
@ -145,7 +145,7 @@ VTextSection::analysis(std::shared_ptr<const IWordBase> content) const {
QString Split::typeName() const { return u8"split-mark"; } QString Split::typeName() const { return u8"split-mark"; }
int example_novel::Split::typeMark() const int Split::typeMark() const
{ {
return 0x05000000; return 0x05000000;
} }
@ -154,7 +154,7 @@ QString Split::regex() const { return u8"&"; }
QString NameSection::typeName() const { return u8"name-section"; } QString NameSection::typeName() const { return u8"name-section"; }
int example_novel::NameSection::typeMark() const int NameSection::typeMark() const
{ {
return 0x08000000; return 0x08000000;
} }
@ -180,22 +180,22 @@ std::tuple<std::shared_ptr<const IToken>, std::shared_ptr<const IWordBase> > Nam
return std::make_tuple(tinst, nullptr); return std::make_tuple(tinst, nullptr);
} }
QString example_novel::DeclareSymbo::typeName() const QString DeclareSymbo::typeName() const
{ {
return u8"ÉùÃ÷·û"; return u8"ÉùÃ÷·û";
} }
int example_novel::DeclareSymbo::typeMark() const int DeclareSymbo::typeMark() const
{ {
return 0x0A000000; return 0x0A000000;
} }
QString example_novel::DeclareSymbo::regex() const QString DeclareSymbo::regex() const
{ {
return u8"#"; return u8"#";
} }
std::tuple<std::shared_ptr<const IToken>, std::shared_ptr<const IWordBase>> example_novel::DeclareSymbo::analysis(std::shared_ptr<const IWordBase> content) const std::tuple<std::shared_ptr<const IToken>, std::shared_ptr<const IWordBase>> DeclareSymbo::analysis(std::shared_ptr<const IWordBase> content) const
{ {
auto text = content->content(); auto text = content->content();
if (content->column() != 1 && !text.startsWith(regex())) { if (content->column() != 1 && !text.startsWith(regex())) {