⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 codegen.h

📁 PL/0源码
💻 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 + -