#include "novelparser.h" #include #include #include using namespace example_novel; NovelParser::NovelParser() { this->syntax_defines = example_novel::NovalSyntax::getParseTree(); checker_list << std::make_shared(); checker_list << std::make_shared(); analyzer_ref = std::make_shared(checker_list); } QString NovelParser::version() const { return "1.0.0"; } std::shared_ptr NovelParser::parse(const QFileInfoList source_list) const { QList> forst_root; auto lex_reader = NovalSyntax::getLexReader(); for (auto& file : source_list) { auto tokens = lex_reader->extractFrom(file.canonicalFilePath()); auto exprs_result = std::make_shared(this->syntax_defines)->parseFrom(tokens); forst_root.append(exprs_result); } std::function>(QList> input)> summary = [&](QList> input) -> QList> { QList> temp; if (input.size()) { auto item = std::dynamic_pointer_cast(input.first()); temp << item; temp.append(summary(input.mid(1))); } return temp; }; auto tree_visit = std::make_shared(); auto vinst = std::make_shared(tree_visit); auto resultx = vinst->parse("test", summary(forst_root)); auto novel_accesstree = vinst->tidy(resultx); return analyzer_ref->validCheckWith(novel_accesstree); }