在不同的Forth中,如何自定义解释器?
例如,在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}
然后,解释器应该存储我在扩展中定义的数据。此外,在错误上,我希望重置软堆栈和变量。
有什么想法吗?
答案 0 :(得分: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
尽管如此,在" ok"之前很难避免CRLF。在Windows控制台应用程序中,因为此CRLF是您输入的文本的一部分。
关于新的数据格式,有Recognizers RfD。它在一些Forth系统中实现,但在SP-Forth中尚未实现。
在SP-Forth中,您可以使用NOTFOUND
mechanism添加自定义单词格式(单词解释器)。