gpt4 book ai didi

java - 如何将三地址码(TAC)转换为Java字节码?

转载 作者:行者123 更新时间:2023-12-02 02:30:22 26 4
gpt4 key购买 nike

我想将普通的三地址代码文件转换为 Java 字节码。已经有一些与此主题相关的问题,但没有得到解答 properlyquestion远远超出了我正在寻找的范围。

以《龙书》中的编译器前端生成的这段代码为例:

L1:L3:  i = i + 1
L5: t1 = i * 8
t2 = a [ t1 ]
if t2 < v goto L3
L4: j = j - 1

它在字节码中是什么样子?我需要重建符号表来进行翻译吗?如果有人能像 blackcompe 在 answer 中所做的那样描述它,那将非常有帮助。 (我知道 JVM 是一台堆栈机,而不是寄存器机)。

最佳答案

这是我用字节码编写代码的方法。但这只是一种方法,而且这个问题是相当开放性的。我假设除了 a 之外所有变量都是整数。如果它们是不同的类型,所需的代码显然会有所不同。

; assume i, j, a, and v are in slots 0-3 respectively
L3:
iinc 0 1
iload_0
bipush 8
imul
; store t1 in a variable for simplicity - you could simplify the code by eliminating the temporary
istore 4
aload_2
iload 4
iaload
istore 5
iload 5
iload_3
if_lt L3
iinc 1 -1

正如前面提到的,这是一个非常开放式的问题。例如,上面的代码显式地将临时变量存储到本地槽(也称为“寄存器”)中,以便与代码完全匹配。但是您可以通过重新安排内容来简化代码以避免临时情况,如下所示

; assume i, j, a, and v are in slots 0-3 respectively
L3:
iinc 0 1
aload_2
iload_0
bipush 8
imul
iaload
iload_3
if_lt L3
iinc 1 -1

关于java - 如何将三地址码(TAC)转换为Java字节码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47215612/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com