📄 codegen.h
字号:
////////////////////////////////////////////////////////////////////////////////// codegen.[h,cc] -- naive code generation//#ifndef CODEGEN_H#define CODEGEN_H#include <fstream>#define FIRST_REG 0#define LAST_REG 31typedef unsigned mips_register_t; // FIRST_REG..LAST_REGtypedef char mips_name_t[8];typedef enum mips_location_t { R_UNKNOWN, // Data isn't anywhere R_REGISTER, // Data is in a register R_NUMBER, // Data is to be inlined as a number R_OFFSET, // Data is at an offset from a register R_LABEL // Data is global and has a label};////////// extra fields of a syntax tree record, used only for code generation//struct syntax_code_t { mips_register_t result_register; // used for expressions mips_location_t result_place; // " int result_value; // value if R_NUMBER unsigned registers_used; // set of mips_register_t // if we were doing optimization, this record could hold lots of other // things, such as def-use chains or live value sets};////////// extra fields of a symbol table record, used only for code generation//class symbol_code_t {public: mips_location_t data_place; // How to access data? union { mips_name_t label; // Global label for data. struct { mips_register_t reg; // Register to offset from. int pos; // Bytes from register to data. } offset; } where; // Where to find data?};extern ofstream code;void generate_code(const char * file_name);// Traverse abstract syntax tree and send output to file file_name.#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -