formalang/include/regular/RegularTree.hpp
2021-09-27 03:12:08 +03:00

43 lines
774 B
C++

#pragma once
#include <variant>
#include <vector>
#include <memory>
#include <string>
#include <string_view>
namespace regular {
class RegularTree {
public:
class Node {
public:
enum class Type {
Addition, Concatenation, Word
};
enum class Modifier {
Plus, Star, None
};
Node();
Node(Type);
void Parse(const std::string&);
void Print() const;
std::vector<std::unique_ptr<Node>> children;
std::string word;
Type type;
Modifier modifier = Modifier::None;
private:
void ParseCurrentType(const std::string_view);
void Compression();
void Print(int nesting_level) const;
};
RegularTree(const std::string&);
const Node& GetNode() const;
void Print() const;
private:
Node node_;
};
}