如何将三地址代码转换为 MIPS 汇编语言?

use*_*653 2 c++ compiler-construction assembly mips

我正在做一个项目,在该项目中我必须创建一个可以为 C 代码生成 MIPS 汇编代码的翻译器。我使用的编程语言是 C++,我已经完成了三个地址代码的生成,并且对如何进一步进行感到非常困惑。

bla*_*mpe 5

如前所述,它是直接翻译。真的没什么好说的。以如下三地址代码为例:

      i := 0                  ; assignment
L1:   if i >= 10 goto L2      ; conditional jump
      t0 := i*i
      t1 := &b                ; address-of operation
      t2 := t1 + i            ; t2 holds the address of b[i]
      *t2 := t0               ; store through pointer
      i := i + 1
      goto L1
L2:
Run Code Online (Sandbox Code Playgroud)

MIPS 翻译是:

        li $t0, 0             #allocator assigned i to t0
L1:     bge $t0, 10, L2    
        mult $t1, $t0, $t0  
        la $t2, b             
        add $t3, $t2, $t0   
        sw $t1, ($t3)       
        addi $t0, $t0, 1
        j L1
L2:
Run Code Online (Sandbox Code Playgroud)

如果你有幸拥有这样的三个地址,你几乎不需要做任何事情。找到与指令对应的操作码。寄存器分配已经完成。如果三地址代码实际上是一堆字符串,我会考虑编写一个小型解析器(使用生成器),而不是尝试从字符串中提取信息。