Add compress regular tree
This commit is contained in:
parent
f3848d88b3
commit
8e014193cc
|
@ -28,6 +28,7 @@ class RegularTree {
|
|||
Modifier modifier = Modifier::None;
|
||||
private:
|
||||
void ParseCurrentType(const std::string_view);
|
||||
void Compression();
|
||||
void Print(int nesting_level) const;
|
||||
};
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ RegularTree::Node::Node(Type type) : type(type) {}
|
|||
void RegularTree::Node::Parse(const std::string& regular) {
|
||||
type = Type::Addition;
|
||||
ParseCurrentType(std::string_view(regular.c_str(), regular.size()));
|
||||
Compression();
|
||||
}
|
||||
|
||||
void RegularTree::Node::Print() const {
|
||||
|
@ -135,6 +136,16 @@ void RegularTree::Node::ParseCurrentType(const std::string_view regular) {
|
|||
}
|
||||
}
|
||||
|
||||
void RegularTree::Node::Compression() {
|
||||
for (auto& i: children) {
|
||||
i->Compression();
|
||||
}
|
||||
if (children.size() == 1 && modifier == Modifier::None) {
|
||||
auto tmp = std::move(*children[0]);
|
||||
*this = std::move(tmp);
|
||||
}
|
||||
}
|
||||
|
||||
void RegularTree::Node::Print(int nesting_level) const {
|
||||
auto PrintNesingLevel = [](int nesting_level) {
|
||||
for (int i = 0; i < nesting_level; ++i) {
|
||||
|
|
Loading…
Reference in a new issue