From 6b240e313b16e5b432f3894c908b78a230aa1563 Mon Sep 17 00:00:00 2001 From: codeboss <2422523675@qq.com> Date: Thu, 2 May 2024 19:25:21 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E8=AF=AD=E6=B3=95=E7=BB=93?= =?UTF-8?q?=E6=9E=84=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libSyntax/syntax_novel.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/libSyntax/syntax_novel.cpp b/libSyntax/syntax_novel.cpp index 779ba80..6d7b221 100644 --- a/libSyntax/syntax_novel.cpp +++ b/libSyntax/syntax_novel.cpp @@ -11,14 +11,14 @@ auto leftb = std::make_shared(); // { auto rightb = std::make_shared(); // } auto refers = std::make_shared(); // @ -auto story = std::make_shared(u8"故事", u8"story-mark"); // 故事 +auto story_key = std::make_shared(u8"故事", u8"story-mark"); // 故事 auto numbers = std::make_shared(); // [0-9]+ -auto frags = std::make_shared(u8"情节", u8"fragment-mark"); // 情节 -auto volume = std::make_shared(u8"分卷", u8"volume-mark"); // 分卷 -auto article = std::make_shared(u8"章节", u8"article-mark"); // 章节 -auto split = std::make_shared(); // & +auto frag_key = std::make_shared(u8"情节", u8"fragment-mark"); // 情节 +auto volume_key = std::make_shared(u8"分卷", u8"volume-mark"); // 分卷 +auto article_key = std::make_shared(u8"章节", u8"article-mark"); // 章节 +auto split_mark = std::make_shared(); // & auto vtext = std::make_shared(); // ^([^\\{\\}\\n@&]+) -auto ntext = std::make_shared(); // ^([^:\\{\\}\\n@&][^\\{\\}\\n@&]*) +auto name_text = std::make_shared(); // ^([^:\\{\\}\\n@&][^\\{\\}\\n@&]*) auto newl = std::make_shared(); @@ -62,38 +62,38 @@ auto remove_nl = [](const ExprRule::TokenSeqs& p)->ExprRule::TokenSeqs { return result; }; -auto decl_comp = std::make_shared(Rules{MR(numbers), MR(vtext), MR(ntext), MR(split)}); +auto decl_comp = std::make_shared(Rules{MR(numbers), MR(vtext), MR(name_text), MR(split_mark)}); auto decl_expr = ExprRule(u8"decl_section", (int)NovelExprs::DESC_SECTION).reloadRule(remove_nl, std::make_shared(LinesMerge(MultiR(decl_comp)) )); auto fragment_decl = ExprRule(u8"fragment_define", (int)NovelExprs::FRAG_DEFINES).reloadRule(remove_nl, std::make_shared( - LinesMerge(Rules{MR(leftb), MR(frags), MR(ntext)}) << + LinesMerge(Rules{MR(leftb), MR(frag_key), MR(name_text)}) << OptMulR(decl_expr) << LinesMerge(MR(rightb)) )); auto fragment_refer = ExprRule(u8"fragment_refer", (int)NovelExprs::FRAG_REFERS).reloadRule(remove_nl, std::make_shared( - LinesMerge(Rules{MR(leftb), MR(refers), MR(frags), MR(ntext), MR(split), MR(ntext)}) << + LinesMerge(Rules{MR(leftb), MR(refers), MR(frag_key), MR(name_text), MR(split_mark), MR(name_text)}) << OptMulR(decl_expr) << LinesMerge(MR(rightb)) )); auto fragment_comp = std::make_shared(Rules{fragment_decl, fragment_refer, decl_expr}); auto story_define = ExprRule(u8"story_define", (int)NovelExprs::STORY_DEFINES).reloadRule(remove_nl, std::make_shared( - LinesMerge(Rules{ MR(leftb), MR(story), MR(numbers), MR(ntext)}) << + LinesMerge(Rules{MR(leftb), MR(story_key), MR(numbers), MR(name_text)}) << OptMulR(fragment_comp) << LinesMerge(MR(rightb)) )); // =================================================================== auto article_decl = ExprRule(u8"article_define", (int)NovelExprs::ARTICLE_DEFINE).reloadRule(remove_nl, std::make_shared( - LinesMerge(Rules{ MR(leftb), MR(article), MR(ntext)}) << + LinesMerge(Rules{MR(leftb), MR(article_key), MR(name_text)}) << OptMulR(std::make_shared(Rules{ fragment_refer, decl_expr })) << LinesMerge(MR(rightb)) )); auto volume_decl = ExprRule(u8"volume_define", (int)NovelExprs::VOLUME_DEFINE).reloadRule(remove_nl, std::make_shared( - LinesMerge(Rules{ MR(leftb), MR(volume), MR(ntext)}) << + LinesMerge(Rules{MR(leftb), MR(volume_key), MR(name_text)}) << OptMulR(std::make_shared(Rules{ decl_expr, article_decl })) << LinesMerge(MR(rightb)) )); @@ -109,7 +109,7 @@ std::shared_ptr NovalSyntax::getParseTree() { return document_de std::shared_ptr NovalSyntax::getLexReader() { auto inst = std::make_shared(QList>() - << leftb << rightb << refers << split << story << frags << volume << article << numbers << ntext << vtext << newl); + << leftb << rightb << refers << split_mark << story_key << frag_key << volume_key << article_key << numbers << name_text << vtext << newl); return inst; }