返回入门教程首页 主页 | 开发工具 | 应用芯片 | 核心模块  
 
   
 

Forth 初学者指导 (使用Win32Forth)

原著 J.V. Noble

编译 Forth 中文网, ForthChina.com

原文 Win32Forth 系统联机在线文档

扩展字典

编译器是 Forth 最令人喜爱的特点之一。不像大多数高级语言, Forth 编译器是语言的一部分(LISP 一类的语言也把编译机制作为一个组件提供给程序员使用)。也就是说,它的组件就是可供程序员使用的字,它们可以被用于解决程序员的问题。

在这部分中,我们讨论编译器是如何扩展字典的。

Forth 使用特殊的字创建新的字典项目,也就是新的字。最重要的是 " : " ( “开始一个新的定义” ) 和 " ; " ( “结束这个定义” ).

让我们试着输入

: *+ * + ; <cr> ok

发生了什么事情?字 " : " 被执行,因为它已经在字典中了。而 " : " 的行为是:

> 创建一个新的字典项目,项目名称是*+ ,并从解释模式切换到编译模式。

> 在编译模式下,解释器查找字 — 这次不再执行 — 并把指针安装到代码中。 ( 如果文本是数,不再把它们放到堆栈上, Forth 把这个数放到为新字分配的字典空间中,并加入一个特殊的代码,它在这个字执行的时候,把数字放到堆栈上 ) 。

> " *+ " 的动作是顺序执行原来定义的字 " * " 和 " + ".

> 字 " ; " 是个特殊的字,通过给它的字典中设置一个特殊的标记,指示它是一个 立即字。这样,编译器不再写入它的地址,而是立即执行 " ; " 。 " ; " 的行为是:首先,安装能够把控制返回到外层解释器的上一层的代码,接着从编译模式切换回解释模式。

现在试试输入 *+ :

DECIMAL 5 6 7 *+ . <cr> 47 ok

这个例子解释了两个 Forth 原理:加入一个新的字到字典,一但被加入则试着访问它。

下图是一个表示在编译期间 Forth 内层解释器执行的流程图。

你加入到字典中的任何字都可以使用字 SEE 进行 反编译 .

SEE *+ <cr>

我们得到:

SEE *+

: *+ * + ; ok

这对我们理解一些字的工作方式很有用途。

 

   

(C) ForthChina.com 版权所有 2004-2010
Email:forthchina@163.com