我如何 "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 添加自定义字格式(字解释器)。
在不同的 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 添加自定义字格式(字解释器)。