用java中的ANTLR格式化jasmin的输出


int addr = gen_address();
$code.addr = addr;
$code.append(
ldc(44),
istore(addr),
"getstatic java/lang/System/out Ljava/io/PrintStream;",
iload(addr),
"invokevirtual java/io/PrintStream/print(I)V");
int addr = gen_address();
$code.addr = addr;
$code.append(
ldc(22),
istore(addr),
"getstatic java/lang/System/out Ljava/io/PrintStream;",
iload(addr),
"invokevirtual java/io/PrintStream/print(I)V");

该语法将输出一个数字4422
但输出将类似于(4422)

我想在数字之间加一个空格,这样输出就会是(44 22)

我认为需要改变一些东西

"invokevirtual java/io/PrintStream/print(I)V");

这并不容易理解:你的代码接缝是ANTLR操作代码,对吧?你的编译器会生成一个jasmin(java汇编程序)文件,对吧?您稍后执行此文件时希望看到(44 22)?

因此,如果你检查jasmin代码,你会发现你从来没有打印出一个空格。

一个选项:invokevirtual java/io/PrintStream/print(I)V更改为invokevirtual java/io/PrintStream/print(Ljava/lang/String)V;然而,您必须为此步骤准备参数,22是一个整数,您必须将其转换为"22",这是大量的jasmin代码。

更好的选择(从我的角度来看):在两个语句之间插入invokevirtual java/io/PrintStream/print(C)V。在调用之前,必须在堆栈上推送"(空格字符)。

相关内容

  • 没有找到相关文章

最新更新