#pragma once #include #include #include "node.hpp" class Codegen; class Environ; struct DeclSeqNode; struct StmtSeqNode; struct UserFunc { std::string ident, proc, lib; UserFunc(const UserFunc& t); UserFunc(const std::string& id, const std::string& pr, const std::string& lb); }; class ProgNode : public Node { std::shared_ptr consts; std::shared_ptr structs; std::shared_ptr funcs; std::shared_ptr datas; std::shared_ptr stmts; std::shared_ptr sem_env; std::string file_lab; public: ProgNode(std::shared_ptr constants, std::shared_ptr structures, std::shared_ptr functions, std::shared_ptr datas, std::shared_ptr statements); ~ProgNode(); std::shared_ptr semant(Environ* e); void translate(Codegen* g, const std::vector& userfuncs); };