Forth 文本解释程序
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;}
| SP@ | (- addr) | 参数堆栈指针 |
| SP! | ( n - ) | 把参数堆栈指针设置成规定的数值 |
| RP@ | (- addr) | 返回堆栈指针 |
| RP! | (n - ) | 把返回堆栈指针置为规定的数值 |
|
: QUIT FORTH 的主要循环。接收来自终端的输入并解释执行,如果成功则显示“ok”.
SP0 @ ' TIB ! 置终端输入缓存区在参数堆栈上方。
BLK OFF 令 BLK 为0,处理来自终端的输入。
[COMPILE] [ 令 STATE 为0,使系统处于解释状态。
BEGIN 进入 FORTH 主要循环。
RP0 @ RP! STATUS 初始化返回堆栈指针。送出一个回车换行。
QUERY 催促使用者从终端输入下一行并将输入行传送到 TIB 中。
RUN 处理所接收的行。
STATE @ NOT 如果 STATE 为0,系统处于执行状态。
IF ." OK" THEN 显示出信息"ok"。
AGAIN ; 无穷循环:一行处理完毕后要求得到下一行。
: RUN ( - ) 改进了的解释程序,运行分行输入一个冒号定义。 STATE @ IF 若 STATE 不为0。系统必须处于编译状态。
] 调用编译程序。
STATE @ NOT 编译完一源行后再次检查 STATE 之值。
IF INTERPRET THEN 若系统已脱离了编译状态,那么就执行该行的剩余部分,否则退出。
ELSE INTERPRET STATE 为0,执行命令
THEN ;
RUN 的过程就是: IF 编译 ELSE 执行 THEN ; |
| : INTERPRET ( - ) forth 解释程序循环:分离出输入流中的词,如果它在词典中有定义,则执行之。否则将其转换为一个数字并放置到参数栈上。 BEGIN ?STACK 检查堆栈有无上溢或下溢 DEFINED 取出输入流中的下一个词,返回它的 cfa 及一个标志 IF EXECUTE 如果该词已被定义,则执行 ELSE NUMBER 否则转换成为一个数字 DOUBLE? 它是一个双精度数吗? NOT IF DROP THEN 不是就丢弃它的高 16 位,仅保留低 16 位 THEN FALSE 在堆栈上为 DONE? 留下一个 FALSE;解释程序死循环,一直在运行 DONE? 到了行的末端了? UNTIL ; 如果已到行结束处,退出循环;否则再次循环去处理下一词。 |
| : ?STACK ( - ) 检查参数堆栈是否上溢或下溢,若溢出则控制返回终端。 SP@ 取出现行堆栈指针的值 SP0 @ 取出栈底的位置 SWAP U< 检查是否下溢 ABORT" STACK Underflow" 若下溢则执行 ABORT" SP@ PAD PAD 之值同时也是参数栈顶的上限 U< 检查是否上溢 ABORT" Stack Overflow" ; 若上溢则也执行 ABORT" |
Forth 文本解释程序的更多相关文章
- Forth 内部解释程序工作流程
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- FORTH基础
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- Forth 编译程序
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- Forth 输入流处理
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- Forth相关IO操作
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- Forth 内存布局
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- PC/FORTH 变量|常数|数组
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- PC/FORTH 循环
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- PC/FORTH 编辑程序
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
随机推荐
- Linux coredump解决流程
一.打开core文件限制 a.sudo vi /etc/profile b.文件末尾添加ulimit -c unlimited source /etc/profile 把文件重新加载到内存 c.roo ...
- Python入门经典案例一
# 有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? sum = 0 values = range(1, 5) for i in values: for j in valu ...
- mpvue小程序开发tips(1)
wx.setStorageSync('vipId',vipId)-----存储 wx.getStorageSync('vipId')-------读取 wx.navigateTo({ url: ...
- JAVA学习过程的基础笔记
1.JDK的安装与环境变量的设置与测试2.STS简单使用3.CMD控制器的使用4.JAVA的编译与反编译的执行过程5.一,变量与变量的使用 1.变量是在程序运行中其值可以改变的量,java程序的一个基 ...
- SQL Server Management Studio 执行超大脚本文件
SQL Server Management Studio 执行超大脚本文件 启动cmd.exe , cd 到C:\Program Files (x86)\Microsoft SQL Server\11 ...
- 爬虫基础之requests模块
1. 爬虫简介 1.1 概述 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 1.2 爬虫的价值 在互 ...
- npm版本安装问题
问题一 描述 运行npm install之后,前端页面console控制台报错,invalid props. 排查 1. 排除了代码问题,完全一样的代码,其他人的运行无误. 2.猜想可能是版本号问题, ...
- 排查OPENSTACK浮动IP被占用记录
在openstack上新建机器时,发现用户无法登陆. 检查该机器的22端口,返回 Connection refused. ping该IP,发现可以ping通. 释放该浮动ip,然后去ping该 ...
- 【Mac】【问题】
[一]export: `PATH;': not a valid identifier 可能是环境变量配的有问题 一般是~/.bash_profile 多了空格或是多了$符号之类的
- leecode第二百一十七题(存在重复元素)
class Solution { public: bool containsDuplicate(vector<int>& nums) { set<int> s; for ...