#pragma once #include "grammer.h" #include "minicc.h" #include class CPP { public: CPP(); ~CPP(); std::string valueOfNode(index_t node_index, const std::vector& Tree); // phases of translation, according to standard void source_charset_map(); // phase 1 void backslash_escape(); // phase 2 std::vector preprocessing_tokenize(const std::string& s); // phase 3 void preprocess(); // phase 4 void execution_charset_map(); // phase 5 void concatenate_strings(); // phase 6 std::vector tokens_from_pptokens(const std::vector& pp_tokens); // phase 7.a std::vector analysis(const std::vector&); // phase 7.b void translate(); // phase 7.c void instantiate(); // phase 8 void link(); // phase 9 // all phases of translation void compile(const std::string& code); std::vector getCode(); std::vector getData(); private: typedef std::unordered_map> map_type; std::string m_code; // input from compile() std::vector m_tokens; // result of phase 7.a std::vector m_nodes; // result of phase 7.b void traverse(index_t node_id, map_type& map, fs::path parent_path = "/"); CPP::map_type map_translation_unit; };