QtNovelUI/DesParser/LexicalBase.h

76 lines
1.3 KiB
C
Raw Normal View History

2022-11-06 00:37:50 +00:00
#pragma once
#include <QString>
#include <QList>
namespace Lex {
class LexicalBase;
/**
* .
*/
struct LexUnit
{
QString TokenType; // Token字符
QString RegExpression; // 词法解析表达式
};
/**
* .
*/
struct LexResult
{
QString Token; // Token字符
QString Text; // 内容
int StartRow, StartCol, EndRow, EndCol; // 波及范围
friend class LexicalBase;
private:
int index_at_segment;
};
/**
* .
*/
class XChar
{
public:
explicit XChar(QChar c, int row, int col);
QChar value() const;
int row() const;
int col() const;
private:
QChar value_store;
int row_index, col_index;
};
/**
* .
*/
class LexicalBase
{
public:
explicit LexicalBase(QList<LexUnit> seqence, const QString UnknownToken);
virtual ~LexicalBase() = default;
/**
* .
*
* \param row
* \param col
* \param w
* \return
*/
QList<LexResult> push(int row, int col, const QChar w);
private:
QString unknown_token;
QList<QChar> empty_seq;
QList<XChar> code_acc;
QList<LexUnit> lexical_seq;
QList<LexResult> lexical_parse(const QString &segment);
};
}