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;}

 每次运行DOSBox 0.74   都要执行一遍  Z:\>mount k d:\forth   , 然后
        Z:\>K:(回车)
        K:\>cd pcforth(回车)
        K:\PCFORTH>forth(回车)
//笔记里面的return都表示输入命令时候的换行
// '词 '和 '数' 必须要用空格隔开,这样FORTH才能识别,空格可以多个,但是必须有
15 SPACES return  打印15个空格
42 EMIT return  打印*,43是+;44,;45 -;
15 SPACES 42 EMIT 42 EMIT return  组合命令,先打印15空格,然后再连续打印两个*
: STAR 42 EMIT ; return 自己定义词组; : 表示定义,后面跟的是一个自己要定义的词组的名称;再后面的就是这个词组要实现的功能;eg: STAR 命令实现输出一个*号
CR STAR CR STAR CR STAR return CR 是系统词典,表示换行;后面跟的是刚才定义的命令
: STARS 0 DO STAR LOOP ; return  定义单词STARS,表示做循环次STAR,次数会在命令开头给出
5 STARS return 执行5次STAR操作
: MARGIN CR 30 SPACES ; return  定义,换行输出30个空格
: BLIP MARGIN STAR ; return  定义,换行输出30个空格和一个* 
: BAR MARGIN 5 STARS ; return 定义,换行输出30个空格和5个* 
BAR BLIP BAR BLIP BLIP CR return 输出个F形状
: F BAR BLIP BAR BLIP BLIP CR ; return 定义,输出F


词典:FORTH的每个词和它的定义都被登记在FORTH词典中。FORTH把自己定义翻译成词典形式写入词典条目。这个过程叫做  "编译"  终端键入命令词,会启动  INTERPRET  的词,叫做   “文本解释程序";
FORTH 程序中 : 也是一个词;


命名:

少数不能用来命名的词:
return:回车符,表示完成输入;
backspace:删除符,表示要修改;
space:空格,作为一个词的结束;注意: n SPACE 用完会在栈中插入好多1,所以不要用SPACE,要就使用 SPACES 用完还会把事先压入栈中要求显示的空格数弹出来
."  :表示后面跟的是一个字符串;
eg:  : GREET  ."  HELLO , I SPEAK FORTH "  ;   //这个标记要组合出现,不能空格隔开



堆栈:FORTH 运算符的操作场所


后缀表示法:

FORTH 语言采用的是后缀表示法,不是中缀表示法;目的是便于使所有需要数字的词能从堆栈中取得他们。
eg:    +              从栈中弹出两个数字并把他们相加;
          .               从栈中弹出一个数字并打印它尾随一个空格;
          SPACES   从栈中弹出一个数字并打印相应个数的空格;
          EMIT        从栈中弹出一个表示字符的数字并打印该字符;
 
定义一个总是把4和堆栈中的任意数相加的词 : FOUR-MORE 4 + ; return
3 FOUR-MORE . return 
-10 FOUR-MORE . return
在这种情况下,定义内部的“4”就仿佛它在定义外边一样被压栈。然后 + 将栈中的两个数字相加。 因为 + 总是对栈中的数字进行操作,所以它并不关心 “4” 是来自定义内部的 3 还是来自定义外部的。

记住堆栈的踪迹:
"栈效应"踪迹就是指一个词在执行前栈中需要什么类型的数字,而执行后它又将是什么类型的数字反压回堆栈。
把自己定义的词连同它们的意义逐步汇集成表,那么其他人和自己以后都能容易的理解这些词的操作。  FORTH 中这种表称为"词汇表";  大家习惯在词汇表中使用特定的 栈标志法
(执行前-执行后) : 破折号是分隔符,前面的内容表示执行前当处于栈顶的内容,后面是执行后压入栈顶的内容。
eg:   .    (n--)                     n表示一个数,表示执行前栈中要有一个数,执行后没有数据要存入堆栈。
        + (n1 n2 - sum)   表示 + 执行前栈中要有两个数,执行完后还有一个数压入栈中。

