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()方法一次读入 ...
随机推荐
- .net core 配置
.net core 配置包括很多种 例如内存变量.命令行参数.环境变量以及物理文件配置和自定义配置 物理文件配置主要有三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfi ...
- 杨韬的Markdown自定义CSS样式
效果 样例 杨韬的Python/Jupyter学习笔记 Markdown例子链接页面 代码 /*主标题*/ #cb_post_title_url{ font-size: 31px; } /*h1,h2 ...
- 即时通讯(III)
即时通讯的开源库 目前及时通讯可以使用环信.柔云.腾讯云,这些都是基于TCP连接的,UI也是高度定制的,而且它们的技术也是比较成熟的. XMPP比较早,是开源的,但是坑也比较多.传输的数据是XML,造 ...
- 查看 chrome 浏览器中的 Headers
查看 chrome 浏览器中的 Headers, Response 信息:
- Applet程序组件与AJAX技术
Applet 定义 Applet是一种运行于Web客户端环境下的Java程序组件. 工作原理 Applet以代码的形式嵌入Web页面中,用标签<applet></applet> ...
- GO数据类型
基本数据类型 Go语言中有丰富的数据类型,除了基本的整型.浮点型.布尔型.字符串外,还有数组.切片.结构体.函数.map.通道(channel)等. 整形 获取对象的长度的内建len()函数返回的长度 ...
- chrome内核浏览器插件的使用--Tampermonkey(油猴插件)
Tampermonkey(油猴插件),这个插件是一个用于改造你浏览器打开的网站的插件.它可以在你打开的网页中注入任意js脚本,以达到你想要的外加功能.可以说非常不错.很多时候也值得使用. 这是个chr ...
- Windows下应用级别的IIS负载均衡方案 Application Request Route
转载于:https://blog.csdn.net/2000killer/article/details/51228625 序言 随着公司业务的发展,后台业务就变的越来越多,然而服务器的故障又像月经一 ...
- vue中父子组件之间的传值、非父子组件之间的传值
在Vue实例中每个组件之间都是相互独立的,都有自己的作用域,所以组件之间是不能直接获取数据.在项目开发中一个组件可能需要获取另一个组件的值,我们可以通过其他方法间接的获取.所以,获取的方法有以下几种: ...
- css的再深入6(更新中···)
background-position 雪碧图 我们的html和css中有三个属性可以向服务器发送请求,src href url. overflow (1) 值hidden 超出就隐藏 (2) 值s ...