126 lines
3.8 KiB
C++
126 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;
|
|
};
|
|
|
|
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;
|
|
};
|
|
|
|
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;
|
|
};
|
|
|
|
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;
|
|
};
|
|
|
|
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;
|
|
};
|
|
|
|
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;
|
|
};
|
|
|
|
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;
|
|
};
|
|
}
|