一、输入缓冲
在介绍如何进行词法分析之前,先来说说一个不怎么被提及的问题——怎么从源文件中读取字符流。为什么这个问题这么重要呢?是因为在词法分析中,对字符流是有要求的,它必须能够支持回退操作(就是将多个字符放回到流中,以后会再次被读取)。
先来解释下为什么需要支持回退操作,举个简单的例子来说,现在要对两个模式进行匹配:
图 1 流的回退过程
上面是一个简单的匹配过程,仅为了展示回退过程,在后面实现 DFA 模拟器时会详细解释是如何匹配词素的。
现在来看看 C# 中与输入相关的类,有 Stream,它支持流的查找,但是只能以字节方式访问;BinaryReader 和 TextReader 虽然