diff --git a/libSyntax/libsyntax.h b/libSyntax/libsyntax.h index 1b97494..415eb94 100644 --- a/libSyntax/libsyntax.h +++ b/libSyntax/libsyntax.h @@ -272,12 +272,12 @@ namespace lib_syntax { /** * @brief 基础模板化语法元素解析规则. */ - template - requires std::derived_from + template + requires std::derived_from&& std::derived_from class ElementRule : public ExprRule { public: - ElementRule(const QString& rule_name, std::shared_ptr children) - :ExprRule(rule_name, mark), _children_store(children) { } + ElementRule(const QString& rule_name) + :ExprRule(rule_name, mark), _children_store(std::make_shared()) { } virtual QList> children() const { return QList>() << this->_children_store; diff --git a/libSyntax/syntax_novel.cpp b/libSyntax/syntax_novel.cpp index 2b5ab01..603661d 100644 --- a/libSyntax/syntax_novel.cpp +++ b/libSyntax/syntax_novel.cpp @@ -6,43 +6,10 @@ using namespace lib_syntax; using namespace example_novel; using namespace lib_token; using namespace ast_basic; - -// token-avaliable ========================================================================== -auto leftb = std::make_shared(); // { -auto rightb = std::make_shared(); // } -auto refers = std::make_shared(); // @ -auto declare = std::make_shared(); // # -auto split_mark = std::make_shared(); // & - -auto rank_key = std::make_shared(); // 排序 -auto story_key = std::make_shared(); // 故事 -auto numbers = std::make_shared(); // [0-9]+ -auto slice_key = std::make_shared(); // 剧情 -auto point_key = std::make_shared(); // 节点 -auto volume_key = std::make_shared(); // 分卷 -auto article_key = std::make_shared(); // 章节 -auto vtext = std::make_shared(); // ^([^\\{\\}@&]+) -auto name_text = std::make_shared(); // ^([^\\{\\}@&]+) - - +using namespace std; // rule-parts =============================================================================== #include "syntax_templets.h" -// MakeRule -#define MK(type) std::make_shared() -// MatchRule -#define MER(E, XProc, t) std::make_shared>(t) -#define MR(E, t) MER(E, lib_composit::apntk, t) -// Buffer -#define Rules QList> -// Option -#define OptMulT(token) std::make_shared(MR(token), 0, INT_MAX) -#define OptMulR(rule) std::make_shared(rule, 0, INT_MAX) -// multi+ -#define MultiR(rule) std::make_shared(rule, 1, INT_MAX) -// opt? -#define OptR(rule) std::make_shared(rule, 0, 1) - using namespace lib_composit; void point_nmset(std::shared_ptr inst, std::shared_ptr token) { @@ -83,10 +50,9 @@ void rank_set(std::shared_ptr inst, std::shared_ptr, TokenRn, TokenRn, TokenRn>>; -class DeclExpr : public ElementRule { +class DeclSyntax : public ElementRule { public: - DeclExpr() : ElementRule( - "decl_section", std::make_shared()) { } + DeclSyntax() : ElementRule("decl_section") { } // 通过 ElementRule 继承 QList> expr_rule_parse(std::shared_ptr cursor) const override { @@ -95,14 +61,13 @@ public: }; -using PointSyntaxDef = lib_composit::SeqsR< - TokenRn, TokenRn, TokenR, - Opt, + +using PointSyntaxDef = lib_composit::SeqsR, TokenRn, TokenR, + Opt, TokenRn>; -class PointSyntax : public ElementRule { +class PointSyntax : public ElementRule { public: - PointSyntax() : ElementRule( - "point_define", std::make_shared()) { } + PointSyntax() : ElementRule("point_define") { } // 通过 ElementRule 继承 QList> expr_rule_parse(std::shared_ptr cursor) const override { @@ -111,14 +76,13 @@ public: }; -using ReferSyntaxDef = lib_composit::SeqsR< - TokenRn, TokenRn, TokenRn, TokenR, TokenRn, TokenR, TokenRn, TokenR, - Opt, + +using ReferSyntaxDef = lib_composit::SeqsR, TokenRn, TokenRn, TokenR, TokenRn, TokenR, TokenRn, TokenR, + Opt, TokenRn>; -class ReferSyntax : public ElementRule { +class ReferSyntax : public ElementRule { public: - ReferSyntax() : ElementRule < PointRefers, (int) NovelNode::PointRefers>( - "point_refer", std::make_shared()) { } + ReferSyntax() : ElementRule < PointRefers, (int) NovelNode::PointRefers, ReferSyntaxDef>("point_refer") { } // 通过 ElementRule 继承 QList> expr_rule_parse(std::shared_ptr cursor) const override { @@ -127,14 +91,13 @@ public: }; -using SliceSyntaxDef = lib_composit::SeqsR< - TokenRn, TokenRn, TokenR, - lib_composit::OptMulti>, + +using SliceSyntaxDef = lib_composit::SeqsR, TokenRn, TokenR, + lib_composit::OptMulti>, TokenRn>; -class SliceSyntax : public ElementRule { +class SliceSyntax : public ElementRule { public: - SliceSyntax() : ElementRule( - "slice_define", std::make_shared()) { } + SliceSyntax() : ElementRule("slice_define") { } // 通过 ElementRule 继承 QList> expr_rule_parse(std::shared_ptr cursor) const override { @@ -143,14 +106,13 @@ public: }; -using StorySyntaxDef = lib_composit::SeqsR< - TokenRn, TokenRn, TokenR, - lib_composit::OptMulti>, + +using StorySyntaxDef = lib_composit::SeqsR, TokenRn, TokenR, + lib_composit::OptMulti>, TokenRn>; -class StorySyntax : public ElementRule { +class StorySyntax : public ElementRule { public: - StorySyntax() : ElementRule( - "story_define", std::make_shared()) { } + StorySyntax() : ElementRule("story_define") { } // 通过 ElementRule 继承 QList> expr_rule_parse(std::shared_ptr cursor) const override { @@ -160,14 +122,12 @@ public: -using ArticleSyntaxDef = lib_composit::SeqsR< - TokenRn, TokenRn, TokenR, - lib_composit::OptMulti>, +using ArticleSyntaxDef = lib_composit::SeqsR, TokenRn, TokenR, + lib_composit::OptMulti>, TokenRn>; -class ArticleSyntax : public ElementRule { +class ArticleSyntax : public ElementRule { public: - ArticleSyntax() : ElementRule( - "article_define", std::make_shared()) { } + ArticleSyntax() : ElementRule("article_define") { } // 通过 ElementRule 继承 QList> expr_rule_parse(std::shared_ptr cursor) const override { @@ -176,14 +136,13 @@ public: }; -using VolumeSyntaxDef = lib_composit::SeqsR< - TokenRn, TokenRn, TokenR, - lib_composit::OptMulti>, + +using VolumeSyntaxDef = lib_composit::SeqsR, TokenRn, TokenR, + lib_composit::OptMulti>, TokenRn>; -class VolumeSyntax : public ElementRule { +class VolumeSyntax : public ElementRule { public: - VolumeSyntax() : ElementRule( - "volume_define", std::make_shared()) { } + VolumeSyntax() : ElementRule("volume_define") { } // 通过 ElementRule 继承 QList> expr_rule_parse(std::shared_ptr cursor) const override { @@ -193,12 +152,10 @@ public: -using RankSyntaxDef = lib_composit::SeqsR< - TokenRn, TokenRn, TokenR>; -class RankSyntax : public ElementRule { +using RankSyntaxDef = lib_composit::SeqsR, TokenRn, TokenR>; +class RankSyntax : public ElementRule { public: - RankSyntax() : ElementRule( - "rank_define", std::make_shared()) { } + RankSyntax() : ElementRule("rank_define") { } // 通过 ElementRule 继承 QList> expr_rule_parse(std::shared_ptr cursor) const override { @@ -208,11 +165,10 @@ public: -using DocSyntaxDef = lib_composit::SeqsR, lib_composit::OptMulti>>; -class DocumentSyntax : public ElementRule { +using DocSyntaxDef = lib_composit::SeqsR, lib_composit::OptMulti>>; +class DocumentSyntax : public ElementRule { public: - DocumentSyntax() : ElementRule( - "decls-doc", std::make_shared()) { } + DocumentSyntax() : ElementRule("decls-doc") { } // 通过 ElementRule 继承 QList> expr_rule_parse(std::shared_ptr cursor) const override { @@ -262,15 +218,3 @@ public: // node_register(child, next_child_items); // } //} - - - -#include "syntax_templets.h" - - -void rules() { - - - AnyR, TokenRn, TokenRn, TokenRn> mmm; - ReptR decl; -}