body, table{font-family: 微软雅黑; font-size: 13.5pt}
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;}

    词典是 FORTH 系统的主干,他是系统中全部词以一定的方式链接而成。
    FORTH 系统,词典本身也是被当做一个堆栈来对待。由一个称为词典指针的变量 DP 指着词典上方(高端地址)空白区域的第一个字节,也既下一个可被使用的字节。词 HERE 则把 DP 的值送到参数堆栈的栈顶。
VARIABLE  DP           用户变量,其值为词典上部第一个可被使用的内存地址。
:  HERE    ( - addr )  DP  @  ;    返回词典上方的地址,它告诉编译程序待用的自由存贮区域始于何处
:  ALLOT  ( n - )  DP  +!  ;          使 DP 之值增加 n,也即为了某种目的给词典的区域增加 n 个字节。
:   ,   ( n - )  HERE  !  2  ALLOT ; 把参数堆栈顶上的数 n 送入到词典上部的下一个可用单元,使 DP 之值增加 2 。(把 n 编入词典)
:  C,  ( byte - )  HERE  C!  1  ALLOT  ;

   词典是由一些在逻辑上独立的词表所构成。把一组在逻辑上密切相关的词所链接形成的词表称为是一个词汇。
CONTEXT  ( - addr )  是一个数组,由它决定首先搜索哪一个词汇,接着搜索哪几个词汇(如果没找到的话)。
CURRENT  ( - addr )  是一个变量,由它决定新添加到词典中的定义属于哪一个词汇。在 Fig-Forth 中它还决定继 CONTEXT 词汇之后所要搜索的词汇,如果指定词在 CONTEXT 词汇中没有找到。
Fig-Forth 中词典搜索
INTERPRET -> -FIND -> (FIND)
:  INTERPRET  ( - )      逐个顺序处理从输入流中分离出来的字符串;或是执行或是编译由当时系统的状态决定。
       BEGIN         开始解释程序循环
            -FIND  ( - pfa b tf , or ff )       把从输入流中检测到的下一个字符串送到 HERE 处。首先搜索 context 词汇,继之搜索 current 词汇,核实在词典中是否有与在 HERE 处的字符串同名的定义。若有,被找到之词的参数域地址 pfa,长度字节 b 及为真标志 tf 留在堆栈上;若没有,堆栈上仅留下为假标志 ff 。 
       AGAIN  ;


:  -FIND  ( - pfa b tf , or ff )
            BL  WORD     把以空格为终止符的下一个字符串从输入流中分离出来,并将它送到词典的顶部(HERE 处)
            HERE    有待去词典中发现的字符串的地址
            CONTEXT  @  @   取出在 context 词汇中最后一个(最新)一个被定义词的名字域地址 nfa ,词典搜索行将开始。
            (FIND)   (addr1 addr2 - pfa b tf , or ff)  CODE 词,承担具体搜索工作。addr1是有待被搜索的字符串的地址,addr2是被搜索区的起始地址。(FIND) 从堆栈顶上给出的地址出发搜索词典,以求发现和堆栈上的第二个地址(addr1)处的字符串相符合的名字。若找到,返回相符定义的 pfa , 长度字节以及为真标志。若未找到则仅返回一个假标志。
            DUP  0=    检查栈顶标志。
            IF           在 context 词汇中未找到同名的定义
                 DROP       丢弃假标志
                 HERE          重新取得字符串的地址。
                 CURRENT  @  @          取出在 current 词汇中最后一个被定义的词的 nfa。
                 (FIND)           搜索 current 词汇。
            ENDIF  ;
    // Fig-Forth 中首先搜索 context 词汇,以求发现一个同名定义,若没有则在搜索 current 词汇。一个词汇是由定义词 VOCABULARY 创立的,故一个词汇的词汇名本身也是词典中的一个条目。在一个词汇名的参数域中保存有该词汇中最后一个被定义的词的名字域地址 nfa ,而保存该最后一个词的 nfa 的单元是被 CONTEXT 或 CURRENT 所指着,如果该词汇是 context 词汇或 current 词汇的话。所以在 -FIND 中,CONTEXT @ @ 以及 CURRENT @ @ 提供将被搜索的词汇中的第一个词。

