diff options
Diffstat (limited to 'include/cru')
-rw-r--r-- | include/cru/parse/ParsingTreeNode.hpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/include/cru/parse/ParsingTreeNode.hpp b/include/cru/parse/ParsingTreeNode.hpp new file mode 100644 index 00000000..d1c3d058 --- /dev/null +++ b/include/cru/parse/ParsingTreeNode.hpp @@ -0,0 +1,33 @@ +#pragma once +#include "Grammar.hpp" + +#include <vector> + +namespace cru::parse { +class ParsingTreeNode { + public: + ParsingTreeNode(Symbol* symbol, Production* production); + + CRU_DELETE_COPY(ParsingTreeNode) + CRU_DELETE_MOVE(ParsingTreeNode) + + // In destructor, it will delete all children. + ~ParsingTreeNode(); + + public: + Symbol* GetSymbol() const { return symbol_; } + Production* GetProduction() const { return production_; } + Grammar* GetGrammar() const; + + const std::vector<ParsingTreeNode*>& GetChildren() const { return children_; } + + void AddChild(ParsingTreeNode* child); + void AddChild(ParsingTreeNode* child, Index index); + void RemoveChild(Index index); + + private: + Symbol* symbol_; + Production* production_; + std::vector<ParsingTreeNode*> children_; +}; +} // namespace cru::parse |