对Forth的更高层次的解释

问题描述 投票:3回答:2

前言

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

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

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

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

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

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

operators interpreter vm-implementation forth
2个回答
4
投票

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

  1. 第四处理器。它包括访问数据堆栈,返回堆栈,内存,从子程序调用和返回,逻辑和算术运算,线程代码解释器(或“地址解释器”,如果有的话)。有时它也被称为Forth虚拟机(FVM)。
  2. 代码生成器。它负责访问数据空间和代码空间区域,创建子例程,文字的增量编译,子例程调用,返回和控制流。
  3. 解释。它结合了创建词汇表和单词(词汇表条目),管理搜索顺序以及根据上下文解决词汇(名称,数字等)的能力。
  4. 翻译。它解析文本,分解词汇,解析词汇(使用解释器)并根据STATE(或翻译模式)将它们转换为各种副作用。许多标准词都是译者的一部分。它也可以通过用户定义的(可能是直接的)单词或一些更高级的(特定于实现的)方法进行扩展。

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

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


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.