Forth 词典和词汇的更多相关文章

  1. C++第15周(春)项目3 - OOP版电子词典(一)

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759.内有完整教学方案及资源链接 [项目3-OOP版电子词典](本程序中须要的相 ...

  2. 第14周 项目三-OOP版电子词典

    做一个简单的电子词典.在文件dictionary.txt中,保存的是英汉对比的一个词典,词汇量近8000个,英文.中文释义与词性间用'\t'隔开. (1)编程序,由用户输入英文词.显示词性和中文释义. ...

  3. wxWidgets+wxSmith版电子词典

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目3-OOP版电子词典](本程序须要的相关 ...

  4. C++第15周(春)项目3 - OOP版电子词典(二)

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目3-OOP版电子词典](本程序须要的相关 ...

  5. OOP版电子词典

    输入代码: /* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名:sum123.cpp * 作 者:林海云 * 完毕日期:20 ...

  6. 第十四周(OOP版电子词典)

    /* *copyright(c) 2015,烟台大学计算机学院 *All rights reserved. *文件名:第十四周(OOP版电子词典) *作者:王忠 *完毕日期:2015.6.10 *版本 ...

  7. 侣行APP

    本次要做的是团队共同完成一个项目.由队长组织,全体队员一起讨论分析并完成一款APP的需求调研,分析等工作. 1.团队介绍 队长:杨晓帅 队员                               ...

  8. 看美剧英文字幕学英语的利器——“深蓝英文字幕助手”简介

    我从初中开始基本上就是一个英语很烂的人,数理化再好有什么用,工作了,结果发现数理化都没啥用,最有用的还是当年学的最烂的英语.于是在2011年年底开始了学习英语的课程,在学习的过程中,外教经常会放英剧美 ...

  9. 2013级C++第15周(春)项目——输入输出流及文件文件操作

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759.内有完整教学方案及资源链接 本周程序阅读及程序调试中须要的文件,请到htt ...

随机推荐

  1. tomcat安装与项目部署

    1.tomcat依赖:jdk jre,环境变量配置  java_home  jre_home 2.tomcat安装: 下载:http://tomcat.apache.org/    download ...

  2. 【2】Kali之情报搜集技术

    渗透测试中情报搜集需要完成两项重要任务: 1.通过信息搜集工作,确定渗透测试目标范围. 2.通过情报信息搜集,发现渗透测试目标的安全漏洞与脆弱点,为后续的渗透攻击提供基础. 通过DNS和IP地址挖掘目 ...

  3. Mysql模糊查询like效率,以及更高效的写法

    在使用msyql进行模糊查询的时候,很自然的会用到like语句,通常情况下,在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时候,查询的效率就很容易显现出来.这个时候查询的效率就 ...

  4. 1333:【例2-2】Blah数集

    1333:[例2-2]Blah数集 注意是数组,答案数组中不能有重复数字 q数组是存储答案的 代码: #include<iostream> #include<cstdio> # ...

  5. 【linux下查看文件路径--jdk】

    1.which java 首先输入命令行,查看结果: [root@localhost ~]# which java /usr/bin/java PS:which Java是无法定位到Java的安装路径 ...

  6. urllib3

    urllib3是一个功能强大.条理清晰.用于http客户端的python库,相对于urllib它所有的特点如下: 线程安全 连接池 客户端SSL/TLS验证 使用多部分编码上传文件 Helpers用于 ...

  7. P3181 [HAOI2016]找相同字符

    思路 广义SAM 把两个字符串建成广义SAM,然后统计两个SAM中相同节点的endpos大小乘积即可 记得开long long 代码 #include <cstdio> #include ...

  8. CSS常用伪类

    css伪类 :after 在元素后面插入内容 :hover 鼠标移入时进行 :before 在元素前面插入内容 :link 未选中的链接 :active 点击后产生什么变化 :nth-child 匹配 ...

  9. struts2学习笔记(一)

    配置文件web.xml和struts.xml web.xml <?xml version="1.0" encoding="UTF-8"?> < ...

  10. Apache web服务器(LAMP架构)

    Apache web服务器(LAMP架构) apache介绍 1).世界上使用率最高的网站服务器,最高时可达70%:官方网站:apache.org 2).http 超文本协议 HTML 超文本标记语言 ...