diff --git a/WsNovelParser/main.cpp b/WsNovelParser/main.cpp index 2c58156..13e7335 100644 --- a/WsNovelParser/main.cpp +++ b/WsNovelParser/main.cpp @@ -69,15 +69,16 @@ int main(int argc, char* argv[]) { if (files.size()) { try { auto parser = std::make_shared(); - access_ptr = parser->parse(files); + auto docs = parser->parse(files); - auto errors_list = std::dynamic_pointer_cast(access_ptr->element())->errors(); + auto errors_list = parser->parserContext()->errors(); if (errors_list.size()) { for (auto& err : errors_list) { qDebug().noquote() << err; } exit(0); } + access_ptr = parser->validsApply(docs); } catch (lib_syntax::SyntaxException* e) { qDebug().noquote() << e->message(); diff --git a/WsNovelParser/novelparser.cpp b/WsNovelParser/novelparser.cpp index b8ddbe8..f994df3 100644 --- a/WsNovelParser/novelparser.cpp +++ b/WsNovelParser/novelparser.cpp @@ -29,10 +29,14 @@ QString NovelParser::version() const return "1.0.0"; } -std::shared_ptr NovelParser::parse(const QFileInfoList source_list) const { - QList> forst_root; +std::shared_ptr NovelParser::parserContext() const +{ + return context; +} + +QList> NovelParser::parse(const QFileInfoList source_list) const { + const_cast(this)->context = std::make_shared(u8"小说"); auto word_reader = std::make_shared(); - auto context = std::make_shared(u8"小说"); auto time_stamp = QTime::currentTime(); for (auto& file : source_list) { @@ -41,13 +45,17 @@ std::shared_ptr NovelParser::parse(const QFileInfo this->syntax_defines->parse(context, words); } - forst_root = context->getDocInsts(); + QList> forst_root = context->getDocInsts(); auto current_stamp = QTime::currentTime(); qDebug().noquote() << QString(u8"%词法解析+语法解析消耗时间:%1 ms。").arg(time_stamp.msecsTo(current_stamp)); - time_stamp = QTime::currentTime(); + return forst_root; +} + +std::shared_ptr NovelParser::validsApply(QList> forst_root) const { + auto time_stamp = QTime::currentTime(); QList> docs_node; - for (auto &it : forst_root) { + for (auto& it : forst_root) { auto xitem = std::dynamic_pointer_cast(it); docs_node.append(std::const_pointer_cast(xitem)); context->addChild(docs_node.last()); @@ -55,7 +63,7 @@ std::shared_ptr NovelParser::parse(const QFileInfo auto x_root = NovalSyntax::tidy(context, docs_node); auto novel_accesstree = std::make_shared(x_root); - current_stamp = QTime::currentTime(); + auto current_stamp = QTime::currentTime(); qDebug().noquote() << QString(u8"%程序结构重建消耗时间:%1 ms。").arg(time_stamp.msecsTo(current_stamp)); return analyzer_ref->validCheckWith(novel_accesstree); diff --git a/WsNovelParser/novelparser.h b/WsNovelParser/novelparser.h index d56da51..2bd365e 100644 --- a/WsNovelParser/novelparser.h +++ b/WsNovelParser/novelparser.h @@ -12,6 +12,7 @@ namespace example_novel { class NovelParser { private: + std::shared_ptr context = nullptr; std::shared_ptr syntax_defines; QList> checker_list; std::shared_ptr analyzer_ref; @@ -21,5 +22,7 @@ public: QList> fragmentsSorted() const; virtual QString version() const; - std::shared_ptr parse(const QFileInfoList souurce_list) const; + std::shared_ptr parserContext() const; + QList> parse(const QFileInfoList souurce_list) const; + std::shared_ptr validsApply(QList> docs_list) const; }; \ No newline at end of file