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