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. 第二章 函数和window对象

    1.什么是函数函数相当于Java中的方法,每一个函数可以做一件事情,但是不属于某一个类 2.使用函数的好处:使代码模块化,功能分工明确,方便调用,思路功能清晰 3.函数的分类:(1)系统函数:系统提前 ...

  2. Scrapy框架的学习(6.item介绍以及items的使用(提前定义好字段名))转载https://blog.csdn.net/wei18791957243/article/details/86259688

      在Scrapy框架中的items.py的作用   1.可以预先定义好要爬取的字段     items.py import scrapy     class TencentItem(scrapy.I ...

  3. property装饰器以及多态

    property是一种特殊的属性 访问它时执行一段功能然后返回值 class People: def __init__(self, name): self.__name = name @propert ...

  4. 虚拟机centos7配置本地yum源

    在虚拟机中要使用yum命令,就要先配置一下yum源,下面就分享一下这个过程: 1. 挂载iso到vmware,首先得确保CD/DVD连接到镜像.可以这样操作 2. 执行下面的命令 # mkdir /m ...

  5. tomcat+apache的集群配置

    背景:项目比较大,用户较多,同一时间,用户在线人数较多,为此,整体架构是lvs(2台)+keepalived(2台)+apache(N台)+tomcat(N台) lvs负责分发请求,所有的web请求经 ...

  6. HTTP请求中POST与GET的区别

      本文章已收录于:   一.原理区别 一般我们在浏览器输入一个网址访问网站都是GET请求;再FORM表单中,可以通过设置Method指定提交方式为GET或者POST提交方式,默认为GET提交方式. ...

  7. PHP与JavaScript下的Cookie操作

    下面的例子列出几种情形交互场景,列出JS和php交互的方法.总结下,以免日后再为cookie问题困扰. setcookie.php getcookie.php 总结: php用自身函数读取php 的c ...

  8. Dart - Isolate 并发

    在Dart中实现并发可以用Isolate,它是类似于线程(thread)但不共享内存的独立运行的worker,是一个独立的Dart程序执行环境.其实默认环境就是一个main isolate. 在Dar ...

  9. 搭建一个Web Server站点

    题:搭建一个Web Server站点.安装web服务,并在本地创建index.html测试 1.安装http服务 yum -y install httpd 2.进入网站目录 cd /var/www/h ...

  10. ORA-600 [kcblin_3] 解决方法

    今日,我们一个sql在某环境执行出错,如下: ORA-00600: 内部错误代码, 参数: [kcblin_3], [103], [253952], [8192], [32769], [312], [ ...