#ifndef YERBACON_PARSECOMPONENTS_HPP #define YERBACON_PARSECOMPONENTS_HPP #include #include using namespace std; #include "../lex.hpp" class ParseComponent {}; struct ParseTree: public ParseComponent { private: mutable unsigned int compCount = 0; inline void addComp(const auto& comp) const { subComponents.push_back(comp); ++compCount; }; inline void addAllComps(auto& comps) { for (const auto& comp: comps) addComp(comp); } protected: mutable vector subComponents; public: unsigned int& getCompCount() const { return compCount; } auto& getComponents() const { return subComponents; } void add(const ParseComponent& component) { addComp(component); }; void addAll(const vector& components) { } void operator<<(const ParseComponent& component) { this->addComp(component); } explicit ParseTree(const ParseComponent& element): subComponents() { addComp(element); } ParseTree(const initializer_list& elements): subComponents() { addAllComps(elements); } ParseTree(): subComponents() {}; ~ParseTree() = default; }; #endif //YERBACON_PARSECOMPONENTS_HPP