重构,组织解析类
This commit is contained in:
parent
477aa07f13
commit
53afe58730
|
@ -8,7 +8,7 @@ CONFIG -= app_bundle
|
|||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||
|
||||
SOURCES += \
|
||||
LexicalBase.cpp \
|
||||
LexFoundation.cpp \
|
||||
ParseFrame.cpp \
|
||||
StoryChainDocumentParser.cpp \
|
||||
StoryUnitDocumentParser.cpp \
|
||||
|
@ -28,7 +28,7 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin
|
|||
!isEmpty(target.path): INSTALLS += target
|
||||
|
||||
HEADERS += \
|
||||
LexicalBase.h \
|
||||
LexFoundation.h \
|
||||
ParseFrame.h \
|
||||
StoryChainDocumentParser.h \
|
||||
StoryUnitDocumentParser.h \
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
#include "LexicalBase.h"
|
||||
#include "LexFoundation.h"
|
||||
#include <tuple>
|
||||
|
||||
using namespace Lex;
|
||||
|
||||
LexicalBase::LexicalBase(QList<LexUnit> seqence, const QString UnknownToken)
|
||||
LexFoundation::LexFoundation(QList<LexDef> seqence, const QString UnknownToken)
|
||||
: unknown_token(UnknownToken), lexical_seq(seqence)
|
||||
{
|
||||
empty_seq << '\t' << '\b' << ' ' << '\r' << EOF;
|
||||
|
@ -12,7 +12,7 @@ LexicalBase::LexicalBase(QList<LexUnit> seqence, const QString UnknownToken)
|
|||
typedef int lexunit_index;
|
||||
typedef int match_start;
|
||||
|
||||
QList<LexResult> LexicalBase::push(int row, int col, const QChar w)
|
||||
QList<LexResult> LexFoundation::push(int row, int col, const QChar w)
|
||||
{
|
||||
QList<LexResult> result;
|
||||
|
||||
|
@ -44,7 +44,7 @@ QList<LexResult> LexicalBase::push(int row, int col, const QChar w)
|
|||
return mid_result;
|
||||
}
|
||||
|
||||
QList<LexResult> LexicalBase::lexical_parse(const QString & segment)
|
||||
QList<LexResult> LexFoundation::lexical_parse(const QString & segment)
|
||||
{
|
||||
// 获取匹配词法分析
|
||||
QList<LexResult> result;
|
|
@ -4,12 +4,12 @@
|
|||
#include <QList>
|
||||
|
||||
namespace Lex {
|
||||
class LexicalBase;
|
||||
class LexFoundation;
|
||||
|
||||
/**
|
||||
* 解析基准定义单元.
|
||||
*/
|
||||
struct LexUnit
|
||||
struct LexDef
|
||||
{
|
||||
QString TokenType; // Token字符
|
||||
QString RegExpression; // 词法解析表达式
|
||||
|
@ -24,7 +24,7 @@ namespace Lex {
|
|||
QString Text; // 内容
|
||||
int StartRow, StartCol, EndRow, EndCol; // 波及范围
|
||||
|
||||
friend class LexicalBase;
|
||||
friend class LexFoundation;
|
||||
private:
|
||||
int index_at_segment;
|
||||
};
|
||||
|
@ -48,11 +48,11 @@ namespace Lex {
|
|||
/**
|
||||
* 基础词法分析器.
|
||||
*/
|
||||
class LexicalBase
|
||||
class LexFoundation
|
||||
{
|
||||
public:
|
||||
explicit LexicalBase(QList<LexUnit> seqence, const QString UnknownToken);
|
||||
virtual ~LexicalBase() = default;
|
||||
explicit LexFoundation(QList<LexDef> seqence, const QString UnknownToken);
|
||||
virtual ~LexFoundation() = default;
|
||||
|
||||
/**
|
||||
* 词法分析器累积解析单个字符流.
|
||||
|
@ -69,8 +69,8 @@ namespace Lex {
|
|||
QList<QChar> empty_seq;
|
||||
|
||||
QList<XChar> code_acc;
|
||||
QList<LexUnit> lexical_seq;
|
||||
QList<LexDef> lexical_seq;
|
||||
|
||||
QList<LexResult> lexical_parse(const QString &segment);
|
||||
};
|
||||
}
|
||||
}
|
|
@ -2,17 +2,19 @@
|
|||
#include "WordsPeak.h"
|
||||
|
||||
using namespace Parse;
|
||||
using namespace Parse::Result;
|
||||
using namespace Syntax;
|
||||
using namespace Lex;
|
||||
|
||||
Parse::ParseFrame::ParseFrame() {}
|
||||
ParseFrame::ParseFrame() {}
|
||||
|
||||
QList<DesNode*> Parse::ParseFrame::analysis(DocCore*doc, const QString & path)
|
||||
QList<DesNode*> ParseFrame::analysis(DocCore*doc, const QString & path)
|
||||
{
|
||||
ForwardStream stream;
|
||||
ExStream stream;
|
||||
if (stream.initSource(path))
|
||||
return QList<DesNode*>();
|
||||
|
||||
LexicalBase token_s(this->token_seqs, this->unknown_token);
|
||||
LexFoundation token_s(this->token_seqs, this->unknown_token);
|
||||
|
||||
QList<LexResult> lex_seqence;
|
||||
std::tuple<int, int, QChar> temp;
|
||||
|
@ -42,18 +44,18 @@ QList<DesNode*> Parse::ParseFrame::analysis(DocCore*doc, const QString & path)
|
|||
return xrets;
|
||||
}
|
||||
|
||||
void Parse::ParseFrame::appendTokensDefine(QList<LexUnit> seqs, const QString & unknown_token)
|
||||
void ParseFrame::appendTokensDefine(QList<LexDef> seqs, const QString & unknown_token)
|
||||
{
|
||||
this->unknown_token = unknown_token;
|
||||
token_seqs.append(seqs);
|
||||
}
|
||||
|
||||
void Parse::ParseFrame::appendParser(SyntaxParser * u)
|
||||
void ParseFrame::appendParser(SyntaxParser * u)
|
||||
{
|
||||
cascade_parsers << u;
|
||||
}
|
||||
|
||||
Parse::ParseResult Parse::ParseFrame::inner_parse(QList<LexResult> &lex_seqence, QList<SyntaxParser*> parsers, QList<DesNode*> &nodes_out)
|
||||
ParseResult ParseFrame::inner_parse(QList<LexResult> &lex_seqence, QList<SyntaxParser*> parsers, QList<DesNode*> &nodes_out)
|
||||
{
|
||||
QList<DesNode*> nodes;
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#include <QList>
|
||||
#include "SyntaxBase.h"
|
||||
|
||||
namespace Parse
|
||||
namespace Syntax
|
||||
{
|
||||
/**
|
||||
* 基础解析器框架.
|
||||
|
@ -14,17 +14,19 @@ namespace Parse
|
|||
explicit ParseFrame();
|
||||
virtual ~ParseFrame() = default;
|
||||
|
||||
QList<DesNode*> analysis(DocCore *doc, const QString &path);
|
||||
QList<Parse::Result::DesNode*> analysis(Parse::Result::DocCore *doc, const QString &path);
|
||||
|
||||
protected:
|
||||
void appendTokensDefine(QList<Lex::LexUnit> seqs, const QString &unknown_token);
|
||||
void appendParser(SyntaxParser* u);
|
||||
void appendTokensDefine(QList<Lex::LexDef> seqs, const QString &unknown_token);
|
||||
void appendParser(Syntax::SyntaxParser* u);
|
||||
|
||||
private:
|
||||
QString unknown_token;
|
||||
QList<Lex::LexUnit> token_seqs;
|
||||
QList<SyntaxParser*> cascade_parsers;
|
||||
QList<Lex::LexDef> token_seqs;
|
||||
QList<SyntaxParser*> cascade_parsers;
|
||||
|
||||
Parse::ParseResult Parse::ParseFrame::inner_parse(QList<Lex::LexResult> &lex_seqence, QList<SyntaxParser*> parsers, QList<DesNode*> &nodes_out);
|
||||
ParseResult ParseFrame::inner_parse(QList<Lex::LexResult> &lex_seqence,
|
||||
QList<Syntax::SyntaxParser*> parsers,
|
||||
QList<Parse::Result::DesNode*> &nodes_out);
|
||||
};
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ using namespace Parse;
|
|||
using namespace Lex;
|
||||
using namespace Syntax;
|
||||
using namespace Syntax::Defines;
|
||||
using namespace Parse::Result;
|
||||
|
||||
// storychain 解析器================================================
|
||||
NodeStoryChainParser::NodeStoryChainParser(ProjectCore *core)
|
||||
|
|
|
@ -17,7 +17,7 @@ namespace Parse
|
|||
/**
|
||||
* 故事脉络节点定义.
|
||||
*/
|
||||
class NodeStoryChain : public NamedNode
|
||||
class NodeStoryChain : public Result::NamedNode
|
||||
{
|
||||
public:
|
||||
/**
|
||||
|
@ -25,7 +25,7 @@ namespace Parse
|
|||
*
|
||||
* \param src_path 源文件路径
|
||||
*/
|
||||
explicit NodeStoryChain(DocCore *doc, const QString &name);
|
||||
explicit NodeStoryChain(Result::DocCore *doc, const QString &name);
|
||||
virtual ~NodeStoryChain() = default;
|
||||
|
||||
/**
|
||||
|
@ -41,7 +41,7 @@ namespace Parse
|
|||
return 0;
|
||||
}
|
||||
virtual QString name() const override;
|
||||
virtual DocCore * document() const override;
|
||||
virtual Result::DocCore * document() const override;
|
||||
virtual int typeValue() const override;
|
||||
virtual DesNode * parent() const override;
|
||||
virtual void appendChild(DesNode * ins) override;
|
||||
|
@ -50,7 +50,7 @@ namespace Parse
|
|||
virtual QString toString() const override;
|
||||
|
||||
private:
|
||||
DocCore *const doc_store;
|
||||
Result::DocCore *const doc_store;
|
||||
QString name_store;
|
||||
QList<DesNode*> children_nodes;
|
||||
};
|
||||
|
@ -61,19 +61,19 @@ namespace Parse
|
|||
class NodeStoryChainParser : public Syntax::XSyntaxBase
|
||||
{
|
||||
public:
|
||||
NodeStoryChainParser(ProjectCore *core);
|
||||
NodeStoryChainParser(Result::ProjectCore *core);
|
||||
virtual ~NodeStoryChainParser() = default;
|
||||
|
||||
ProjectCore* project() const;
|
||||
Result::ProjectCore* project() const;
|
||||
|
||||
private:
|
||||
ProjectCore *pjt_ref;
|
||||
Result::ProjectCore *pjt_ref;
|
||||
};
|
||||
|
||||
/**
|
||||
* 故事节点.
|
||||
*/
|
||||
class NodeStoryPoint : public NamedNode
|
||||
class NodeStoryPoint : public Result::NamedNode
|
||||
{
|
||||
public:
|
||||
explicit NodeStoryPoint(NodeStoryChain *chain, const QString &name);
|
||||
|
@ -90,7 +90,7 @@ namespace Parse
|
|||
inline virtual int depth() const override {
|
||||
return chain_store->depth() + 1;
|
||||
}
|
||||
virtual DocCore * document() const override;
|
||||
virtual Result::DocCore * document() const override;
|
||||
virtual int typeValue() const override;
|
||||
virtual DesNode * parent() const override;
|
||||
virtual void appendChild(DesNode * ins) override;
|
||||
|
@ -115,7 +115,7 @@ namespace Parse
|
|||
virtual ~NodeStoryPointParser() = default;
|
||||
|
||||
NodeStoryChainParser* storyChainParser() const;
|
||||
virtual DocCore* docRef() const override;
|
||||
virtual Result::DocCore* docRef() const override;
|
||||
|
||||
private:
|
||||
NodeStoryChainParser *const parent_parser;
|
||||
|
@ -124,7 +124,7 @@ namespace Parse
|
|||
/**
|
||||
* 节点描述内容节点.
|
||||
*/
|
||||
class NodeStoryDesGroup : public DesNode
|
||||
class NodeStoryDesGroup : public Result::DesNode
|
||||
{
|
||||
public:
|
||||
NodeStoryDesGroup(DesNode *parent_refer);
|
||||
|
@ -134,7 +134,7 @@ namespace Parse
|
|||
inline virtual int depth() const override {
|
||||
return parent_refer->depth() + 1;
|
||||
}
|
||||
virtual DocCore * document() const override;
|
||||
virtual Result::DocCore * document() const override;
|
||||
virtual int typeValue() const override;
|
||||
virtual DesNode * parent() const override;
|
||||
virtual void appendChild(DesNode * ins) override;
|
||||
|
@ -160,7 +160,7 @@ namespace Parse
|
|||
/**
|
||||
* 描述内容文字块.
|
||||
*/
|
||||
class NodeStoryDesBlock : public DesNode
|
||||
class NodeStoryDesBlock : public Result::DesNode
|
||||
{
|
||||
public:
|
||||
explicit NodeStoryDesBlock(DesNode *parent_node, const QString &text);
|
||||
|
@ -170,7 +170,7 @@ namespace Parse
|
|||
inline virtual int depth() const override {
|
||||
return parent_refer->depth() + 1;
|
||||
}
|
||||
virtual DocCore * document() const override;
|
||||
virtual Result::DocCore * document() const override;
|
||||
virtual int typeValue() const override;
|
||||
virtual DesNode * parent() const override;
|
||||
virtual void appendChild(DesNode * ins) override;
|
||||
|
@ -183,10 +183,10 @@ namespace Parse
|
|||
QString text_block;
|
||||
};
|
||||
|
||||
class StoryChainDocumentParser : public ParseFrame
|
||||
class StoryChainDocumentParser : public Syntax::ParseFrame
|
||||
{
|
||||
public:
|
||||
StoryChainDocumentParser(ProjectCore *pjt);
|
||||
StoryChainDocumentParser(Result::ProjectCore *pjt);
|
||||
virtual ~StoryChainDocumentParser() = default;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include "StoryUnitDocumentParser.h"
|
||||
|
||||
using namespace Parse;
|
||||
using namespace Parse::Result;
|
||||
using namespace Lex;
|
||||
using namespace Syntax;
|
||||
using namespace Syntax::Defines;
|
||||
|
@ -95,7 +96,7 @@ QString NodeStoryFragment::toString() const
|
|||
QString rets = QString(depth(), ' ') + "#情节 " + name() + "{";
|
||||
for (auto cin : children_nodes)
|
||||
rets += "\n" + QString(depth(), ' ') + cin->toString();
|
||||
return rets + "}";
|
||||
return rets + "\n"+QString(depth(), ' ') + "}";
|
||||
}
|
||||
|
||||
QString NodeStoryFragment::name() const
|
||||
|
|
|
@ -7,10 +7,10 @@ namespace Parse {
|
|||
/**
|
||||
* 故事单元.
|
||||
*/
|
||||
class NodeStoryUnit : public NamedNode
|
||||
class NodeStoryUnit : public Result::NamedNode
|
||||
{
|
||||
public:
|
||||
explicit NodeStoryUnit(DocCore *doc, const QString &name);
|
||||
explicit NodeStoryUnit(Result::DocCore *doc, const QString &name);
|
||||
virtual ~NodeStoryUnit() = default;
|
||||
|
||||
// 通过 NamedNode
|
||||
|
@ -20,7 +20,7 @@ namespace Parse {
|
|||
inline virtual int depth() const override {
|
||||
return 0;
|
||||
}
|
||||
virtual DocCore * document() const override;
|
||||
virtual Result::DocCore * document() const override;
|
||||
virtual int typeValue() const override;
|
||||
virtual DesNode * parent() const override;
|
||||
virtual void appendChild(DesNode * ins) override;
|
||||
|
@ -29,7 +29,7 @@ namespace Parse {
|
|||
virtual QString toString() const override;
|
||||
|
||||
private:
|
||||
DocCore *doc_ref;
|
||||
Result::DocCore *doc_ref;
|
||||
QString name_store;
|
||||
|
||||
QList<DesNode*> children_nodes;
|
||||
|
@ -39,18 +39,18 @@ namespace Parse {
|
|||
class NodeStoryUnitParser : public Syntax::XSyntaxBase
|
||||
{
|
||||
public:
|
||||
NodeStoryUnitParser(ProjectCore *core);
|
||||
NodeStoryUnitParser(Result::ProjectCore *core);
|
||||
|
||||
ProjectCore* project() const;
|
||||
Result::ProjectCore* project() const;
|
||||
|
||||
private:
|
||||
ProjectCore *const pjt_core;
|
||||
Result::ProjectCore *const pjt_core;
|
||||
};
|
||||
|
||||
/**
|
||||
* 故事情节节点.
|
||||
*/
|
||||
class NodeStoryFragment : public NamedNode
|
||||
class NodeStoryFragment : public Result::NamedNode
|
||||
{
|
||||
public:
|
||||
explicit NodeStoryFragment(NodeStoryUnit* unit, const QString &name);
|
||||
|
@ -60,7 +60,7 @@ namespace Parse {
|
|||
inline virtual int depth() const override {
|
||||
return unit_ins->depth() + 1;
|
||||
}
|
||||
virtual DocCore * document() const override;
|
||||
virtual Result::DocCore * document() const override;
|
||||
virtual int typeValue() const override;
|
||||
virtual DesNode * parent() const override;
|
||||
virtual void appendChild(DesNode * ins) override;
|
||||
|
@ -85,7 +85,7 @@ namespace Parse {
|
|||
NodeStoryFragmentParser(NodeStoryUnitParser *pparser);
|
||||
|
||||
NodeStoryUnitParser * nodeStoryUnitParser() const;
|
||||
DocCore * docRef() const;
|
||||
Result::DocCore * docRef() const;
|
||||
|
||||
private:
|
||||
NodeStoryUnitParser *const parent_parser;
|
||||
|
@ -94,7 +94,7 @@ namespace Parse {
|
|||
/**
|
||||
* 故事脉络节点引用.
|
||||
*/
|
||||
class NodeStoryPointRefer : public DesNode
|
||||
class NodeStoryPointRefer : public Result::DesNode
|
||||
{
|
||||
public:
|
||||
explicit NodeStoryPointRefer(DesNode *parent, const QString &chain, const QString &point);
|
||||
|
@ -104,7 +104,7 @@ namespace Parse {
|
|||
inline virtual int depth() const override {
|
||||
return parent_ins->depth() + 1;
|
||||
}
|
||||
virtual DocCore * document() const override;
|
||||
virtual Result::DocCore * document() const override;
|
||||
virtual int typeValue() const override;
|
||||
virtual DesNode * parent() const override;
|
||||
virtual void appendChild(DesNode * ins) override;
|
||||
|
@ -148,8 +148,12 @@ namespace Parse {
|
|||
|
||||
/**
|
||||
* 故事情节有序注释,单独解析
|
||||
* #注解 注解名 序列名 值 {
|
||||
* 注解段落
|
||||
* 注解段落
|
||||
* }
|
||||
*/
|
||||
class NodeStoryFragmentComment : public NamedNode
|
||||
class NodeStoryFragmentComment : public Result::NamedNode
|
||||
{
|
||||
public:
|
||||
NodeStoryFragmentComment(DesNode *parent, const QString &order, const QString &name);
|
||||
|
@ -162,7 +166,7 @@ namespace Parse {
|
|||
{
|
||||
return parent_ins->depth() + 1;
|
||||
}
|
||||
virtual DocCore * document() const override;
|
||||
virtual Result::DocCore * document() const override;
|
||||
virtual int typeValue() const override;
|
||||
virtual DesNode * parent() const override;
|
||||
virtual void appendChild(DesNode * ins) override;
|
||||
|
@ -179,9 +183,9 @@ namespace Parse {
|
|||
};
|
||||
|
||||
|
||||
class StoryUnitDocumentParser : public ParseFrame
|
||||
class StoryUnitDocumentParser : public Syntax::ParseFrame
|
||||
{
|
||||
public:
|
||||
StoryUnitDocumentParser(ProjectCore *ins);
|
||||
StoryUnitDocumentParser(Result::ProjectCore *ins);
|
||||
};
|
||||
}
|
||||
|
|
|
@ -3,127 +3,131 @@
|
|||
|
||||
using namespace Parse;
|
||||
using namespace Lex;
|
||||
using namespace Syntax;
|
||||
using namespace Parse::Result;
|
||||
|
||||
class Unknown : public DesNode
|
||||
{
|
||||
public:
|
||||
explicit Unknown(DocCore *ins)
|
||||
: doc_store(ins) {}
|
||||
namespace Parse {
|
||||
class Unknown : public DesNode
|
||||
{
|
||||
public:
|
||||
explicit Unknown(DocCore *ins)
|
||||
: doc_store(ins) {}
|
||||
|
||||
// 通过 DesNode 继承
|
||||
virtual int depth() const override
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
virtual DocCore * document() const override
|
||||
{
|
||||
return doc_store;
|
||||
}
|
||||
virtual int typeValue() const override
|
||||
{
|
||||
return NODE_UNKNOWNHOST;
|
||||
}
|
||||
virtual DesNode * parent() const override
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
virtual void appendChild(DesNode * ins) override
|
||||
{
|
||||
}
|
||||
virtual QList<DesNode*> children() const override
|
||||
{
|
||||
return QList<DesNode*>();
|
||||
}
|
||||
virtual bool check(QList<QString>& reasons) const override
|
||||
{
|
||||
return true;
|
||||
}
|
||||
virtual QString toString() const override
|
||||
{
|
||||
return QString();
|
||||
}
|
||||
private:
|
||||
DocCore *const doc_store;
|
||||
};
|
||||
// 通过 DesNode 继承
|
||||
virtual int depth() const override
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
virtual DocCore * document() const override
|
||||
{
|
||||
return doc_store;
|
||||
}
|
||||
virtual int typeValue() const override
|
||||
{
|
||||
return NODE_UNKNOWNHOST;
|
||||
}
|
||||
virtual DesNode * parent() const override
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
virtual void appendChild(DesNode *) override
|
||||
{
|
||||
}
|
||||
virtual QList<DesNode*> children() const override
|
||||
{
|
||||
return QList<DesNode*>();
|
||||
}
|
||||
virtual bool check(QList<QString>&) const override
|
||||
{
|
||||
return true;
|
||||
}
|
||||
virtual QString toString() const override
|
||||
{
|
||||
return QString();
|
||||
}
|
||||
private:
|
||||
DocCore *const doc_store;
|
||||
};
|
||||
|
||||
Parse::Words::Words(DesNode* host, DocCore *doc, const QString & value, int row, int col)
|
||||
: value_store(value), row_store(row), col_store(col)
|
||||
}
|
||||
Words::Words(Result::DesNode *host, DocCore *doc, const QString & value, int row, int col)
|
||||
: value_store(value), row_store(row), col_store(col), desnode_store(host), docpresent_store(doc)
|
||||
{
|
||||
}
|
||||
|
||||
int Parse::Words::row() const
|
||||
int Words::row() const
|
||||
{
|
||||
return row_store;
|
||||
}
|
||||
|
||||
int Parse::Words::column() const
|
||||
int Words::column() const
|
||||
{
|
||||
return col_store;
|
||||
}
|
||||
|
||||
int Parse::Words::length() const
|
||||
int Words::length() const
|
||||
{
|
||||
return value_store.length();
|
||||
}
|
||||
|
||||
DesNode * Parse::Words::host() const
|
||||
DesNode * Words::host() const
|
||||
{
|
||||
return desnode_store;
|
||||
}
|
||||
|
||||
DocCore * Parse::Words::doc() const
|
||||
DocCore * Words::doc() const
|
||||
{
|
||||
return docpresent_store;
|
||||
}
|
||||
|
||||
QString Parse::Words::toString() const
|
||||
QString Words::toString() const
|
||||
{
|
||||
return value_store;
|
||||
}
|
||||
|
||||
Parse::DocCore::DocCore(ProjectCore * core, const QString & path)
|
||||
: core_store(core), file_path_store(path), unknown_host(new Unknown(this))
|
||||
DocCore::DocCore(ProjectCore * core, const QString & path)
|
||||
: unknown_host(new Unknown(this)), core_store(core), file_path_store(path)
|
||||
{
|
||||
}
|
||||
|
||||
DesNode * Parse::DocCore::unknowns() const
|
||||
DesNode * DocCore::unknowns() const
|
||||
{
|
||||
return unknown_host;
|
||||
}
|
||||
|
||||
ProjectCore * Parse::DocCore::project() const
|
||||
ProjectCore * DocCore::project() const
|
||||
{
|
||||
return core_store;
|
||||
}
|
||||
|
||||
void Parse::DocCore::rename(const QString & new_name)
|
||||
void DocCore::rename(const QString & new_name)
|
||||
{
|
||||
file_path_store = new_name;
|
||||
}
|
||||
|
||||
QString Parse::DocCore::filePath() const
|
||||
QString DocCore::filePath() const
|
||||
{
|
||||
return file_path_store;
|
||||
}
|
||||
|
||||
QString Parse::DocCore::fileName() const
|
||||
QString DocCore::fileName() const
|
||||
{
|
||||
return QFileInfo(file_path_store).fileName();
|
||||
}
|
||||
|
||||
void Parse::DocCore::clear()
|
||||
void DocCore::clear()
|
||||
{
|
||||
nodes_store.clear();
|
||||
}
|
||||
|
||||
int Parse::DocCore::append(Words * ins)
|
||||
int DocCore::append(Words * ins)
|
||||
{
|
||||
nodes_store << ins;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Words * Parse::DocCore::getWords(int row, int col) const
|
||||
Words * DocCore::getWords(int row, int col) const
|
||||
{
|
||||
for (auto it : nodes_store)
|
||||
if (it->row() == row && it->column() <= col && it->column() + it->length() >= col)
|
||||
|
|
|
@ -3,342 +3,354 @@
|
|||
#include <QString>
|
||||
#include <functional>
|
||||
#include <QList>
|
||||
#include "LexicalBase.h"
|
||||
#include "LexFoundation.h"
|
||||
#include "comndef.h"
|
||||
|
||||
namespace Parse
|
||||
{
|
||||
class NamedNode;
|
||||
class DocCore;
|
||||
class ProjectCore;
|
||||
class DesNode;
|
||||
|
||||
/**
|
||||
* 词语块,可以通过文档未知直接获取.
|
||||
*/
|
||||
class Words
|
||||
{
|
||||
public:
|
||||
explicit Words(DesNode* host, DocCore *doc, const QString &value, int row, int col);
|
||||
virtual ~Words() = default;
|
||||
|
||||
/**
|
||||
* 起始行位置.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
virtual int row() const;
|
||||
|
||||
/**
|
||||
* 起始列位置.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
virtual int column() const;
|
||||
|
||||
/**
|
||||
* 次愉快长度.
|
||||
*
|
||||
* \return 字符数量
|
||||
*/
|
||||
virtual int length() const;
|
||||
|
||||
/**
|
||||
* 获取依托节点,悬空节点返回nullptr.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
virtual DesNode* host() const;
|
||||
|
||||
/**
|
||||
* 隶属文档实例.
|
||||
*
|
||||
* \return 实例
|
||||
*/
|
||||
virtual DocCore* doc() const;
|
||||
|
||||
/**
|
||||
* 获取文本内容.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
virtual QString toString() const;
|
||||
|
||||
private:
|
||||
QString value_store;
|
||||
int row_store, col_store;
|
||||
DesNode *desnode_store;
|
||||
DocCore *docpresent_store;
|
||||
};
|
||||
|
||||
/**
|
||||
* 描述性的节点,如文本节点和引用节点.
|
||||
*/
|
||||
class DesNode
|
||||
{
|
||||
public:
|
||||
virtual ~DesNode() = default;
|
||||
|
||||
/**
|
||||
* 节点树深度,根节点深度为0
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
virtual int depth() const = 0;
|
||||
/**
|
||||
* 承载文档源实例.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
virtual DocCore* document() const = 0;
|
||||
|
||||
/**
|
||||
* 类型标记.
|
||||
*
|
||||
* \return 标记值
|
||||
*/
|
||||
virtual int typeValue() const = 0;
|
||||
|
||||
/**
|
||||
* 获取该节点的父节点.
|
||||
*
|
||||
* \return 父节点实例
|
||||
*/
|
||||
virtual DesNode* parent() const = 0;
|
||||
|
||||
/**
|
||||
* 添加子节点
|
||||
*
|
||||
* \param ins 节点实例
|
||||
*/
|
||||
virtual void appendChild(DesNode *ins) = 0;
|
||||
|
||||
/**
|
||||
* 获取所有子节点
|
||||
*
|
||||
* \return 子节点集合
|
||||
*/
|
||||
virtual QList<DesNode*> children() const = 0;
|
||||
|
||||
/**
|
||||
* 检查项目错误.
|
||||
*
|
||||
* \return true,没有错误
|
||||
*/
|
||||
virtual bool check(QList<QString> &reasons) const = 0;
|
||||
|
||||
/**
|
||||
* 返回本节点的代表文本内容.
|
||||
*
|
||||
* \return 文本内容
|
||||
*/
|
||||
virtual QString toString() const = 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* 声明描述节点.
|
||||
*/
|
||||
class NamedNode : public DesNode
|
||||
{
|
||||
public:
|
||||
virtual ~NamedNode() = default;
|
||||
|
||||
/**
|
||||
* 获取此节点的名称.
|
||||
*
|
||||
* \return 名称字符串
|
||||
*/
|
||||
virtual QString name() const = 0;
|
||||
|
||||
};
|
||||
namespace Result {
|
||||
class ProjectCore;
|
||||
class DesNode;
|
||||
class NamedNode;
|
||||
class DocCore;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 文档实例.
|
||||
*/
|
||||
class DocCore
|
||||
{
|
||||
public:
|
||||
explicit DocCore(ProjectCore* core, const QString &path);
|
||||
virtual ~DocCore() = default;
|
||||
namespace Result
|
||||
{
|
||||
/**
|
||||
* 词语块,可以通过文档未知直接获取.
|
||||
*/
|
||||
class Words
|
||||
{
|
||||
public:
|
||||
explicit Words(Result::DesNode* host, Result::DocCore *doc, const QString &value, int row, int col);
|
||||
virtual ~Words() = default;
|
||||
|
||||
/**
|
||||
* 无法识别的节点归并.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
DesNode* unknowns() const;
|
||||
/**
|
||||
* 起始行位置.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
virtual int row() const;
|
||||
|
||||
/**
|
||||
* 项目实例.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
ProjectCore* project() const;
|
||||
/**
|
||||
* 起始列位置.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
virtual int column() const;
|
||||
|
||||
/**
|
||||
* 重命名指向文件.
|
||||
*
|
||||
* \param new_name 新路径
|
||||
*/
|
||||
void rename(const QString &new_name);
|
||||
/**
|
||||
* 次愉快长度.
|
||||
*
|
||||
* \return 字符数量
|
||||
*/
|
||||
virtual int length() const;
|
||||
|
||||
/**
|
||||
* 源文件路径.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
QString filePath() const;
|
||||
/**
|
||||
* 获取依托节点,悬空节点返回nullptr.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
virtual Result::DesNode* host() const;
|
||||
|
||||
/**
|
||||
* 文件名.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
QString fileName() const;
|
||||
/**
|
||||
* 隶属文档实例.
|
||||
*
|
||||
* \return 实例
|
||||
*/
|
||||
virtual Result::DocCore* doc() const;
|
||||
|
||||
/**
|
||||
* 清除所有的词语节点和内容节点.
|
||||
*/
|
||||
void clear();
|
||||
/**
|
||||
* 获取文本内容.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
virtual QString toString() const;
|
||||
|
||||
/**
|
||||
* 对文档实例添加节点实例.
|
||||
*
|
||||
* \param ins 节点实例
|
||||
* \return 0 - 添加成功
|
||||
*/
|
||||
int append(Words *ins);
|
||||
|
||||
private:
|
||||
QString value_store;
|
||||
int row_store, col_store;
|
||||
Result::DesNode *desnode_store;
|
||||
Result::DocCore *docpresent_store;
|
||||
};
|
||||
|
||||
/**
|
||||
* 通过位置获取词语.
|
||||
*
|
||||
* \param row 行位置
|
||||
* \param col 列位置
|
||||
* \return 字符号
|
||||
*/
|
||||
Words* getWords(int row, int col) const;
|
||||
/**
|
||||
* 描述性的节点,如文本节点和引用节点.
|
||||
*/
|
||||
class DesNode
|
||||
{
|
||||
public:
|
||||
virtual ~DesNode() = default;
|
||||
|
||||
private:
|
||||
DesNode *const unknown_host;
|
||||
ProjectCore *const core_store;
|
||||
QString file_path_store;
|
||||
QList<Words*> nodes_store;
|
||||
};
|
||||
/**
|
||||
* 节点树深度,根节点深度为0
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
virtual int depth() const = 0;
|
||||
/**
|
||||
* 承载文档源实例.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
virtual DocCore* document() const = 0;
|
||||
|
||||
/**
|
||||
* 项目实例.
|
||||
*/
|
||||
class ProjectCore
|
||||
{
|
||||
private:
|
||||
QString name_store;
|
||||
/**
|
||||
* 类型标记.
|
||||
*
|
||||
* \return 标记值
|
||||
*/
|
||||
virtual int typeValue() const = 0;
|
||||
|
||||
public:
|
||||
explicit ProjectCore(const QString &name);
|
||||
virtual ~ProjectCore();
|
||||
/**
|
||||
* 获取该节点的父节点.
|
||||
*
|
||||
* \return 父节点实例
|
||||
*/
|
||||
virtual DesNode* parent() const = 0;
|
||||
|
||||
/**
|
||||
* 获取文档内存实例,如果不存在指定实例,则新建实例.
|
||||
*
|
||||
* \param file_path 文档路径
|
||||
* \return 实例
|
||||
*/
|
||||
virtual DocCore* queryDocument(const QString &file_path) const;
|
||||
virtual void replaceDocument(DocCore *ins);
|
||||
/**
|
||||
* 添加子节点
|
||||
*
|
||||
* \param ins 节点实例
|
||||
*/
|
||||
virtual void appendChild(DesNode *ins) = 0;
|
||||
|
||||
virtual DesNode* queryChain(const QString & name) const;
|
||||
virtual DesNode* queryPoint(NamedNode* chain, const QString &name) const;
|
||||
/**
|
||||
* 获取所有子节点
|
||||
*
|
||||
* \return 子节点集合
|
||||
*/
|
||||
virtual QList<DesNode*> children() const = 0;
|
||||
|
||||
virtual DesNode* queryUnit(const QString &name) const;
|
||||
virtual DesNode* queryFragment(NamedNode *unit, const QString &name) const;
|
||||
/**
|
||||
* 检查项目错误.
|
||||
*
|
||||
* \return true,没有错误
|
||||
*/
|
||||
virtual bool check(QList<QString> &reasons) const = 0;
|
||||
|
||||
/**
|
||||
* 查询指定顺序下的节点序列.
|
||||
*
|
||||
* \param type 序列名称
|
||||
* \param unit 指定单元下的序列,nullptr代表全局范围
|
||||
* \return
|
||||
*/
|
||||
virtual QList<NamedNode*> queryFragmentsOrderby(const QString &type, NamedNode* unit = nullptr) const;
|
||||
/**
|
||||
* 返回本节点的代表文本内容.
|
||||
*
|
||||
* \return 文本内容
|
||||
*/
|
||||
virtual QString toString() const = 0;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* 解析结果标志.
|
||||
*/
|
||||
enum class ParseResult
|
||||
{
|
||||
SelfManipulate = 1,
|
||||
EnterNext = 2,
|
||||
Completed = 3,
|
||||
Failed = 4,
|
||||
};
|
||||
/**
|
||||
* 声明描述节点.
|
||||
*/
|
||||
class NamedNode : public Result::DesNode
|
||||
{
|
||||
public:
|
||||
virtual ~NamedNode() = default;
|
||||
|
||||
/**
|
||||
* 解析器接口.
|
||||
*/
|
||||
class SyntaxParser
|
||||
{
|
||||
public:
|
||||
virtual ~SyntaxParser() = default;
|
||||
/**
|
||||
* 获取此节点的名称.
|
||||
*
|
||||
* \return 名称字符串
|
||||
*/
|
||||
virtual QString name() const = 0;
|
||||
|
||||
/**
|
||||
* 设置当前活动的Doc实例.
|
||||
*
|
||||
* \param ins
|
||||
*/
|
||||
virtual void docActive(DocCore *ins) = 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* 当前指向的文档.
|
||||
*
|
||||
* \return 文档实例
|
||||
*/
|
||||
virtual DocCore* docRef() const = 0;
|
||||
/**
|
||||
* 适配当前解析.
|
||||
*
|
||||
* \param seqs
|
||||
* \return
|
||||
*/
|
||||
virtual bool applied(const QList<Lex::LexResult>& seqs) = 0;
|
||||
/**
|
||||
* 文档实例.
|
||||
*/
|
||||
class DocCore
|
||||
{
|
||||
public:
|
||||
explicit DocCore(ProjectCore* core, const QString &path);
|
||||
virtual ~DocCore() = default;
|
||||
|
||||
/**
|
||||
* 重置解析器
|
||||
*/
|
||||
virtual void reset() = 0;
|
||||
/**
|
||||
* 无法识别的节点归并.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
Result::DesNode* unknowns() const;
|
||||
|
||||
/**
|
||||
* 针对性的解析当前Token序列,对已经解析过的序列做摘除处理,返回下一步可能用到的解析器列表。
|
||||
*
|
||||
* \param seqs 标记序列
|
||||
* \param next_ps 下一步需要用到的解析器
|
||||
* \return 解析操作类型
|
||||
*/
|
||||
virtual ParseResult parse(QList<Lex::LexResult>& seqs)= 0;
|
||||
/**
|
||||
* 项目实例.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
ProjectCore* project() const;
|
||||
|
||||
/**
|
||||
* 子解析器集合.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
virtual QList<SyntaxParser*> children() const = 0;
|
||||
/**
|
||||
* 重命名指向文件.
|
||||
*
|
||||
* \param new_name 新路径
|
||||
*/
|
||||
void rename(const QString &new_name);
|
||||
|
||||
/**
|
||||
* 当前聚焦的节点.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
virtual DesNode* currNode() const = 0;
|
||||
/**
|
||||
* 源文件路径.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
QString filePath() const;
|
||||
|
||||
public:
|
||||
/**
|
||||
* 设置子元素解析器,内部元素解析器集合.
|
||||
*
|
||||
* \param parsers 解析器集合
|
||||
*/
|
||||
virtual void addChild(QList<SyntaxParser*> parsers) = 0;
|
||||
};
|
||||
/**
|
||||
* 文件名.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
QString fileName() const;
|
||||
|
||||
/**
|
||||
* 清除所有的词语节点和内容节点.
|
||||
*/
|
||||
void clear();
|
||||
|
||||
/**
|
||||
* 对文档实例添加节点实例.
|
||||
*
|
||||
* \param ins 节点实例
|
||||
* \return 0 - 添加成功
|
||||
*/
|
||||
int append(Words *ins);
|
||||
|
||||
|
||||
/**
|
||||
* 通过位置获取词语.
|
||||
*
|
||||
* \param row 行位置
|
||||
* \param col 列位置
|
||||
* \return 字符号
|
||||
*/
|
||||
Words* getWords(int row, int col) const;
|
||||
|
||||
private:
|
||||
Result::DesNode *const unknown_host;
|
||||
ProjectCore *const core_store;
|
||||
QString file_path_store;
|
||||
QList<Words*> nodes_store;
|
||||
};
|
||||
|
||||
/**
|
||||
* 项目实例.
|
||||
*/
|
||||
class ProjectCore
|
||||
{
|
||||
private:
|
||||
QString name_store;
|
||||
|
||||
public:
|
||||
explicit ProjectCore(const QString &name);
|
||||
virtual ~ProjectCore();
|
||||
|
||||
/**
|
||||
* 获取文档内存实例,如果不存在指定实例,则新建实例.
|
||||
*
|
||||
* \param file_path 文档路径
|
||||
* \return 实例
|
||||
*/
|
||||
virtual Parse::Result::DocCore* queryDocument(const QString &file_path) const;
|
||||
virtual void replaceDocument(Parse::Result::DocCore *ins);
|
||||
|
||||
virtual Parse::Result::DesNode* queryChain(const QString & name) const;
|
||||
virtual Parse::Result::DesNode* queryPoint(Parse::Result::NamedNode* chain, const QString &name) const;
|
||||
|
||||
virtual Parse::Result::DesNode* queryUnit(const QString &name) const;
|
||||
virtual Parse::Result::DesNode* queryFragment(Parse::Result::NamedNode *unit, const QString &name) const;
|
||||
|
||||
/**
|
||||
* 查询指定顺序下的节点序列.
|
||||
*
|
||||
* \param type 序列名称
|
||||
* \param unit 指定单元下的序列,nullptr代表全局范围
|
||||
* \return
|
||||
*/
|
||||
virtual QList<Parse::Result::NamedNode*> queryFragmentsOrderby(const QString &type, Parse::Result::NamedNode* unit = nullptr) const;
|
||||
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
namespace Syntax {
|
||||
|
||||
|
||||
/**
|
||||
* 解析结果标志.
|
||||
*/
|
||||
enum class ParseResult
|
||||
{
|
||||
SelfManipulate = 1,
|
||||
EnterNext = 2,
|
||||
Completed = 3,
|
||||
Failed = 4,
|
||||
};
|
||||
|
||||
/**
|
||||
* 解析器接口.
|
||||
*/
|
||||
class SyntaxParser
|
||||
{
|
||||
public:
|
||||
virtual ~SyntaxParser() = default;
|
||||
|
||||
/**
|
||||
* 设置当前活动的Doc实例.
|
||||
*
|
||||
* \param ins
|
||||
*/
|
||||
virtual void docActive(Parse::Result::DocCore *ins) = 0;
|
||||
|
||||
/**
|
||||
* 当前指向的文档.
|
||||
*
|
||||
* \return 文档实例
|
||||
*/
|
||||
virtual Parse::Result::DocCore* docRef() const = 0;
|
||||
/**
|
||||
* 适配当前解析.
|
||||
*
|
||||
* \param seqs
|
||||
* \return
|
||||
*/
|
||||
virtual bool applied(const QList<Lex::LexResult>& seqs) = 0;
|
||||
|
||||
/**
|
||||
* 重置解析器
|
||||
*/
|
||||
virtual void reset() = 0;
|
||||
|
||||
/**
|
||||
* 针对性的解析当前Token序列,对已经解析过的序列做摘除处理,返回下一步可能用到的解析器列表。
|
||||
*
|
||||
* \param seqs 标记序列
|
||||
* \param next_ps 下一步需要用到的解析器
|
||||
* \return 解析操作类型
|
||||
*/
|
||||
virtual ParseResult parse(QList<Lex::LexResult>& seqs)= 0;
|
||||
|
||||
/**
|
||||
* 子解析器集合.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
virtual QList<SyntaxParser*> children() const = 0;
|
||||
|
||||
/**
|
||||
* 当前聚焦的节点.
|
||||
*
|
||||
* \return
|
||||
*/
|
||||
virtual Parse::Result::DesNode* currNode() const = 0;
|
||||
|
||||
public:
|
||||
/**
|
||||
* 设置子元素解析器,内部元素解析器集合.
|
||||
*
|
||||
* \param parsers 解析器集合
|
||||
*/
|
||||
virtual void addChild(QList<SyntaxParser*> parsers) = 0;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
#include "WordsPeak.h"
|
||||
#include <QDebug>
|
||||
|
||||
using namespace Parse;
|
||||
using namespace Lex;
|
||||
|
||||
ForwardStream::ForwardStream() :file_target(nullptr), text_input(nullptr),
|
||||
ExStream::ExStream() :file_target(nullptr), text_input(nullptr),
|
||||
current_line(""), current_row(-1), current_col(0) {}
|
||||
|
||||
ForwardStream::~ForwardStream() {
|
||||
ExStream::~ExStream() {
|
||||
if (file_target)
|
||||
delete file_target;
|
||||
if (text_input)
|
||||
delete text_input;
|
||||
}
|
||||
|
||||
int ForwardStream::initSource(const QString & path)
|
||||
int ExStream::initSource(const QString & path)
|
||||
{
|
||||
if (file_target)
|
||||
delete file_target;
|
||||
|
@ -31,7 +31,7 @@ int ForwardStream::initSource(const QString & path)
|
|||
return 0;
|
||||
}
|
||||
|
||||
std::tuple<ForwardStream::n_row, ForwardStream::n_col, QChar> Parse::ForwardStream::read()
|
||||
std::tuple<ExStream::n_row, ExStream::n_col, QChar> ExStream::read()
|
||||
{
|
||||
if (current_col >= current_line.length()) {
|
||||
if (!text_input->atEnd()) {
|
||||
|
|
|
@ -4,14 +4,14 @@
|
|||
#include <QFile>
|
||||
#include <tuple>
|
||||
|
||||
namespace Parse {
|
||||
class ForwardStream
|
||||
namespace Lex {
|
||||
class ExStream
|
||||
{
|
||||
public:
|
||||
typedef int n_row;
|
||||
typedef int n_col;
|
||||
explicit ForwardStream();
|
||||
virtual ~ForwardStream();
|
||||
explicit ExStream();
|
||||
virtual ~ExStream();
|
||||
|
||||
/**
|
||||
* 初始化文件指向.
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include "XSyntaxBase.h"
|
||||
|
||||
using namespace Parse;
|
||||
using namespace Parse::Result;
|
||||
using namespace Syntax;
|
||||
using namespace Lex;
|
||||
using namespace Defines;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#include <QString>
|
||||
#include <QList>
|
||||
#include <QHash>
|
||||
#include "LexicalBase.h"
|
||||
#include "LexFoundation.h"
|
||||
#include "SyntaxBase.h"
|
||||
|
||||
namespace Syntax
|
||||
|
@ -178,7 +178,7 @@ namespace Syntax
|
|||
{
|
||||
public:
|
||||
ParseRule(XSyntaxBase *host, const QString &rule_name, unsigned short level,
|
||||
std::function<Parse::ParseResult(const QList<Lex::LexResult>&, int)>);
|
||||
std::function<ParseResult(const QList<Lex::LexResult>&, int)>);
|
||||
virtual ~ParseRule() = default;
|
||||
|
||||
int level() const;
|
||||
|
@ -186,7 +186,7 @@ namespace Syntax
|
|||
|
||||
void addExpression(const QString &name, const QList<Defines::Elm> &_defines);
|
||||
std::tuple<bool, int> tokensMatch(const QList<Lex::LexResult> &token) const;
|
||||
Parse::ParseResult syntaxTrigger(const QList<Lex::LexResult>& srcs, int count);
|
||||
ParseResult syntaxTrigger(const QList<Lex::LexResult>& srcs, int count);
|
||||
|
||||
private:
|
||||
XSyntaxBase *const host_ins;
|
||||
|
@ -194,7 +194,7 @@ namespace Syntax
|
|||
QString name_store;
|
||||
QList<Expression*> expression_list;
|
||||
|
||||
std::function<Parse::ParseResult(const QList<Lex::LexResult>&, int)> exc_store;
|
||||
std::function<ParseResult(const QList<Lex::LexResult>&, int)> exc_store;
|
||||
};
|
||||
|
||||
|
||||
|
@ -210,7 +210,7 @@ namespace Syntax
|
|||
/**
|
||||
* 基础解析器模型.
|
||||
*/
|
||||
class XSyntaxBase : public Parse::SyntaxParser
|
||||
class XSyntaxBase : public Syntax::SyntaxParser
|
||||
{
|
||||
public:
|
||||
explicit XSyntaxBase(const QString §ion, MatchType type = MatchType::Entirely);
|
||||
|
@ -219,19 +219,19 @@ namespace Syntax
|
|||
Element *get_element(const QString &name);
|
||||
|
||||
// 通过 Parse::SyntaxParser 继承
|
||||
virtual void docActive(Parse::DocCore *ins) override;
|
||||
virtual Parse::DocCore *docRef() const override;
|
||||
virtual void docActive(Parse::Result::DocCore *ins) override;
|
||||
virtual Parse::Result::DocCore *docRef() const override;
|
||||
virtual bool applied(const QList<Lex::LexResult>& seqs) override;
|
||||
virtual void reset() override;
|
||||
virtual Parse::ParseResult parse(QList<Lex::LexResult>& seqs) override;
|
||||
virtual QList<Parse::SyntaxParser*> children() const override;
|
||||
virtual ParseResult parse(QList<Lex::LexResult>& seqs) override;
|
||||
virtual QList<Syntax::SyntaxParser*> children() const override;
|
||||
|
||||
virtual Parse::DesNode * currNode() const override;
|
||||
virtual Parse::Result::DesNode * currNode() const override;
|
||||
|
||||
protected:
|
||||
ParseRule* addRule(const QString &name, unsigned short level, std::function<Parse::ParseResult(const QList<Lex::LexResult>&, int)> exc);
|
||||
virtual void addChild(QList<Parse::SyntaxParser*> parsers) override;
|
||||
void refocusNode(Parse::DesNode *ins);
|
||||
ParseRule* addRule(const QString &name, unsigned short level, std::function<ParseResult(const QList<Lex::LexResult>&, int)> exc);
|
||||
virtual void addChild(QList<Syntax::SyntaxParser*> parsers) override;
|
||||
void refocusNode(Parse::Result::DesNode *ins);
|
||||
|
||||
Expression* set_common_expression(const QString &name, const QList<Defines::Elm> &defines);
|
||||
|
||||
|
@ -239,12 +239,12 @@ namespace Syntax
|
|||
MatchType target_type;
|
||||
QString section_name;
|
||||
int current_level;
|
||||
Parse::DesNode *current_node;
|
||||
Parse::DocCore *src_ref;
|
||||
Parse::Result::DesNode *current_node;
|
||||
Parse::Result::DocCore *src_ref;
|
||||
|
||||
QHash<QString, Element*> elements_store;
|
||||
QHash<QString, Expression*> expressions_store;
|
||||
QList<Parse::SyntaxParser*> child_parsers;
|
||||
QList<Syntax::SyntaxParser*> child_parsers;
|
||||
|
||||
QHash<QString, ParseRule*> rule_collect;
|
||||
};
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include "ParseFrame.h"
|
||||
|
||||
using namespace Parse;
|
||||
using namespace Parse::Result;
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue