给一个AST树,我想生成一个类似汇编的语言。我正在尝试使用Sethi-Ullman算法,但我在算法实现中有一些问题。
目前我执行以下操作:
发出一个push REGwhereREG是右子树的寄存器,评估左子树,得到一个空闲的寄存器分配为右子树的寄存器,然后也发出一个POP REG操作 whereREG是右子树的寄存器。
enum Reg { Reg_r0, Reg_r1 };
Reg regs[] = { Reg_r0, Reg_r1 };
    Reg getreg() {
             static int c;
        if(c == sizeof(regs) / sizeof(int))
        c = 0;
        return regs[c++];
    }
这是一个伪代码(来自 C 语言)如何从我未设置的内容(包括label()函数)中实现它
// K is the number of registers available
int K = 2;
void gen(AST ast) {
    if(ast.left != null && ast.right != null) {
        int …