如何在Forth中基于栈上的字符串创建新单词?
问题解答
1. 用parse-name配合create是否可行?
可行,但要注意parse-name返回的是字符串的地址与长度,而create默认从输入流读取名字。你可以通过将parse-name获取的字符串写入词典缓冲区,再调用create来实现,示例代码:
: create-from-parsed ( addr len -- ) >r buffer: temp r@ temp swap move temp r@ c! temp create ;
2. 能否借助evaluate实现?
完全可以。evaluate的核心作用就是执行字符串形式的Forth代码,你只需要把create关键字和parse-name得到的字符串拼接成合法的命令字符串,再交给evaluate执行即可,示例代码:
: create-via-evaluate ( addr len -- ) s" create " swap evaluate ;
这种方式更直观,无需操作底层缓冲区,但要保证拼接后的字符串是合法的Forth名字,避免特殊字符引发解析错误。
内容的提问来源于stack exchange,提问作者Olle Härstedt
相关产品推荐
相关产品推荐

