Newer
Older
libj / modules / parser / include / node.hpp
Nomura Kei on 31 Dec 890 bytes 一時保存
#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