#pragma once #include "Base.h" #include #include namespace cru::parse { class Grammar; // Base class of Terminal and Nonterminal. class CRU_PARSE_API Symbol : public Object { public: explicit Symbol(Grammar* grammar, std::string name); CRU_DELETE_COPY(Symbol) CRU_DELETE_MOVE(Symbol) ~Symbol() override; public: Grammar* GetGrammar() { return grammar_; } std::string GetName() const { return name_; } void SetName(std::string name) { name_ = std::move(name); } private: Grammar* grammar_; std::string name_; }; } // namespace cru::parse