编译原理——3.2 输入缓冲
来源:互联网 发布:天眼通软件下载 编辑:程序博客网 时间:2024/06/06 01:17
3.2.1 缓冲区对
E = M * C ** 2
上述表达式将被一次性读取N个字符存储在长度为N的缓冲区中,如果长度不及N,则后面补上特殊字符eof表示结束。
程序维护两个指针(lexemeBegin指针和forward指针),以读取符号“”为例,一开始lexemeBegin和forward指针均指向第一个字符’’,然后forward向前看,指向第二个字符’’,发现可以和前面字符串构成词素,因此再向前看,forward指向’2’,不是词素””一部分,而此时前面两个字符已经匹配到词素“”,因此将词素“”返回,然后将lexemeBegin右移一个位置。
现在考虑一种情况,某一词素很长,forward向前看的长度超过了缓冲区长度N,此时将无法确认正确的词素,因此可以通过增加另一个缓冲区,当forward向前看到第一个缓冲区结尾时再将N个新字符读取到另一个缓冲区中,然后将forward指向这个新载入字符的缓冲区的头部,只要我们从不需要越过实际的词素向前看很远,以至于这个词素的长度加上我们向前看的距离大于N,我们就绝不会在识别这个词素之前覆盖掉这个尚在缓冲区中的词素。
3.2.2 哨兵标记
在缓冲区末尾加入一个“哨兵”——eof,使得每一次识别一个字符可以直接通过字符是什么判断是否到达缓冲区末尾。
Eof识别分支跳转伪代码:
阅读全文
0 0
- 编译原理——3.2 输入缓冲
- 套接字输入缓冲装置——InternalInputBuffer
- Java学习提要——缓冲输入流
- Ogre笔记八:基础教程五—缓冲输入
- IO流—缓冲字节输入流、输出流
- Javascript 缓冲运动——逐行分析代码,让你轻松了解缓冲运动的原理
- IO流—字符输入流、输出流,缓冲字符输入流、输出流
- 程序设计语言—编译原理
- 程序设计语言—编译原理
- 编译原理—语法分析
- 编译原理语法分析(文本输入)源程序
- Ogre笔记七:基础教程四—帧监听器和非缓冲输入
- 基础教程五(缓冲输入)
- 缓冲输入字符流
- 4.输入缓冲
- 缓冲字节输入流
- 编译原理——引论
- 编译原理—词法分析器
- zookeeper
- JavaWeb学习心得之自定义传统标签
- Spark Streaming通过Socket检测空气质量
- 【学习笔记】计算机网络-利用TELNET进行SMTP的邮件发送
- 大数阶乘
- 编译原理——3.2 输入缓冲
- 利用Java求最大公约数与最小公倍数的算法
- 【Django】ImproperlyConfigured at / Empty static prefix not permitted
- mongo备份
- Commons学习——StringUtils学习
- Git 常用命令
- ARM学习笔记---串口
- 【Java面试题】之类加载:从面试题分析Java类加载机制
- 北京“西直东弯”,大数据告诉你全国“基情”衷于何处