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;}
| TIB ( - addr ) 留下输入终端缓冲区的地址。 |
| VARIABLE #TIB (- addr)这个变量留下的地址中存有当前文本输出缓冲区中的字节数,他不是缓冲区的长度,而是缓冲区中当前存在的输入流的长度 |
| VARIABLE >IN ( - addr ) 是一个指针,它指着当前要被处理的字符。其值(@)为距离输入缓冲区起始地址的位移。 |
| VARIABLE BLK ( - addr ) 其值(@)是要被解释的磁盘块号。若为 0 表示输入取自终端输入缓冲区。所以不能 LOAD 0 |
| DEFER SOURCE | 用以返回存放当前输入流的缓冲区的首地址。其 pfa 单元的内容是(SOURCE)的执行地址 | |
| (SOURCE) | ( - addr len ) | 返回文本解释程序行将处理的字符串。addr 和 len 分别是输入缓冲区的起始地址及长度 |
| LABEL DONE | 当输入流耗尽时的公共返回点 | |
| SKIP | ( addr len char - addr1 len1 ) | 根据一字符串的地址,长度和一个指定的字符从头开始扫描该字符串直到在字符串中发现一个与指定字符不相符的字符时停止。在参数堆栈上留下第一个不相符的地址及剩余字符串的长度 |
| SCAN | ( addr len char - addr1 len1 ) | 到一指定字符串中寻找指定的字符直到找到为止。在参数堆栈上留下相符字符的地址及字符串的剩余长度 |
| /STRING | ( addr len n - addr1 len1 ) | 丢弃指定字符串最左边的 n 个字符,addr1=addr+n;len1=len-n |
| MOVE | ( from to len - ) | 把从地址from开始的一定量16位字移动到to开始的区域,不会有重叠发生。CMOVE什么的会有重叠 |
| P | ( char - addr len ) | 忽略掉领头的字符 char , 接着扫描输入流直到下一次在遇到指定的字符 char 。更新指针 >IN 的内容。在参数堆栈上留下分离出来的词的地址和长度 |
| PARSE | ( char - addr len ) | 同上,只是不忽略领头的字符 char |
| WORD | ( char - addr ) | 以 char 作为终止字符分解输入流。把分离出来的词放在由 HERE 处开始的词缓冲区中,第一个字节内存放词的长度,接着是组成该词的字符,最后一定跟有一个空格,该空格不计入词的长度。在参数堆栈上留下存放长度字节的地址 |
| : ( forth的注释命令,它与)配对使用。文本解释程序对于位于圆括号内的内容不予理睬 ASCII ) 使用)作为终止符,在参数堆栈上留下)的 ascii 代码 PARSE 把 >IN 推至)后的那个字符 2DROP 丢弃注释的地址和长度,因为不对注释做任何处理。 ; IMMEDIATE 使(成为立即词,这样在冒号定义内便执行而不是编译 |
| : .( ASCII ) PARSE |
| EXPECT | ( addr n - ) | 把n个字符从终端传送到主存中自地址 addr 开始的区域中。EXPECT 循环调用KEY,每读入一个键就把所键入的字符送到自 addr 开始的缓冲区中一次存放,一直到读进第n个或遇到回车键。所读入的字符个数存放在SPAN中,回车键不计入总数。EXPECT 允许键入的时候修改 |
| QUERY | ( - ) | 从操作者终端输入80个字符文本。文本放置在地址TIB。把>IN和BLK置零,#TIB 等于接收的字符数。为系统解释接收进来的源行做好准备。 |
| SPAN | ( - addr ) | 留下通过最后执行 EXPECT 实际收到和存储的字符计数变量的地址。 |
| CREATE BUFF1 DECIMAL 80 ALLOT 建立一个 80 字节的名叫 BUFF1 的缓冲区。 |
| VARIABLE SPAN1 用来保存下面输入字符的个数 |
|
: READLINE 把一行字符从终端传送到 BUFF1
CR BUFF1
80 ( addr size - )
EXPECT
CR ." SPAN= " SPAN @
DUP . SPAN1 ! ;
|
: QUERY ( - ) TIB 80 EXPECT 从终端输入80个字符到TIB SPAN @ 获取实际的长度 #TIB ! 把实际长度存入 #TIB 中,这样解释程序将会知道输入流何时耗尽 BLK OFF 清零 BLK,这样文本解释程序将使用终端输入缓冲区 >IN OFF ; 清零字符指针,于是扫描将从 TIB 的起点开始 |
| : COUNT ( addr - addr+1 len ) DUP 1+ SWAP C@ ; 转换计数字节地址为 地址-长度 表示 |
: TYPE ( addr len - ) 在终端上显示出指定的字符串。其中 addr 是要显示的首字符地址,len 是要显示的字符个数。 0 ?DO DUP C@ EMIT 1+ 递增字符地址 LOOP DROP ; 清除堆栈上的无用地址 |
| : -TRAILING ( addr len - addr len1 ) 用改变长度的方法删去一字符串的结尾空格 DUP 0 ?DO 2DUP + 1- 把最后一个字符的地址送到参数堆栈顶 C@ BL <> 判断是不是空格 IF LEAVE THEN 如果不是就结束循环 1- 是,字符串长度减一 LOOP ; |
|
Forth 输入流处理的更多相关文章
- 输入流和字符串互转,InputStream2String,String2InputStream
输入流转字符串 public static String InputStream2String(InputStream in) { InputStreamReader reader = null; t ...
- 在.NET中使用管道将输出流转换为输入流
最近在写一段代码,将本地文件压缩加密后发送到服务器,发送到服务器的类用一个输入流作为参数获取要上传的数据,而压缩类和加密类都是输出流. 如何将输出流转换为输入流,最直观的方法是缓存输出流的全部内容到内 ...
- 详解PHP输入流php://input
在使用xml-rpc的时候,server端获取client数据,主要是通过php输入流input,而不是$_POST数组.所以,这里主要探讨php输入流php://input 对一php://inpu ...
- java读取输入流
java读取输入流两种 private static byte[] readStream(InputStream in){ if(in==null){ return null; } byte[] bu ...
- PHP 输入流 php://input
在使用xml-rpc的时候,server端获取client数据,主要是通过php输入流input,而不是$_POST数组.所以,这里主要探讨php输入流php://input 对一php://in ...
- Struts2文件下载找不到输入流异常
先发异常 Can not find a java.io.InputStream with the name [downloadFile] in the invocation stack. Check ...
- 字符输入流Reader简要概括
字符输入流Reader组成结构 本篇将对JAVA I/O流中的字符输入流Reader做个简单的概括: 总得来说,每个字符输入流类都有一个对应的用途,如下: 字符流基类:Reader 字节流转字符流:I ...
- [转]java 输出流转输入流
ByteArrayOutputStream.toByteArray ByteArrayInputStream StringWriter.toString StringReader 字符流和二进制流是j ...
- java io系列14之 DataInputStream(数据输入流)的认知、源码和示例
本章介绍DataInputStream.我们先对DataInputStream有个大致认识,然后再深入学习它的源码,最后通过示例加深对它的了解. 转载请注明出处:http://www.cnblogs. ...
- 文件输入流 FileInputStream类 文件输出流FileOutputStream ---转载
转载自---http://blog.csdn.net/hguisu/article/details/7418161 111:文件输入流: FileInputStream可以使用read()方法一次读入 ...
随机推荐
- python 字节转换成图像
python 字节转换成图像 使用base64 1.图片转成字节使用: base64.b64encode() 2.字节转成图片: base64.b64decode() 图片字节串: iVBORw0K ...
- Django框架详细介绍---ORM相关操作
Django ORM相关操作 官方文档: https://docs.djangoproject.com/en/2.0/ref/models/querysets/ 1.必须掌握的十三个方法 <1& ...
- 配置 ROS 的 apt 源
配置 ROS 的 apt 源 ROS的apt源有官方源.国内 USTC 源或新加坡源可供选择, 选择其一就可以了,建议使用国内 USTC 源或新加坡源,安装速度会快很多. 方式一:官方源 $ sudo ...
- 20190408Linux权限管理week1_day5
权限概述 Linux系统一般将文件可存/取访问的身份分为3个类别:owner(拥有者).group(和所有者同组的用户).others(其他人,除了所有者,除了同组的用户以及除了超级管理员),且3种身 ...
- 键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key, 用个数作为value,放入到map集合中,遍历map集合
package cn.it.zuoye5; import java.io.File;import java.util.HashMap;import java.util.Iterator;import ...
- 忘记mysql密码时对密码进行更改
第一步: 打开cmd 输入:net stop mysql 第二步: 再打开另一个cmd 输入:mysqld --skip-grant-tables 第三步: 打开第三个cmd ...
- 使用 mysqladmin debug 查看死锁信息
使用 mysqladmin debug 查看死锁信息 mysqladmin -S /mysql/data/mysql.sock debug 然后在error日志中,会看到: 11 lock struc ...
- python学习笔记:深浅拷贝的使用和原理
在理解深浅拷贝之前,我们先熟悉下变量对象和数据类型 1.变量和对象 变量-引用-对象(可变对象,不可变对象) 在python中一切都是对象,比如[1,2],'hello world',123,{'k1 ...
- Windows Update Medic Service 拒绝访问
修改注册表:HEKY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc 中Start的值改为4.
- 关于ComponentOne For WinForm 的全新控件 – DataFilter数据切片器(Beta)
概述 数据切片器在电子商务网站上很常见 - 它们可以帮助用户快速过滤所选商品,并且所有过滤选项都可以在一个地方使用,通常包含核心控件类型为:清单,范围栏和单选按钮等.在ComponentOne For ...