2

有没有办法改变HERE指向的内容,或者其他方式来确保我编译的下一个定义最终会出现在某个特殊位置?或者我可以将定义复制到其他地方吗?理想情况下,我希望在 ANS Forth 中有一个解决方案,但 Gforth 特定的东西就足够了。

4

1 回答 1

3

您可以使用ALLOT在两个方向上移动数据空间指针:

: here! ( a -- )   here - allot ;

至于 gforth,这个更简单的版本应该可以工作:

: here!   dp ! ;

话虽如此,这里不一定是编译新单词的地方。HERE 指向数据空间,而定义写入名称空间代码空间。然而,在像 Gforth 这样的传统设计中,这三个是一个连续的区域。参见DPANS94 3.3

于 2014-09-03T05:43:13.473 回答