8

为什么 Forth 使用 IF 语句 THEN ... 而不是 ENDIF?

我正在实现一个(不符合标准的)Forth 编译器。基本上,对于 IF 语句,Forth 的语法对我来说似乎非常违反直觉。

IF ."Statement is true"
ELSE ."Statement is not true"
THEN ."Printed no matter what;

为什么结尾语句是 a THEN?这让我的语言读起来非常奇怪。对于我的编译器,我正在考虑将其更改为ENDIF读起来更自然的东西。但是,首先使用反向 IF-THEN 语句的理由是什么?

4

1 回答 1

11

把它想象成,“IF就是这样,做这个,ELSE做那个......然后THEN继续......”

或者更好的是,使用引号(如FactorRetroForth,...)在这种情况下,它完全是后缀,没有特殊的编译时单词;只是从堆栈中获取地址的常规单词:[ do this ] [ do that ] ifor [ do this ] whenor [ do that ] unless. 我个人更喜欢这个。

除了 RE:报价

以下是在 RetroForth 中如何编译引文。在我自己的 Forth(编译到我自己的 VM)中,我简单地添加了一条QUOTE指令,将下一个地址推入堆栈并跳过 n 字节。n 字节应由RETURN指令终止,并且if, when,unless字使用谓词以及前面引号留下的地址;酌情调用。确实非常简单,并且引用通常为各种美丽的抽象打开了大门,而无需考虑堆栈。

于 2012-09-22T22:32:24.000 回答