在不同的 Forths 中,如何自定义解释器?
例如,在 SP-Forth 中,解释器总是写入堆栈内容,并且总是在打印之前生成 CR/LF:
1 2 3
Ok ( 1 2 3 )
.s
1 2 3 Ok ( 1 2 3 )
我想看看:
1 2 3 ok
.s 1 2 3 ok
通常,我希望能够定义新的数据输入,例如
4-3i
{1,2,3,4,5}
然后解释器应该存储我在扩展中定义的数据。此外,在出现错误时,我希望重置软堆栈和变量。
有任何想法吗?
在不同的 Forth 系统中,有不同的定制方式。在 SP-Forth 中,您可以为OK
向量定义另一个动作。例如,要避免打印数据堆栈状态:
: OK2 ( -- ) STATE @ IF EXIT THEN ." ok" CR ;
' OK2 TO OK
\ see the original definition in src/compiler/spf_translate.f
但是,在 Windows 控制台应用程序中“确定”之前很难避免 CRLF,因为此 CRLF 是您输入的文本的一部分。
关于新的数据格式,有识别器RfD。它在一些 Forth 系统中实现,但在 SP-Forth 中还没有实现。
在 SP-Forth 中,您可以使用NOTFOUND
机制来添加自定义单词格式(单词解释器)。