#ifndef ASTNODE_H #define ASTNODE_H #include #include #include #include "../semantic/visitor.h" #include "scope.hpp" #include "tools.h" class ASTNodeBase { friend Visitor; friend std::shared_ptr CheckAndDecorate(std::shared_ptr src); protected: std::shared_ptr current_scope; ASTNodeType type; // std::vector> children; size_t start_line, start_char_pos, end_line, end_char_pos; public: virtual ~ASTNodeBase() = default; virtual void accept(class ASTNodeVisitorBase *visitor) = 0; }; class ASTNodeVisitorBase { friend Visitor; public: virtual ~ASTNodeVisitorBase() = default; void visit(ASTNodeBase *context) { context->accept(this); } }; #endif