184 lines
6.6 KiB
C++
184 lines
6.6 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 TokenSL {
|
|
private:
|
|
QList<std::shared_ptr<const ast_gen::TokenAccess>> tokens_store;
|
|
|
|
public:
|
|
virtual void appendDefinedTokens(std::shared_ptr<const ast_gen::SyntaxElement> elm, QList<std::shared_ptr<const lib_token::Token> > tokens);
|
|
virtual QList<std::shared_ptr<const ast_gen::TokenAccess>> selfTokens() const;
|
|
};
|
|
|
|
|
|
class LIBSYNTAX_EXPORT TextSection : public ast_gen::SyntaxElement, public TokenSL {
|
|
private:
|
|
QString content_store;
|
|
QString file_path;
|
|
std::shared_ptr<const SyntaxElement> pnode_store;
|
|
|
|
public:
|
|
TextSection(const QString& text, const QString path, std::shared_ptr<const SyntaxElement> 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<const ast_gen::SyntaxElement> parent() const override;
|
|
virtual QList<std::shared_ptr<const ast_gen::TokenAccess> > 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<const SyntaxElement> pnode_store;
|
|
|
|
public:
|
|
FragmentRefers(const QString& story, const QString& fragment, const QString& path, std::shared_ptr<const SyntaxElement> 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<const ast_gen::SyntaxElement> parent() const override;
|
|
virtual QList<std::shared_ptr<const ast_gen::TokenAccess> > selfTokens() const override;
|
|
};
|
|
|
|
class LIBSYNTAX_EXPORT FragmentDefine : public ast_gen::SyntaxElement, public TokenSL {
|
|
private:
|
|
QString name_store;
|
|
QString path_store;
|
|
std::shared_ptr<const SyntaxElement> pnode_store;
|
|
|
|
public:
|
|
FragmentDefine(const QString& name, const QString& path, std::shared_ptr<const SyntaxElement> 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<const ast_gen::SyntaxElement> parent() const override;
|
|
virtual QList<std::shared_ptr<const ast_gen::TokenAccess> > selfTokens() const override;
|
|
};
|
|
|
|
class LIBSYNTAX_EXPORT ArticleDefine : public ast_gen::SyntaxElement, public TokenSL {
|
|
private:
|
|
QString name_store;
|
|
QString path_store;
|
|
std::shared_ptr<const SyntaxElement> pnode_store;
|
|
|
|
public:
|
|
ArticleDefine(const QString& name, const QString& path, std::shared_ptr<const SyntaxElement> 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<const ast_gen::SyntaxElement> parent() const override;
|
|
virtual QList<std::shared_ptr<const ast_gen::TokenAccess> > selfTokens() const override;
|
|
};
|
|
|
|
class LIBSYNTAX_EXPORT VolumeDefine : public ast_gen::SyntaxElement, public TokenSL {
|
|
private:
|
|
QString name_store;
|
|
QString path_store;
|
|
std::shared_ptr<const SyntaxElement> pnode_store;
|
|
|
|
public:
|
|
VolumeDefine(const QString& name, const QString& path, std::shared_ptr<const SyntaxElement> 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<const ast_gen::SyntaxElement> parent() const override;
|
|
virtual QList<std::shared_ptr<const ast_gen::TokenAccess> > 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<const SyntaxElement> pnode_store;
|
|
|
|
public:
|
|
StoryDefine(const QString name, int sort, const QString path, std::shared_ptr<const SyntaxElement> 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<const ast_gen::SyntaxElement> parent() const override;
|
|
virtual QList<std::shared_ptr<const ast_gen::TokenAccess> > selfTokens() const override;
|
|
};
|
|
|
|
class LIBSYNTAX_EXPORT Document : public ast_gen::SyntaxElement {
|
|
private:
|
|
QString path_store;
|
|
std::shared_ptr<const ast_gen::SyntaxElement> pnode_store;
|
|
|
|
public:
|
|
Document(const QString& path, std::shared_ptr<const ast_gen::SyntaxElement> 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<const ast_gen::SyntaxElement> parent() const override;
|
|
virtual QList<std::shared_ptr<const ast_gen::TokenAccess>> selfTokens() const override;
|
|
};
|
|
|
|
class LIBSYNTAX_EXPORT NovelExprsVisitor : public ast_gen::ExprVisitor {
|
|
|
|
// ExprVisitor interface
|
|
public:
|
|
virtual std::shared_ptr<const ast_gen::SyntaxElement> visit(std::shared_ptr<const ast_basic::ExprNode> expr, std::shared_ptr<const ast_gen::SyntaxElement> pnode) const override;
|
|
};
|
|
}
|