WsParser_VS/libSyntax/ast_novel.h

152 lines
3.8 KiB
C++

#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 AbstractImpl :
public ast_basic::ExpressionElement, public ast_gen::SyntaxElement {
private:
std::shared_ptr<const SyntaxElement> parent_store = nullptr;
public:
explicit AbstractImpl(std::shared_ptr<const lib_syntax::ExpressionRule> rule_bind);
// ͨ¹ý SyntaxElement ¼Ì³Ð
virtual std::shared_ptr<const ast_basic::Expression> bindExpression() const override;
QString path() const override;
virtual std::shared_ptr<const ast_gen::SyntaxElement> parent() const override;
virtual void setParent(std::shared_ptr<const ast_gen::SyntaxElement> inst) override;
virtual QList<std::shared_ptr<const ast_gen::TokenAccess>> selfTokens() const override;
};
class LIBSYNTAX_EXPORT TextSection : public AbstractImpl {
public:
TextSection(std::shared_ptr<const lib_syntax::ExpressionRule> 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<const lib_syntax::ExpressionRule> 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<const lib_syntax::ExpressionRule> 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<const lib_syntax::ExpressionRule> 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<const lib_syntax::ExpressionRule> 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<const lib_syntax::ExpressionRule> rule_bind);
QString name() const;
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<const lib_syntax::ExpressionRule> rule_bind);
// SyntaxElement interface
public:
virtual int typeMark() const override;
virtual bool isAnonymous() const override;
virtual QString signature() const override;
virtual void cacheLoad() override;
};
}