对Forth的更高层次的解释

时间:2016-09-25 22:06:12

标签: operators interpreter vm-implementation forth

序言

第四,通过我读过的几本手册,通常用非常低级的术语来定义,通常是在装配中。以这种方式定义Forth对于理解实现是非常反直觉的,并且真正只是为了将Forth的基于汇编或其他基于低级语言的端口编写到不同的系统/体系结构中而感到高兴。

这可以在着名的JonesForth中看到,在那里他实现了在装配速度时不必实现的单词,并且模糊了装配结束和Forth开始之间的界限。

Starting Forth是一个更好的工作,以一种更容易理解的方式解释Forth,但是,因为它适用于教授Forth本身,所以在Forth解释器/编译器如何实际起作用方面并不十分简洁,再次模糊了Forth的实施。

问题

我真正想要的是简明地说明Forth实施的功能是什么?什么是Forth如何运作的高级模型?到目前为止,我理解:

  • Forth使用字典查找定义的单词
  • Forth有两个堆栈,一个参数堆栈和返回堆栈
  • 参数堆栈用于保存正在操作的值,而返回堆栈用于保存从跳转到嵌套词的返回位置
  • 原始单词NEXT用于返回返回堆栈顶部的状态,通常出现在每个定义的单词之后。

这是我真正可以肯定的说法,因为在ANS FORTH-83所需的单词集中,没有定义INTERPRET,但是在Starting Forth中,INTERPRET被定义为用于检查单词的字典的原始单词,如果没有检查它是否是一个数字,如果不是中止。所有这些相互矛盾的信息,以及相反缺乏关于Forth的信息总体上使得Forth的内容变得复杂了。

2 个答案:

答案 0 :(得分:4)

任何Forth实现都可以在逻辑上划分为以下层(或机制):

  1. Forth处理器。它包括访问数据堆栈,返回堆栈,内存,从子程序调用和返回,逻辑和算术运算, 线程代码解释器(或#34;地址解释器",如果有的话)。 有时它也被称为Forth虚拟机(FVM)。

  2. 代码生成器。它负责访问数据空间和代码空间区域,创建子程序,文字的增量编译,子程序调用,返回和控制流程。

  3. 解释。它结合了创建词汇和单词(词汇表条目)的能力,管理搜索顺序,并根据上下文解决词汇(名称,数字等)。

  4. 翻译。它解析文本,分解词汇,解析词汇(使用解释器)并根据STATE(或翻译模式)将它们转换为各种副作用。 许多标准词都是译者的一部分。它也可以通过用户定义的(可能是直接的)单词或一些更高级的(特定于实现的)方法进行扩展。

  5. 每个下一层都基于(并使用)前面的图层。还可以在引擎盖下使用一些额外的可重用模块(例如,堆栈,列表等)。

    了解下一层需要了解上一层。 在澄清了最初的问题之后,这个答案也可以扩展。

答案 1 :(得分:0)

要么将FORTH视为用户/程序员(在那里Brodie书籍"Starting FORTH""Thinking FORTH"闪耀,或者看看Pelc的tutorial)。无需担心下一个,或装配,或任何“低级”。选择一些FORTH系统并使用它。

或者使用它的内脏,然后jonesforth是必须的。其他有趣的系统是lbForth(自托管,为几种不同的机器进行元编译),或ff(也是最小的“伪汇编”来源的元编译,boostraps)。

如果你不想搞砸低级别的细节,还有几个用C语言编写的FORTH。