一些术语:
编译(compile):由源文本生成计算机内存中的词典条目。
词典(Dictionary): 在FORTH中,包括"系统"定义(预定义)和"用户"定义(自己定义)的各种词的一个表。词典以编译形式固存在计算机内存。
执行(Execute):运行。所谓执行一个词就是完成该词已编译定义所指定的所有操作。
扩展性(Extensibity):允许程序设计员加进新的特性,或者对已具有特性的计算机语言的特点进行修改。
词汇表(Glossary):FORTH中已定义过的词的表,标明它们的栈功能和功能解释,以供程序设计员参考。
输入流(Input stream):由文本解释程序读入文本。它可以是你在终端刚刚键入的文本,也可以是存贮在磁盘上的文本。
解释(Interpret):(当相当于FORTH的文本解释程序时)读输入流,然后到词典中查对没一个词,若失败,则转换成数字。
后缀表示法(Postfix notation):把操作符书写在他们的操作数字后边的表示方法,如“2+5”写成 “2 5 +”。也叫做 逆波兰表示法(Reverse Polish Notation)。
堆栈(Stack):在FORTH中,数据按后进先出方式能被存贮或移走的内存区域。
堆栈上溢(Stack overflow):当作为堆栈的内存区域完全被数据充满时所发生的错误。
堆栈下溢(Stack underflow):当操作符要求堆栈中数据但栈中已无合适的数据时所发生的错误。
(Word):在FORTH中一个定义的名字。

以后的笔记中不再在要输入回车符的地方打 return

FORTH基础的更多相关文章

  1. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  2. node-webkit 环境搭建与基础demo

    首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...

  3. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  4. Golang, 以17个简短代码片段,切底弄懂 channel 基础

    (原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...

  5. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  6. HTTPS 互联网世界的安全基础

    近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...

  7. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  8. .NetCore MVC中的路由(1)路由配置基础

    .NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...

  9. .NET基础拾遗(5)多线程开发基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

  10. .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]

    方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...

随机推荐

  1. CSS3 黑白图片

    每当有自然灾害的时候,很多网站都是灰白的,想知道是怎么实现的嘛? 1.IE私有滤镜的方式 自IE4开始,IE引入了私有滤镜,可以实现透明度.模糊.阴影.发光等效果,当然也可以实现灰度图像效果.代码如下 ...

  2. 关于dl dt dd 文字过长换行在移动端显示对齐的探讨总结

    关于dl  dt dd 文字过长换行在移动端显示对齐的探讨总结 <dl> <dt>抵押房产:</dt> <dd>1.北京市大兴区兴华大街丽园小区3单大兴 ...

  3. HTTP首部解析

    HTTP首部解析 转载请注明出处:HTTP首部解析 文章目录 1.与HTTP协议相关的Web服务器 2.HTTP首部 与HTTP协议相关的Web服务器 在说明HTTP首部相关知识之前,有必要先了解一下 ...

  4. SpringCloud学习笔记(6)——Eureka高可用

    参考Spring Cloud官方文档第12章12.3.12.5.12.6小节 12.3 High Availability, Zones and Regions 默认情况下,每一个Eureka服务器同 ...

  5. 深入学习Java8 Lambda (default method, lambda, function reference, java.util.function 包)

    Java 8 Lambda .MethodReference.function包 多年前,学校讲述C#时,就已经知道有Lambda,也惊喜于它的方便,将函数式编程方式和面向对象式编程基于一身.此外在使 ...

  6. 【ASP.NET MVC系列】数据验证和注解

    [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作篇)(下) [04]浅谈ASP. ...

  7. 看JQ时代过来的前端,如何转换思路用Vue打造选项卡组件

    前言 在Vue还未流行的时候,我们都是用JQuery来封装一个选项卡插件,如今Vue当道,让我们一起来看看从JQ时代过来的前端是如何转换思路,用数据驱动DOM的思想打造一个Vue选项卡组件. 接下来, ...

  8. Coursera课程 Programming Languages, Part C 总结

    碎言碎语 和前面的 ML 和 Racket 感觉明显不一样了,一边学着一边觉得这真是一门奇怪的语言,有着各种奇怪的语法,不过真的算是一个奇妙的体验(相比前面的两门语言,Ruby 的学习资源多了不少). ...

  9. PHP面向对象编程基本原则

    首先祝大家节日快乐!!! 额,不知道你们剁手没,小梦是没有!整整已经错过了第九个年头! 小伙伴是不是有一种感觉,PHP入门的时候简直爱不释手,总是把 "PHP是世界上最好的语言" ...

  10. pm am 12小时格式化

    <div id="m_tiem">PM 14:26</div> tiem('m_tiem'); //pm am 12小时格式化function tiem(i ...