diff options
author | crupest <crupest@outlook.com> | 2021-12-21 15:13:55 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2021-12-21 15:13:55 +0800 |
commit | 061f9ad04131febcc66975fd3d95b332789da52f (patch) | |
tree | ecd33d0eefdd4fc124f081512906adb9c235dd50 /include/cru | |
parent | 360a3bdbc9cf7084d9f1f1af09ea99831edffd34 (diff) | |
download | cru-061f9ad04131febcc66975fd3d95b332789da52f.tar.gz cru-061f9ad04131febcc66975fd3d95b332789da52f.tar.bz2 cru-061f9ad04131febcc66975fd3d95b332789da52f.zip |
...
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 |