0
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");
4

1 回答 1

0

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

因此,如果您检查 jasmin 代码,您会发现您从未打印出空格。

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

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

于 2015-04-11T11:11:15.340 回答