3

在不同的 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}

然后解释器应该存储我在扩展中定义的数据。此外,在出现错误时,我希望重置软堆栈和变量。

有任何想法吗?

4

1 回答 1

4

在不同的 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机制来添加自定义单词格式(单词解释器)。

于 2016-02-17T21:01:40.793 回答