重构,组织解析类

This commit is contained in:
玉宇清音 2022-11-06 19:40:11 +08:00
parent 477aa07f13
commit 53afe58730
16 changed files with 479 additions and 451 deletions

View File

@ -8,7 +8,7 @@ CONFIG -= app_bundle
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \ SOURCES += \
LexicalBase.cpp \ LexFoundation.cpp \
ParseFrame.cpp \ ParseFrame.cpp \
StoryChainDocumentParser.cpp \ StoryChainDocumentParser.cpp \
StoryUnitDocumentParser.cpp \ StoryUnitDocumentParser.cpp \
@ -28,7 +28,7 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target !isEmpty(target.path): INSTALLS += target
HEADERS += \ HEADERS += \
LexicalBase.h \ LexFoundation.h \
ParseFrame.h \ ParseFrame.h \
StoryChainDocumentParser.h \ StoryChainDocumentParser.h \
StoryUnitDocumentParser.h \ StoryUnitDocumentParser.h \

View File

@ -1,9 +1,9 @@
#include "LexicalBase.h" #include "LexFoundation.h"
#include <tuple> #include <tuple>
using namespace Lex; 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) : unknown_token(UnknownToken), lexical_seq(seqence)
{ {
empty_seq << '\t' << '\b' << ' ' << '\r' << EOF; empty_seq << '\t' << '\b' << ' ' << '\r' << EOF;
@ -12,7 +12,7 @@ LexicalBase::LexicalBase(QList<LexUnit> seqence, const QString UnknownToken)
typedef int lexunit_index; typedef int lexunit_index;
typedef int match_start; 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; QList<LexResult> result;
@ -44,7 +44,7 @@ QList<LexResult> LexicalBase::push(int row, int col, const QChar w)
return mid_result; return mid_result;
} }
QList<LexResult> LexicalBase::lexical_parse(const QString & segment) QList<LexResult> LexFoundation::lexical_parse(const QString & segment)
{ {
// 获取匹配词法分析 // 获取匹配词法分析
QList<LexResult> result; QList<LexResult> result;

View File

@ -4,12 +4,12 @@
#include <QList> #include <QList>
namespace Lex { namespace Lex {
class LexicalBase; class LexFoundation;
/** /**
* . * .
*/ */
struct LexUnit struct LexDef
{ {
QString TokenType; // Token字符 QString TokenType; // Token字符
QString RegExpression; // 词法解析表达式 QString RegExpression; // 词法解析表达式
@ -24,7 +24,7 @@ namespace Lex {
QString Text; // 内容 QString Text; // 内容
int StartRow, StartCol, EndRow, EndCol; // 波及范围 int StartRow, StartCol, EndRow, EndCol; // 波及范围
friend class LexicalBase; friend class LexFoundation;
private: private:
int index_at_segment; int index_at_segment;
}; };
@ -48,11 +48,11 @@ namespace Lex {
/** /**
* . * .
*/ */
class LexicalBase class LexFoundation
{ {
public: public:
explicit LexicalBase(QList<LexUnit> seqence, const QString UnknownToken); explicit LexFoundation(QList<LexDef> seqence, const QString UnknownToken);
virtual ~LexicalBase() = default; virtual ~LexFoundation() = default;
/** /**
* . * .
@ -69,7 +69,7 @@ namespace Lex {
QList<QChar> empty_seq; QList<QChar> empty_seq;
QList<XChar> code_acc; QList<XChar> code_acc;
QList<LexUnit> lexical_seq; QList<LexDef> lexical_seq;
QList<LexResult> lexical_parse(const QString &segment); QList<LexResult> lexical_parse(const QString &segment);
}; };

View File

@ -2,17 +2,19 @@
#include "WordsPeak.h" #include "WordsPeak.h"
using namespace Parse; using namespace Parse;
using namespace Parse::Result;
using namespace Syntax;
using namespace Lex; 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)) if (stream.initSource(path))
return QList<DesNode*>(); 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; QList<LexResult> lex_seqence;
std::tuple<int, int, QChar> temp; std::tuple<int, int, QChar> temp;
@ -42,18 +44,18 @@ QList<DesNode*> Parse::ParseFrame::analysis(DocCore*doc, const QString & path)
return xrets; 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; this->unknown_token = unknown_token;
token_seqs.append(seqs); token_seqs.append(seqs);
} }
void Parse::ParseFrame::appendParser(SyntaxParser * u) void ParseFrame::appendParser(SyntaxParser * u)
{ {
cascade_parsers << 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; QList<DesNode*> nodes;

View File

@ -3,7 +3,7 @@
#include <QList> #include <QList>
#include "SyntaxBase.h" #include "SyntaxBase.h"
namespace Parse namespace Syntax
{ {
/** /**
* . * .
@ -14,17 +14,19 @@ namespace Parse
explicit ParseFrame(); explicit ParseFrame();
virtual ~ParseFrame() = default; virtual ~ParseFrame() = default;
QList<DesNode*> analysis(DocCore *doc, const QString &path); QList<Parse::Result::DesNode*> analysis(Parse::Result::DocCore *doc, const QString &path);
protected: protected:
void appendTokensDefine(QList<Lex::LexUnit> seqs, const QString &unknown_token); void appendTokensDefine(QList<Lex::LexDef> seqs, const QString &unknown_token);
void appendParser(SyntaxParser* u); void appendParser(Syntax::SyntaxParser* u);
private: private:
QString unknown_token; QString unknown_token;
QList<Lex::LexUnit> token_seqs; QList<Lex::LexDef> token_seqs;
QList<SyntaxParser*> cascade_parsers; 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);
}; };
} }

View File

@ -4,6 +4,7 @@ using namespace Parse;
using namespace Lex; using namespace Lex;
using namespace Syntax; using namespace Syntax;
using namespace Syntax::Defines; using namespace Syntax::Defines;
using namespace Parse::Result;
// storychain 解析器================================================ // storychain 解析器================================================
NodeStoryChainParser::NodeStoryChainParser(ProjectCore *core) NodeStoryChainParser::NodeStoryChainParser(ProjectCore *core)

View File

@ -17,7 +17,7 @@ namespace Parse
/** /**
* . * .
*/ */
class NodeStoryChain : public NamedNode class NodeStoryChain : public Result::NamedNode
{ {
public: public:
/** /**
@ -25,7 +25,7 @@ namespace Parse
* *
* \param src_path * \param src_path
*/ */
explicit NodeStoryChain(DocCore *doc, const QString &name); explicit NodeStoryChain(Result::DocCore *doc, const QString &name);
virtual ~NodeStoryChain() = default; virtual ~NodeStoryChain() = default;
/** /**
@ -41,7 +41,7 @@ namespace Parse
return 0; return 0;
} }
virtual QString name() const override; virtual QString name() const override;
virtual DocCore * document() const override; virtual Result::DocCore * document() const override;
virtual int typeValue() const override; virtual int typeValue() const override;
virtual DesNode * parent() const override; virtual DesNode * parent() const override;
virtual void appendChild(DesNode * ins) override; virtual void appendChild(DesNode * ins) override;
@ -50,7 +50,7 @@ namespace Parse
virtual QString toString() const override; virtual QString toString() const override;
private: private:
DocCore *const doc_store; Result::DocCore *const doc_store;
QString name_store; QString name_store;
QList<DesNode*> children_nodes; QList<DesNode*> children_nodes;
}; };
@ -61,19 +61,19 @@ namespace Parse
class NodeStoryChainParser : public Syntax::XSyntaxBase class NodeStoryChainParser : public Syntax::XSyntaxBase
{ {
public: public:
NodeStoryChainParser(ProjectCore *core); NodeStoryChainParser(Result::ProjectCore *core);
virtual ~NodeStoryChainParser() = default; virtual ~NodeStoryChainParser() = default;
ProjectCore* project() const; Result::ProjectCore* project() const;
private: private:
ProjectCore *pjt_ref; Result::ProjectCore *pjt_ref;
}; };
/** /**
* . * .
*/ */
class NodeStoryPoint : public NamedNode class NodeStoryPoint : public Result::NamedNode
{ {
public: public:
explicit NodeStoryPoint(NodeStoryChain *chain, const QString &name); explicit NodeStoryPoint(NodeStoryChain *chain, const QString &name);
@ -90,7 +90,7 @@ namespace Parse
inline virtual int depth() const override { inline virtual int depth() const override {
return chain_store->depth() + 1; return chain_store->depth() + 1;
} }
virtual DocCore * document() const override; virtual Result::DocCore * document() const override;
virtual int typeValue() const override; virtual int typeValue() const override;
virtual DesNode * parent() const override; virtual DesNode * parent() const override;
virtual void appendChild(DesNode * ins) override; virtual void appendChild(DesNode * ins) override;
@ -115,7 +115,7 @@ namespace Parse
virtual ~NodeStoryPointParser() = default; virtual ~NodeStoryPointParser() = default;
NodeStoryChainParser* storyChainParser() const; NodeStoryChainParser* storyChainParser() const;
virtual DocCore* docRef() const override; virtual Result::DocCore* docRef() const override;
private: private:
NodeStoryChainParser *const parent_parser; NodeStoryChainParser *const parent_parser;
@ -124,7 +124,7 @@ namespace Parse
/** /**
* . * .
*/ */
class NodeStoryDesGroup : public DesNode class NodeStoryDesGroup : public Result::DesNode
{ {
public: public:
NodeStoryDesGroup(DesNode *parent_refer); NodeStoryDesGroup(DesNode *parent_refer);
@ -134,7 +134,7 @@ namespace Parse
inline virtual int depth() const override { inline virtual int depth() const override {
return parent_refer->depth() + 1; return parent_refer->depth() + 1;
} }
virtual DocCore * document() const override; virtual Result::DocCore * document() const override;
virtual int typeValue() const override; virtual int typeValue() const override;
virtual DesNode * parent() const override; virtual DesNode * parent() const override;
virtual void appendChild(DesNode * ins) override; virtual void appendChild(DesNode * ins) override;
@ -160,7 +160,7 @@ namespace Parse
/** /**
* . * .
*/ */
class NodeStoryDesBlock : public DesNode class NodeStoryDesBlock : public Result::DesNode
{ {
public: public:
explicit NodeStoryDesBlock(DesNode *parent_node, const QString &text); explicit NodeStoryDesBlock(DesNode *parent_node, const QString &text);
@ -170,7 +170,7 @@ namespace Parse
inline virtual int depth() const override { inline virtual int depth() const override {
return parent_refer->depth() + 1; return parent_refer->depth() + 1;
} }
virtual DocCore * document() const override; virtual Result::DocCore * document() const override;
virtual int typeValue() const override; virtual int typeValue() const override;
virtual DesNode * parent() const override; virtual DesNode * parent() const override;
virtual void appendChild(DesNode * ins) override; virtual void appendChild(DesNode * ins) override;
@ -183,10 +183,10 @@ namespace Parse
QString text_block; QString text_block;
}; };
class StoryChainDocumentParser : public ParseFrame class StoryChainDocumentParser : public Syntax::ParseFrame
{ {
public: public:
StoryChainDocumentParser(ProjectCore *pjt); StoryChainDocumentParser(Result::ProjectCore *pjt);
virtual ~StoryChainDocumentParser() = default; virtual ~StoryChainDocumentParser() = default;
}; };
} }

View File

@ -1,6 +1,7 @@
#include "StoryUnitDocumentParser.h" #include "StoryUnitDocumentParser.h"
using namespace Parse; using namespace Parse;
using namespace Parse::Result;
using namespace Lex; using namespace Lex;
using namespace Syntax; using namespace Syntax;
using namespace Syntax::Defines; using namespace Syntax::Defines;
@ -95,7 +96,7 @@ QString NodeStoryFragment::toString() const
QString rets = QString(depth(), ' ') + "#情节 " + name() + "{"; QString rets = QString(depth(), ' ') + "#情节 " + name() + "{";
for (auto cin : children_nodes) for (auto cin : children_nodes)
rets += "\n" + QString(depth(), ' ') + cin->toString(); rets += "\n" + QString(depth(), ' ') + cin->toString();
return rets + "}"; return rets + "\n"+QString(depth(), ' ') + "}";
} }
QString NodeStoryFragment::name() const QString NodeStoryFragment::name() const

View File

@ -7,10 +7,10 @@ namespace Parse {
/** /**
* . * .
*/ */
class NodeStoryUnit : public NamedNode class NodeStoryUnit : public Result::NamedNode
{ {
public: public:
explicit NodeStoryUnit(DocCore *doc, const QString &name); explicit NodeStoryUnit(Result::DocCore *doc, const QString &name);
virtual ~NodeStoryUnit() = default; virtual ~NodeStoryUnit() = default;
// 通过 NamedNode // 通过 NamedNode
@ -20,7 +20,7 @@ namespace Parse {
inline virtual int depth() const override { inline virtual int depth() const override {
return 0; return 0;
} }
virtual DocCore * document() const override; virtual Result::DocCore * document() const override;
virtual int typeValue() const override; virtual int typeValue() const override;
virtual DesNode * parent() const override; virtual DesNode * parent() const override;
virtual void appendChild(DesNode * ins) override; virtual void appendChild(DesNode * ins) override;
@ -29,7 +29,7 @@ namespace Parse {
virtual QString toString() const override; virtual QString toString() const override;
private: private:
DocCore *doc_ref; Result::DocCore *doc_ref;
QString name_store; QString name_store;
QList<DesNode*> children_nodes; QList<DesNode*> children_nodes;
@ -39,18 +39,18 @@ namespace Parse {
class NodeStoryUnitParser : public Syntax::XSyntaxBase class NodeStoryUnitParser : public Syntax::XSyntaxBase
{ {
public: public:
NodeStoryUnitParser(ProjectCore *core); NodeStoryUnitParser(Result::ProjectCore *core);
ProjectCore* project() const; Result::ProjectCore* project() const;
private: private:
ProjectCore *const pjt_core; Result::ProjectCore *const pjt_core;
}; };
/** /**
* . * .
*/ */
class NodeStoryFragment : public NamedNode class NodeStoryFragment : public Result::NamedNode
{ {
public: public:
explicit NodeStoryFragment(NodeStoryUnit* unit, const QString &name); explicit NodeStoryFragment(NodeStoryUnit* unit, const QString &name);
@ -60,7 +60,7 @@ namespace Parse {
inline virtual int depth() const override { inline virtual int depth() const override {
return unit_ins->depth() + 1; return unit_ins->depth() + 1;
} }
virtual DocCore * document() const override; virtual Result::DocCore * document() const override;
virtual int typeValue() const override; virtual int typeValue() const override;
virtual DesNode * parent() const override; virtual DesNode * parent() const override;
virtual void appendChild(DesNode * ins) override; virtual void appendChild(DesNode * ins) override;
@ -85,7 +85,7 @@ namespace Parse {
NodeStoryFragmentParser(NodeStoryUnitParser *pparser); NodeStoryFragmentParser(NodeStoryUnitParser *pparser);
NodeStoryUnitParser * nodeStoryUnitParser() const; NodeStoryUnitParser * nodeStoryUnitParser() const;
DocCore * docRef() const; Result::DocCore * docRef() const;
private: private:
NodeStoryUnitParser *const parent_parser; NodeStoryUnitParser *const parent_parser;
@ -94,7 +94,7 @@ namespace Parse {
/** /**
* . * .
*/ */
class NodeStoryPointRefer : public DesNode class NodeStoryPointRefer : public Result::DesNode
{ {
public: public:
explicit NodeStoryPointRefer(DesNode *parent, const QString &chain, const QString &point); explicit NodeStoryPointRefer(DesNode *parent, const QString &chain, const QString &point);
@ -104,7 +104,7 @@ namespace Parse {
inline virtual int depth() const override { inline virtual int depth() const override {
return parent_ins->depth() + 1; return parent_ins->depth() + 1;
} }
virtual DocCore * document() const override; virtual Result::DocCore * document() const override;
virtual int typeValue() const override; virtual int typeValue() const override;
virtual DesNode * parent() const override; virtual DesNode * parent() const override;
virtual void appendChild(DesNode * ins) override; virtual void appendChild(DesNode * ins) override;
@ -148,8 +148,12 @@ namespace Parse {
/** /**
* *
* # {
*
*
* }
*/ */
class NodeStoryFragmentComment : public NamedNode class NodeStoryFragmentComment : public Result::NamedNode
{ {
public: public:
NodeStoryFragmentComment(DesNode *parent, const QString &order, const QString &name); NodeStoryFragmentComment(DesNode *parent, const QString &order, const QString &name);
@ -162,7 +166,7 @@ namespace Parse {
{ {
return parent_ins->depth() + 1; return parent_ins->depth() + 1;
} }
virtual DocCore * document() const override; virtual Result::DocCore * document() const override;
virtual int typeValue() const override; virtual int typeValue() const override;
virtual DesNode * parent() const override; virtual DesNode * parent() const override;
virtual void appendChild(DesNode * ins) override; virtual void appendChild(DesNode * ins) override;
@ -179,9 +183,9 @@ namespace Parse {
}; };
class StoryUnitDocumentParser : public ParseFrame class StoryUnitDocumentParser : public Syntax::ParseFrame
{ {
public: public:
StoryUnitDocumentParser(ProjectCore *ins); StoryUnitDocumentParser(Result::ProjectCore *ins);
}; };
} }

View File

@ -3,10 +3,13 @@
using namespace Parse; using namespace Parse;
using namespace Lex; using namespace Lex;
using namespace Syntax;
using namespace Parse::Result;
class Unknown : public DesNode namespace Parse {
{ class Unknown : public DesNode
public: {
public:
explicit Unknown(DocCore *ins) explicit Unknown(DocCore *ins)
: doc_store(ins) {} : doc_store(ins) {}
@ -27,14 +30,14 @@ public:
{ {
return nullptr; return nullptr;
} }
virtual void appendChild(DesNode * ins) override virtual void appendChild(DesNode *) override
{ {
} }
virtual QList<DesNode*> children() const override virtual QList<DesNode*> children() const override
{ {
return QList<DesNode*>(); return QList<DesNode*>();
} }
virtual bool check(QList<QString>& reasons) const override virtual bool check(QList<QString>&) const override
{ {
return true; return true;
} }
@ -42,88 +45,89 @@ public:
{ {
return QString(); return QString();
} }
private: private:
DocCore *const doc_store; 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; return row_store;
} }
int Parse::Words::column() const int Words::column() const
{ {
return col_store; return col_store;
} }
int Parse::Words::length() const int Words::length() const
{ {
return value_store.length(); return value_store.length();
} }
DesNode * Parse::Words::host() const DesNode * Words::host() const
{ {
return desnode_store; return desnode_store;
} }
DocCore * Parse::Words::doc() const DocCore * Words::doc() const
{ {
return docpresent_store; return docpresent_store;
} }
QString Parse::Words::toString() const QString Words::toString() const
{ {
return value_store; return value_store;
} }
Parse::DocCore::DocCore(ProjectCore * core, const QString & path) DocCore::DocCore(ProjectCore * core, const QString & path)
: core_store(core), file_path_store(path), unknown_host(new Unknown(this)) : unknown_host(new Unknown(this)), core_store(core), file_path_store(path)
{ {
} }
DesNode * Parse::DocCore::unknowns() const DesNode * DocCore::unknowns() const
{ {
return unknown_host; return unknown_host;
} }
ProjectCore * Parse::DocCore::project() const ProjectCore * DocCore::project() const
{ {
return core_store; return core_store;
} }
void Parse::DocCore::rename(const QString & new_name) void DocCore::rename(const QString & new_name)
{ {
file_path_store = new_name; file_path_store = new_name;
} }
QString Parse::DocCore::filePath() const QString DocCore::filePath() const
{ {
return file_path_store; return file_path_store;
} }
QString Parse::DocCore::fileName() const QString DocCore::fileName() const
{ {
return QFileInfo(file_path_store).fileName(); return QFileInfo(file_path_store).fileName();
} }
void Parse::DocCore::clear() void DocCore::clear()
{ {
nodes_store.clear(); nodes_store.clear();
} }
int Parse::DocCore::append(Words * ins) int DocCore::append(Words * ins)
{ {
nodes_store << ins; nodes_store << ins;
return 0; return 0;
} }
Words * Parse::DocCore::getWords(int row, int col) const Words * DocCore::getWords(int row, int col) const
{ {
for (auto it : nodes_store) for (auto it : nodes_store)
if (it->row() == row && it->column() <= col && it->column() + it->length() >= col) if (it->row() == row && it->column() <= col && it->column() + it->length() >= col)

View File

@ -3,23 +3,28 @@
#include <QString> #include <QString>
#include <functional> #include <functional>
#include <QList> #include <QList>
#include "LexicalBase.h" #include "LexFoundation.h"
#include "comndef.h" #include "comndef.h"
namespace Parse namespace Parse
{ {
class NamedNode; namespace Result {
class DocCore;
class ProjectCore; class ProjectCore;
class DesNode; class DesNode;
class NamedNode;
class DocCore;
}
namespace Result
{
/** /**
* . * .
*/ */
class Words class Words
{ {
public: public:
explicit Words(DesNode* host, DocCore *doc, const QString &value, int row, int col); explicit Words(Result::DesNode* host, Result::DocCore *doc, const QString &value, int row, int col);
virtual ~Words() = default; virtual ~Words() = default;
/** /**
@ -48,14 +53,14 @@ namespace Parse
* *
* \return * \return
*/ */
virtual DesNode* host() const; virtual Result::DesNode* host() const;
/** /**
* . * .
* *
* \return * \return
*/ */
virtual DocCore* doc() const; virtual Result::DocCore* doc() const;
/** /**
* . * .
@ -67,8 +72,8 @@ namespace Parse
private: private:
QString value_store; QString value_store;
int row_store, col_store; int row_store, col_store;
DesNode *desnode_store; Result::DesNode *desnode_store;
DocCore *docpresent_store; Result::DocCore *docpresent_store;
}; };
/** /**
@ -135,10 +140,11 @@ namespace Parse
virtual QString toString() const = 0; virtual QString toString() const = 0;
}; };
/** /**
* . * .
*/ */
class NamedNode : public DesNode class NamedNode : public Result::DesNode
{ {
public: public:
virtual ~NamedNode() = default; virtual ~NamedNode() = default;
@ -152,7 +158,6 @@ namespace Parse
}; };
/** /**
* . * .
*/ */
@ -167,7 +172,7 @@ namespace Parse
* *
* \return * \return
*/ */
DesNode* unknowns() const; Result::DesNode* unknowns() const;
/** /**
* . * .
@ -221,7 +226,7 @@ namespace Parse
Words* getWords(int row, int col) const; Words* getWords(int row, int col) const;
private: private:
DesNode *const unknown_host; Result::DesNode *const unknown_host;
ProjectCore *const core_store; ProjectCore *const core_store;
QString file_path_store; QString file_path_store;
QList<Words*> nodes_store; QList<Words*> nodes_store;
@ -245,14 +250,14 @@ namespace Parse
* \param file_path * \param file_path
* \return * \return
*/ */
virtual DocCore* queryDocument(const QString &file_path) const; virtual Parse::Result::DocCore* queryDocument(const QString &file_path) const;
virtual void replaceDocument(DocCore *ins); virtual void replaceDocument(Parse::Result::DocCore *ins);
virtual DesNode* queryChain(const QString & name) const; virtual Parse::Result::DesNode* queryChain(const QString & name) const;
virtual DesNode* queryPoint(NamedNode* chain, const QString &name) const; virtual Parse::Result::DesNode* queryPoint(Parse::Result::NamedNode* chain, const QString &name) const;
virtual DesNode* queryUnit(const QString &name) const; virtual Parse::Result::DesNode* queryUnit(const QString &name) const;
virtual DesNode* queryFragment(NamedNode *unit, const QString &name) const; virtual Parse::Result::DesNode* queryFragment(Parse::Result::NamedNode *unit, const QString &name) const;
/** /**
* . * .
@ -261,10 +266,17 @@ namespace Parse
* \param unit nullptr代表全局范围 * \param unit nullptr代表全局范围
* \return * \return
*/ */
virtual QList<NamedNode*> queryFragmentsOrderby(const QString &type, NamedNode* unit = nullptr) const; virtual QList<Parse::Result::NamedNode*> queryFragmentsOrderby(const QString &type, Parse::Result::NamedNode* unit = nullptr) const;
}; };
}
}
namespace Syntax {
/** /**
* . * .
*/ */
@ -289,14 +301,14 @@ namespace Parse
* *
* \param ins * \param ins
*/ */
virtual void docActive(DocCore *ins) = 0; virtual void docActive(Parse::Result::DocCore *ins) = 0;
/** /**
* . * .
* *
* \return * \return
*/ */
virtual DocCore* docRef() const = 0; virtual Parse::Result::DocCore* docRef() const = 0;
/** /**
* . * .
* *
@ -331,7 +343,7 @@ namespace Parse
* *
* \return * \return
*/ */
virtual DesNode* currNode() const = 0; virtual Parse::Result::DesNode* currNode() const = 0;
public: public:
/** /**

View File

@ -1,19 +1,19 @@
#include "WordsPeak.h" #include "WordsPeak.h"
#include <QDebug> #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) {} current_line(""), current_row(-1), current_col(0) {}
ForwardStream::~ForwardStream() { ExStream::~ExStream() {
if (file_target) if (file_target)
delete file_target; delete file_target;
if (text_input) if (text_input)
delete text_input; delete text_input;
} }
int ForwardStream::initSource(const QString & path) int ExStream::initSource(const QString & path)
{ {
if (file_target) if (file_target)
delete file_target; delete file_target;
@ -31,7 +31,7 @@ int ForwardStream::initSource(const QString & path)
return 0; 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 (current_col >= current_line.length()) {
if (!text_input->atEnd()) { if (!text_input->atEnd()) {

View File

@ -4,14 +4,14 @@
#include <QFile> #include <QFile>
#include <tuple> #include <tuple>
namespace Parse { namespace Lex {
class ForwardStream class ExStream
{ {
public: public:
typedef int n_row; typedef int n_row;
typedef int n_col; typedef int n_col;
explicit ForwardStream(); explicit ExStream();
virtual ~ForwardStream(); virtual ~ExStream();
/** /**
* . * .

View File

@ -1,6 +1,7 @@
#include "XSyntaxBase.h" #include "XSyntaxBase.h"
using namespace Parse; using namespace Parse;
using namespace Parse::Result;
using namespace Syntax; using namespace Syntax;
using namespace Lex; using namespace Lex;
using namespace Defines; using namespace Defines;

View File

@ -2,7 +2,7 @@
#include <QString> #include <QString>
#include <QList> #include <QList>
#include <QHash> #include <QHash>
#include "LexicalBase.h" #include "LexFoundation.h"
#include "SyntaxBase.h" #include "SyntaxBase.h"
namespace Syntax namespace Syntax
@ -178,7 +178,7 @@ namespace Syntax
{ {
public: public:
ParseRule(XSyntaxBase *host, const QString &rule_name, unsigned short level, 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; virtual ~ParseRule() = default;
int level() const; int level() const;
@ -186,7 +186,7 @@ namespace Syntax
void addExpression(const QString &name, const QList<Defines::Elm> &_defines); void addExpression(const QString &name, const QList<Defines::Elm> &_defines);
std::tuple<bool, int> tokensMatch(const QList<Lex::LexResult> &token) const; 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: private:
XSyntaxBase *const host_ins; XSyntaxBase *const host_ins;
@ -194,7 +194,7 @@ namespace Syntax
QString name_store; QString name_store;
QList<Expression*> expression_list; 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: public:
explicit XSyntaxBase(const QString &section, MatchType type = MatchType::Entirely); explicit XSyntaxBase(const QString &section, MatchType type = MatchType::Entirely);
@ -219,19 +219,19 @@ namespace Syntax
Element *get_element(const QString &name); Element *get_element(const QString &name);
// 通过 Parse::SyntaxParser 继承 // 通过 Parse::SyntaxParser 继承
virtual void docActive(Parse::DocCore *ins) override; virtual void docActive(Parse::Result::DocCore *ins) override;
virtual Parse::DocCore *docRef() const override; virtual Parse::Result::DocCore *docRef() const override;
virtual bool applied(const QList<Lex::LexResult>& seqs) override; virtual bool applied(const QList<Lex::LexResult>& seqs) override;
virtual void reset() override; virtual void reset() override;
virtual Parse::ParseResult parse(QList<Lex::LexResult>& seqs) override; virtual ParseResult parse(QList<Lex::LexResult>& seqs) override;
virtual QList<Parse::SyntaxParser*> children() const override; virtual QList<Syntax::SyntaxParser*> children() const override;
virtual Parse::DesNode * currNode() const override; virtual Parse::Result::DesNode * currNode() const override;
protected: protected:
ParseRule* addRule(const QString &name, unsigned short level, std::function<Parse::ParseResult(const QList<Lex::LexResult>&, int)> exc); ParseRule* addRule(const QString &name, unsigned short level, std::function<ParseResult(const QList<Lex::LexResult>&, int)> exc);
virtual void addChild(QList<Parse::SyntaxParser*> parsers) override; virtual void addChild(QList<Syntax::SyntaxParser*> parsers) override;
void refocusNode(Parse::DesNode *ins); void refocusNode(Parse::Result::DesNode *ins);
Expression* set_common_expression(const QString &name, const QList<Defines::Elm> &defines); Expression* set_common_expression(const QString &name, const QList<Defines::Elm> &defines);
@ -239,12 +239,12 @@ namespace Syntax
MatchType target_type; MatchType target_type;
QString section_name; QString section_name;
int current_level; int current_level;
Parse::DesNode *current_node; Parse::Result::DesNode *current_node;
Parse::DocCore *src_ref; Parse::Result::DocCore *src_ref;
QHash<QString, Element*> elements_store; QHash<QString, Element*> elements_store;
QHash<QString, Expression*> expressions_store; QHash<QString, Expression*> expressions_store;
QList<Parse::SyntaxParser*> child_parsers; QList<Syntax::SyntaxParser*> child_parsers;
QHash<QString, ParseRule*> rule_collect; QHash<QString, ParseRule*> rule_collect;
}; };

View File

@ -7,6 +7,7 @@
#include "ParseFrame.h" #include "ParseFrame.h"
using namespace Parse; using namespace Parse;
using namespace Parse::Result;
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {