body, table{font-family: 微软雅黑}
table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;}
th{border: 1px solid gray; padding: 4px; background-color: #DDD;}
td{border: 1px solid gray; padding: 4px;}
tr:nth-child(2n){background-color: #f8f8f8;}

冒号定义的基本结构
    I 是由地址解释程序使用的指针,称为“解释程序指针”。
    EXIT 是使执行流程返回到当前定义中的下一个高级定义。
    对于所有类型的定义,其词典条目的头以及代码指针的格式都相同,但是参数域的格式要根据定义类型的不同而变化
:  PHOTOGRAPH     SHUTTER  OPEN  TIME  EXPOSE  SHUTTER  CLOSE  ;
当执行PHOTOGRAPH时,依次执行顺序地址所确定的各个定义。用来读出这些地址并执行每个地址中的定义的机构称为“地址解释程序”。定义结尾的词 ; 将编译 EXIT 的地址。如图所示, EXIT 的地址被安排在词典条目的最后一个单元。当地址解释程序取得这个地址时,就象执行其他词一样执行 EXIT 。
(冒号定义的参数域中所包含的地址通常是代码域地址(cfa),而不是参数域地址(pfa))

执行的嵌套
假设定义 DINNER 由三个词组成
:  DINNER       SOUP  ENTREE  DESSERT  ;    
:  ENTREE        CHICKEN  RICE  ;   
假设正在执行 DINNER 而且刚执行完 SOUP 。由于 SOUP 后面的词是 ENTREE ,这时解释程序指针指向存放 ENTREE 地址单元。这种代码完成两件事:首先把解释程序指针压入返回堆栈保存;其次把它本身的参数域地址(pfa)放入ENTREE的解释程序指针。

一步退出
INTERPRET 是一个检查整个输入流的循环结构。INTERPRET 又是终端外层定义 QUIT 的组成部分。QUIT 定义的基本形式如下:
:  QUIT   BEGIN  ( 清除返回堆栈  等待输入 ) INTERPRET  ."  OK"  CR  0  UNTIL  ;   括号中的说明表示尚未讨论的词和短语。
如果我们在执行的任何层次中执行 QUIT ,都将立即终止应用程序的执行而重新进入 QUIT 循环,这时将清除返回堆栈(无论栈中有多少层的返回地址,因为现在我们决不能使用它们中的任何一个地址),系统等待输入。

舍弃嵌套
上面 DINNER 执行过程:
若是把定义改成 :  ENTREE    CHICKEN  RICE  R>  DROP  ;   R>  DROP  是从返回堆栈中清除 DESSERT 的返回地址,该地址是在执行 ENTREE 之前压入返回堆栈的。这样做的话 EXIT 直接返回到第一层。就只会执行 SOUP  , CHICKEN   和  RICE , 跳过了第二层。
从新定义 ENTREE   
:  ENTREE    CHICKEN  EXIT  RICE  ;   
这样的话在执行 DINNER 时,我们将在 CHICKEN 之后正确退出返回到 ENTREE 后面下一个词 DESSERT

Forth嵌套定义的执行过程图示的更多相关文章

  1. SQL嵌套子查询和相关子查询的执行过程有什么区别(推荐)

    SQLServer子查询可以分为 相关子查询 和 嵌套子查询 两类.前提, 假设Books表如下: 类编号 图书名 出版社 价格 ----------------------------------- ...

  2. JSP起源、JSP的运行原理、JSP的执行过程

    JSP起源 在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变. 如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程序 ...

  3. c语言编译预处理和条件编译执行过程的理解

    在C语言的程序中可包括各种以符号#开头的编译指令,这些指令称为预处理命令.预处理命令属于C语言编译器,而不是C语言的组成部分.通过预处理命令可扩展C语言程序设计的环境. 一.预处理的工作方式 1.1. ...

  4. javascript从定义到执行 js引擎 闭包

    javascript从定义到执行,JS引擎在实现层做了很多初始化工作,因此在学习JS引擎工作机制之前,我们需要引入几个相关的概念:执行环境 栈.全局对象.执行环境.变量对象.活动对象.作用域和作用域链 ...

  5. 详细分析SQL语句逻辑执行过程和相关语法

    本文目录: 1.SQL语句的逻辑处理顺序 1.2 各数据库系统的语句逻辑处理顺序 1.2.1 SQL Server和Oracle的逻辑执行顺序 1.2.2 MariaDB的逻辑执行顺序 1.2.3 M ...

  6. Python--day13(函数嵌套定义,global、nonlocal、闭包函数、装饰器)

    今日主要内容 1.  函数的嵌套定义 2.  global.nonlocal关键字 3.  闭包及闭包的应用场景 4. 装饰器 1.  函数的嵌套定义 概念:在一个函数的内部定义另一个函数 为什么要有 ...

  7. day13(函数嵌套定义,global,nonlocal关键字,闭包,装饰器)

    一,复习 ''' 1.函数对象:函数名 => 存放的是函数的内存地址 1)函数名 - 找到的是函数的内存地址 2)函数名() - 调用函数 => 函数的返回值 eg:fn()() => ...

  8. python第十三天,函数的嵌套定义,global,nonlocal关键字的使用,闭包及闭包的运算场景,装饰器

    今日内容 1. 函数的嵌套定义 2.global,nonlocal关键字 3.闭包及闭包的运用场景 4.装饰器 函数的嵌套定义 1. 概念:在一个函数内部定义另一个函数 2 .为什么要有函数的嵌套定义 ...

  9. python13 1.函数的嵌套定义 2.global、nonlocal关键字 3.闭包及闭包的运用场景 4.装饰器

    ## 复习   '''1.函数对象:函数名 => 存放的是函数的内存地址1)函数名 - 找到的是函数的内存地址2)函数名() - 调用函数 => 函数的返回值  eg:fn()() =&g ...

