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");
该语法将输出一个数字44
和22
但输出将类似于(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
。在调用之前,必须在堆栈上推送"(空格字符)。