forth - 如何退出 Forth 环境?
问题描述
如果我在 Forth 环境中,我该如何离开,以及如何编写一个单词来离开?
解决方案
有两种方法可以“离开”Forth 代码,这取决于你需要做什么。
BYE
Forth 标准定义了BYE
离开 Forth 环境本身的词。
BYE
( -- )
将控制权返回给主机操作系统(如果有)。
当您的 Forth不是作为程序在操作系统中运行时,这个词得到了很多创造性的解释。例如,在某些以 Forth为操作系统BYE
的系统上,会导致系统重新启动,从而让您加载另一个操作系统。
BYE
是编程工具扩展字集的一部分。
QUIT
核心词集中有一个词叫做QUIT
,但它并没有离开环境。相反,它会留下一个单词的执行并将您返回给解释器。这就是为什么它被称为“退出”,它是另一种意义上的退出。
QUIT
( -- ) ( R: i * x -- )
清空返回堆栈,SOURCE-ID
如果存在则存储零,使用户输入设备成为输入源,并进入解释状态。不显示消息。重复以下操作:
- 接受来自输入源的一行到输入缓冲区,设置
>IN
为零,然后解释。- 如果处于解释状态,则显示实现定义的系统提示,所有处理都已完成,并且不存在歧义条件。
而不是定义QUIT
为“这个词将您返回到解释器”之类的东西,而是在 Forth 标准中QUIT
真正定义为解释器本身。在一个分解的 Forth 实现中,这是有道理的:让你回到解释器的词和解释器本身可以是同一个词,它们都可以清除返回堆栈并开始解释。
并且QUIT
是您更可能在冒号定义中看到使用的单词,因为它是一种方便的方法,可以打破单词执行堆栈,保持数据堆栈的当前内容不变,然后返回到解释器。当然,您可以BYE
在冒号定义中使用,例如在自定义解释器或用 Forth 编写的环境中退出回到操作系统。
推荐阅读
- java - 使用单元方法捕获多个异常
- mysql - 如果在同一查询中的另一个结果行中满足条件,是否有办法减少一个结果行中的值
- javascript - 我使用 AngularJS 的 js 文件有问题:“错误:[ng:areq]”
- python - 如何在 IBM Watson Visual Recognition with Python 中使用变量创建类(不是分类器)?
- php - 日光浴室建议器返回 0 结果
- android - 使用 Xamarin.GooglePlayServices.Vision 进行 QR 扫描不起作用
- c++ - 将 Make/Ninja 警告记录到文件中
- android - 如何在xml文件数据绑定android中获取实时数据的值
- c# - 如何从通用列表的特定索引中查找不同的值
- spring - 如何检查 mockMvc 响应标头是否是响应的一部分的 MD5 表示?