PL0解释器 - 在屏幕上写字符串

时间:2014-11-08 01:17:51

标签: compiler-construction interpreter

我想请求帮助完成这项任务: 我正在学习主题形式语言和编译器,我必须解决这个问题:

在PL0中,指令WRI 0 0在屏幕上显示ASCII值位于堆栈顶部的字符,并将堆栈指针的顶部减少1.假设堆栈存储了字符串(想想如何保存)。编写一系列指令,任何此类字符串都显示在屏幕上。

有人可以给我建议,怎么做?基本上,我明白,PL0是如何工作的 - PL0中的指令是什么意思,但我不知道如何处理这个练习。 非常感谢

1 个答案:

答案 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