QtNovelUI/libParse/ParseFrame.h

37 lines
1.0 KiB
C++

#pragma once
#include "SyntaxBase.h"
#include "lex_foundation.h"
#include <QList>
#include <QString>
namespace Syntax
{
/**
* 基础解析器框架.
*/
class ParseFrame
{
public:
explicit ParseFrame();
virtual ~ParseFrame() = default;
QList<Parse::Result::DesNode*> analysis(Parse::Result::DocCore *doc, const QString &path);
QList<Parse::Result::DesNode*> analysisSource(Parse::Result::DocCore *doc, const QString &src);
protected:
void appendTokensDefine(QList<Lex::TokenDef> seqs, const QString &unknown_token);
void appendParser(Syntax::SyntaxParser *u);
private:
Lex::TokenReader *const tokens_in;
QString unknown_token;
QList<Lex::TokenDef *> token_seqs;
QList<SyntaxParser*> cascade_parsers;
ParseResult ParseFrame::inner_parse(QList<Lex::Token> &lex_seqence,
QList<Syntax::SyntaxParser*> parsers,
QList<Parse::Result::DesNode*> &nodes_out);
};
}