Формат вывода на жасмин с ANTLR в Java
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");
1 ответ
Его нелегко понять: ваш код выглядит как код действия ANTLR, верно? Ваш компилятор генерирует файл jasmin (Java-ассемблер), верно? И вы позже выполните этот файл, и вы ожидаете увидеть (44 22
)?
Поэтому, если вы изучите код жасмина, вы обнаружите, что никогда не печатали пробел.
Один вариант: изменить invokevirtual java/io/PrintStream/print(I)V
в invokevirtual java/io/PrintStream/print(Ljava/lang/String)V;
Тем не менее, вам придется подготовить аргументы для этого шага, 22 - это целое число, и вы должны преобразовать его в " 22", что является большим количеством кода жасмина.
Лучший вариант (с моей точки зрения): вставить invokevirtual java/io/PrintStream/print(C)V
между двумя утверждениями. Вы должны нажать ' ' (пробел) в стеке, прежде чем вызывать.