#pragma once #include "ast_gen.h" namespace example_novel { enum class NovelNode { GlobalElement = 0, TextSection = 1, FragmentRefer = 2, FragmentDefine = 3, StoryDefine = 4, Document = 5, ArticleDefine = 6, VolumeDefine = 7, RankDeclaration = 8, }; class LIBSYNTAX_EXPORT AbstractImpl : public ast_basic::ExpressionElement, public ast_gen::SyntaxElement { private: std::weak_ptr parent_store; public: explicit AbstractImpl(std::shared_ptr rule_bind); // ͨ¹ý SyntaxElement ¼Ì³Ð virtual std::shared_ptr bindExpression() const override; QString path() const override; virtual std::shared_ptr parent() const override; virtual void setParent(std::shared_ptr inst) override; virtual QList> selfTokens() const override; }; class LIBSYNTAX_EXPORT TextSection : public AbstractImpl { public: TextSection(std::shared_ptr rule_bind); QString content() const; // SyntaxElement interface public: virtual int typeMark() const override; virtual bool isAnonymous() const override; virtual QString signature() const override; virtual void cacheLoad() override; private: QString context_store; }; class LIBSYNTAX_EXPORT FragmentRefers : public AbstractImpl { public: FragmentRefers(std::shared_ptr rule_bind); QString storyRefer() const; QString fragmentRefer() const; QString referSignature() const; // SyntaxElement interface public: virtual int typeMark() const override; virtual bool isAnonymous() const override; virtual QString signature() const override; virtual void cacheLoad() override; private: QString story_refs, fragment_ref; }; class LIBSYNTAX_EXPORT FragmentDefine : public AbstractImpl { public: FragmentDefine(std::shared_ptr rule_bind); QString name() const; // SyntaxElement interface public: virtual int typeMark() const override; virtual bool isAnonymous() const override; virtual QString signature() const override; virtual void cacheLoad() override; private: QString name_store; }; class LIBSYNTAX_EXPORT ArticleDefine : public AbstractImpl { public: ArticleDefine(std::shared_ptr rule_bind); QString name() const; // SyntaxElement interface public: virtual int typeMark() const override; virtual bool isAnonymous() const override; virtual QString signature() const override; virtual void cacheLoad() override; private: QString name_store; }; class LIBSYNTAX_EXPORT VolumeDefine : public AbstractImpl { public: VolumeDefine(std::shared_ptr rule_bind); QString name() const; // SyntaxElement interface public: virtual int typeMark() const override; virtual bool isAnonymous() const override; virtual QString signature() const override; virtual void cacheLoad() override; private: QString name_store; }; class LIBSYNTAX_EXPORT StoryDefine : public AbstractImpl { public: StoryDefine(std::shared_ptr rule_bind); QString name() const; void setSort(int value); int sort() const; // SyntaxElement interface public: virtual int typeMark() const override; virtual bool isAnonymous() const override; virtual QString signature() const override; virtual void cacheLoad() override; private: QString name_store; int sort_index; }; class LIBSYNTAX_EXPORT Document : public AbstractImpl { public: Document(std::shared_ptr rule_bind); // SyntaxElement interface public: virtual int typeMark() const override; virtual bool isAnonymous() const override; virtual QString signature() const override; virtual void cacheLoad() override; }; class LIBSYNTAX_EXPORT RankDeclare : public AbstractImpl { private: int page_rank = 0; public: RankDeclare(std::shared_ptr rule); int rankNumber() const; // ͨ¹ý AbstractImpl ¼Ì³Ð int typeMark() const override; bool isAnonymous() const override; QString signature() const override; void cacheLoad() override; }; }