#ifndef PCC_BASENODE_H #define PCC_BASENODE_H #include #include "Context.hh" #include "Traveler.hh" namespace pcc { class BaseNode { public: BaseNode(Context* context); virtual Value CodeGen() = 0; virtual int Travel(Traveler& traveler) = 0; protected: Context* context_; }; class FunctionNode; class DeclNode; class ProgramNode : public BaseNode { public: ProgramNode(Context* context, std::string&& name, std::list>&& GlobalDeclarations, std::list>&& functions); virtual Value CodeGen() override; virtual int Travel(Traveler& traveler) override; protected: std::string name_; std::list> GlobalDeclarations_; std::list> functions_; }; } // namespace pcc #endif