2016-02-12 72 views
3

以不同的方式,我如何定製解釋器?如何「擴展」外部解釋器?

例如,在SP-提出的解釋總是寫堆棧內容並始終在打印前進行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

在不同的Forth系統中,有不同的定製方式。 在SP-Forth中,您可以爲OK矢量定義另一個動作。例如,爲了避免打印數據疊加狀態:

: OK2 (--) STATE @ IF EXIT THEN ." ok" CR ; 
' OK2 TO OK 
\ see the original definition in src/compiler/spf_translate.f 

雖然,這是難以避免的CRLF之前在Windows控制檯應用程序「確定」,因爲這是CRLF文本,你輸入的一部分。

關於新的數據格式有Recognizers RfD。它在一些Forth系統中實施,但尚未在SP-Forth中實施。

在SP-Forth中,您可以使用NOTFOUND mechanism來添加自定義字格式(單詞解釋器)。