我如何 "extend" 外部解释器?

How do I "extend" the outer interpreter?

在不同的 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 控制台应用程序中,很难在 "ok" 之前避免 CRLF,因为此 CRLF 是您输入的文本的一部分。

关于新的数据格式,Recognizers RfD。它在某些 Forth 系统中实现,但尚未在 SP-Forth 中实现。

在 SP-Forth 中,您可以使用 NOTFOUND mechanism 添加自定义字格式(字解释器)。