我想请求帮助完成这项任务: 我正在学习主题形式语言和编译器,我必须解决这个问题:
在PL0中,指令WRI 0 0在屏幕上显示ASCII值位于堆栈顶部的字符,并将堆栈指针的顶部减少1.假设堆栈存储了字符串(想想如何保存)。编写一系列指令,任何此类字符串都显示在屏幕上。
有人可以给我建议,怎么做?基本上,我明白,PL0是如何工作的 - PL0中的指令是什么意思,但我不知道如何处理这个练习。 非常感谢
答案 0 :(得分:0)
我的想法如下:
保存一串字符:
提示用户输入字符串的字符数。然后是一个循环运行,并且对于每次迭代,提示用户输入字符的ASCII值。
在控制台上写下字符串:
同样,当循环运行并且通过每个iteraton时,指令WRI 0 0从堆栈写入控制台顶部char。问题是字符串是旋转的(例如,指定的字符序列A,B,C将作为CBA写在控制台上)。
不幸的是我不知道如何转动字符串。我会很感激任何建议。 谢谢。
INT 0 5
&ECHO Enter length of a string:
REA 0 0
STO 0 3
LIT 0 1
STO 0 4
@loop_read LOD 0 4
LOD 0 3
OPR 0 13
JMC 0 @end_read
&ECHO Enter the ASCII code of a char:
REA 0 0
LOD 0 4
LIT 0 1
OPR 0 2
STO 0 4
JMP 0 @loop_read
@end_read LIT 0 1
STO 0 4
@loop_write LOD 0 4
LOD 0 3
OPR 0 13
JMC 0 @end_write
WRI 0 0
LOD 0 4
LIT 0 1
OPR 0 2
STO 0 4
JMP 0 @loop_write
@end_write RET 0 0