我如何“扩展”外部翻译?

时间:2016-02-12 11:57:45

标签: forth gforth

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

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

有什么想法吗?

1 个答案:

答案 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添加自定义单词格式(单词解释器)。