随机推荐

  1. 使用Typescript写的Vue初学者Hello World实例(实现按需加载、跨域调试、await/async)

    万事开头难,一个好的Hello World程序可以节省我们好多的学习时间,帮助我们快速入门.Hello World程序之所以是入门必读必会,就是因为其代码量少,简单易懂.但我觉得,还应该做到功能丰富, ...

  2. laravel自定义验证

    1.在控制器中直接写验证$this->validate($request, [ 'video_ids' => [ function($attribute, $value, $fail) { ...

  3. git之概念图

    1.git四大区. . 2. 3. 4.

  4. Tomcat 加载 jsp 异常:ServletException: java.lang.LinkageError

    环境:win10 JDK:java version "1.8.0_131" mvn 内置 Tomcat 报错: javax.servlet.ServletException: ja ...

  5. 修复svn hook导致的字符集错误

    修改pre-commit钩子,如果返回中文信息,可能会报如下错误: Error output could not be translated from the native locale to UTF ...

  6. 使用addeventlistener为js动态创建的元素添加事件监听

    点击li弹出内容,并且动态添加li之后有效 <button onclick="addFunction()">点我增加</button> <ul> ...

  7. 正则表达式 re.findall 用法

    正则 re.findall 的简单用法(返回string中所有与pattern相匹配的全部字串,返回形式为数组)语法: findall(pattern, string, flags=0) import ...

  8. ListTile

    const ListTile({ Key key, this.leading, // item 前置图标 this.title, // item 标题 this.subtitle, // item 副 ...

  9. DataFrame数据转为list,再逐行写入Excel

    首先使用np.array()函数把DataFrame转化为np.ndarray(), 再利用tolist()函数把np.ndarray()转为list, 示例代码如下: # -*- coding:ut ...

  10. RESTful API 设计指南-阮一峰

    作者: 阮一峰 日期: 2014年5月22日 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). 因此,必须有一种统一的机制 ...