#pragma once #include "ast_gen.h" namespace example_novel { enum class NovelNode { TextSection = 1, FragmentRefer = 2, FragmentDefine = 3, StoryDefine = 4, Document = 5, ArticleDefine = 6, VolumeDefine = 7, }; class LIBSYNTAX_EXPORT TokenSL { private: QList> tokens_store; public: virtual void appendDefinedTokens(std::shared_ptr elm, QList > tokens); virtual QList> selfTokens() const; }; class LIBSYNTAX_EXPORT TextSection : public ast_gen::SyntaxElement, public TokenSL { private: QString content_store; QString file_path; std::shared_ptr pnode_store; public: TextSection(const QString& text, const QString path, std::shared_ptr parent); QString content() const; // SyntaxElement interface public: virtual int typeMark() const override; virtual bool isAnonymous() const override; virtual QString path() const override; virtual QString signature() const override; virtual std::shared_ptr parent() const override; virtual QList > selfTokens() const override; }; class LIBSYNTAX_EXPORT FragmentRefers : public ast_gen::SyntaxElement, public TokenSL { private: QString story_ref; QString fragm_ref; QString path_store; std::shared_ptr pnode_store; public: FragmentRefers(const QString& story, const QString& fragment, const QString& path, std::shared_ptr parent); QString storyRefer() const; QString fragmentRefer() const; QString referSignature() const; // SyntaxElement interface public: virtual int typeMark() const override; virtual bool isAnonymous() const override; virtual QString path() const override; virtual QString signature() const override; virtual std::shared_ptr parent() const override; virtual QList > selfTokens() const override; }; class LIBSYNTAX_EXPORT FragmentDefine : public ast_gen::SyntaxElement, public TokenSL { private: QString name_store; QString path_store; std::shared_ptr pnode_store; public: FragmentDefine(const QString& name, const QString& path, std::shared_ptr parent); QString name() const; // SyntaxElement interface public: virtual int typeMark() const override; virtual bool isAnonymous() const override; virtual QString path() const override; virtual QString signature() const override; virtual std::shared_ptr parent() const override; virtual QList > selfTokens() const override; }; class LIBSYNTAX_EXPORT ArticleDefine : public ast_gen::SyntaxElement, public TokenSL { private: QString name_store; QString path_store; std::shared_ptr pnode_store; public: ArticleDefine(const QString& name, const QString& path, std::shared_ptr parent); QString name() const; // SyntaxElement interface public: virtual int typeMark() const override; virtual bool isAnonymous() const override; virtual QString path() const override; virtual QString signature() const override; virtual std::shared_ptr parent() const override; virtual QList > selfTokens() const override; }; class LIBSYNTAX_EXPORT VolumeDefine : public ast_gen::SyntaxElement, public TokenSL { private: QString name_store; QString path_store; std::shared_ptr pnode_store; public: VolumeDefine(const QString& name, const QString& path, std::shared_ptr parent); QString name() const; // SyntaxElement interface public: virtual int typeMark() const override; virtual bool isAnonymous() const override; virtual QString path() const override; virtual QString signature() const override; virtual std::shared_ptr parent() const override; virtual QList > selfTokens() const override; }; class LIBSYNTAX_EXPORT StoryDefine : public ast_gen::SyntaxElement, public TokenSL { private: QString name_store; int sort_index; QString path_store; std::shared_ptr pnode_store; public: StoryDefine(const QString name, int sort, const QString path, std::shared_ptr parent); QString name() const; int sort() const; // SyntaxElement interface public: virtual int typeMark() const override; virtual bool isAnonymous() const override; virtual QString path() const override; virtual QString signature() const override; virtual std::shared_ptr parent() const override; virtual QList > selfTokens() const override; }; class LIBSYNTAX_EXPORT Document : public ast_gen::SyntaxElement { private: QString path_store; std::shared_ptr pnode_store; public: Document(const QString& path, std::shared_ptr pnode); // SyntaxElement interface public: virtual int typeMark() const override; virtual bool isAnonymous() const override; virtual QString path() const override; virtual QString signature() const override; virtual std::shared_ptr parent() const override; virtual QList> selfTokens() const override; }; class LIBSYNTAX_EXPORT NovelExprsVisitor : public ast_gen::ExprVisitor { // ExprVisitor interface public: virtual std::shared_ptr visit(std::shared_ptr expr, std::shared_ptr pnode) const override; }; }