相关疑难解决方法(0)

使用 Sethi-Ullman 算法的表达式代码生成器

给一个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++];
    }
Run Code Online (Sandbox Code Playgroud)

这是一个伪代码(来自 C 语言)如何从我未设置的内容(包括label()函数)中实现它

// K is the number of registers available
int K = 2;
void gen(AST ast) {
    if(ast.left != null && ast.right != null) {
        int …
Run Code Online (Sandbox Code Playgroud)

c compiler-construction algorithm parsing code-generation

4
推荐指数
1
解决办法
1477
查看次数