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 ...
随机推荐
- uni-app编写小程序
今天项目还没有开始开发,网上看到了uni-app官网介绍可以一套代码,多端使用,感觉很厉害的样子,就做了个小程序页面试试. uni-app 使用 vue语法,小程序api,内嵌mpvue,使我们能够很 ...
- HTML与CSS的一些知识(四)
续: line-height 用于设置一行文本行高,一般用于文本的垂直居中: display 用于设置元素的显示方式 float 浮动,让元素漂浮起来排列 浮动的影响: a.浮动后,行内元素可以支持宽 ...
- 从事三年java开发后, 我打算转人工智能
作为一个2015年参加java培训,2016年计算机科学与技术本科毕业后一直从事java开发的程序员来说, 做出这一步真的不容易, 可是我没赶上java最火的时候,反而渐渐感受到了java的没落, 目 ...
- Python中4位1进制数与float浮点数互相转换
import struct s = 'F4CEF042' print(s) #<是小端,>是大端,f代表浮点数 print(struct.unpack('<f', bytes.fro ...
- Xilinx Vivado的使用详细介绍(3):使用IP核
ilinx Vivado的使用详细介绍(3):使用IP核 Author:zhangxianhe IP核(IP Core) Vivado中有很多IP核可以直接使用,例如数学运算(乘法器.除法器.浮点运算 ...
- js循环中使用async/await踩过的坑
最近写koa的时候遇见需要在循环中使用async/await的情况,当然第一反应就是直接上forEach,然后就直接翻车了... 直接上代码: function handleSql(val) { re ...
- java日期和时间Date、Calendar、SimpleDateFormat
1 时间和日期 1.1 日期类Date和格式化SimpleDateFormat 日期使用过程中需要将日期Date对象转化为字符串,或者将字符串形式的日期转化为日期Date对象.可 ...
- python之做一个简易的翻译器(二)
把写好的python程序转换为windows系统下可以运行的exe文件 使用pyinstaller命令来进行转换 1.首先安装pyinstaller 可以在pycharm中安装,也可以直接使用pip命 ...
- PPI | protein-protein interaction | 蛋白互作分析
STRING database的挖掘 这个数据库绝对是做实验人的宝藏,里面包含了各种蛋白互作关系,不用做实验就有一大堆证据. IPA了解一下,收费的高端分析软件,大部分就是整合的这个数据库,很多大佬喜 ...
- zoj2930
各点向S连推迟的花费,向T连提前的花费,S表示提前,T表示推迟.a推迟b也推迟b往a连INF.最小割后从各点出发,能直接或间接到T的就是必须推迟的,剩下的就是能提前的. #include < ...