为什么Forth使用IF语句那么......而不是ENDIF?
我正在实现一个(不符合的)Forth编译器。基本上,就IF语句而言,Forth的语法对我来说非常直观。
IF ."Statement is true"
ELSE ."Statement is not true"
THEN ."Printed no matter what;
为什么结尾语句为THEN
?这使得语言对我来说非常奇怪。对于我的编译器,我正在考虑将其更改为类似ENDIF
的更自然的内容。但是,首先反复IF-THEN声明背后的理由是什么?
答案 0 :(得分:7)
只需将其视为“IF
就是这样,执行此操作,ELSE
这样做...... THEN
继续......”
或者更好的是,使用引号(如Factor,RetroForth,...),在这种情况下,它完全是后缀,没有特殊的编译时单词;只需从堆栈中获取地址的常规字词:[ do this ] [ do that ] if
或[ do this ] when
或[ do that ] unless
。我个人更喜欢这个。
除了RE:语录
这是how quotations are compiled in RetroForth。在我自己的Forth(编译到我自己的VM)中,我只是添加了一条QUOTE
指令,将下一个地址推送到堆栈并跳过n字节。预期n字节由RETURN
指令终止,if
,when
,unless
字消耗谓词以及前面留下的地址报价;酌情打电话。确实非常简单,引用通常为all kinds of beautiful abstractions away from thinking about the stack打开了大门。