#ifndef PARSER_NODE_HPP #define PARSER_NODE_HPP #include <memory> #include <token.hpp> namespace parser { class Node { public: Node(const xtokenizer::Token &token, std::unique_ptr<Node> lhs = nullptr, std::unique_ptr<Node> rhs = nullptr); Node(Node &&other) noexcept; Node(const Node &) = delete; Node &operator=(const Node &) = delete; virtual ~Node(); virtual void dump(); virtual void dump(const std::unique_ptr<Node> &node, int depth = 0); const xtokenizer::Token &token; // ノードのトークン std::unique_ptr<Node> lhs; // 左辺 std::unique_ptr<Node> rhs; // 右辺 static std::unique_ptr<Node> create(const xtokenizer::Token &token, std::unique_ptr<Node> lhs = nullptr, std::unique_ptr<Node> rhs = nullptr); }; } // namespace parser #endif // PERSER_NODE_HPP