C# 如何为编译器编写缓冲区?

C# 如何为编译器编写缓冲区?,c#,compiler-construction,buffer,C#,Compiler Construction,Buffer,我第一次想用C#编写编译器,但不知怎的,我弄丢了如何处理它的缓冲!我的参考资料是编译器、原理、技术和工具,上面说: 因为处理字符和 处理过程中必须处理的大量字符 编译一个大型源程序,专门缓冲 已经开发了一些技术来减少开销 需要处理单个输入字符。一个重要的方案 涉及两个交替重新加载的缓冲区,每个缓冲区都是 相同的大小N,N通常是磁盘块的大小,例如4096 字节。使用一个系统读取命令,我们可以将N个字符读入一个 缓冲区,而不是每个字符使用一个系统调用。如果少于 N个字符保留在输入文件中,然后是一个特

我第一次想用C#编写编译器,但不知怎的,我弄丢了如何处理它的缓冲!我的参考资料是编译器、原理、技术和工具,上面说:

因为处理字符和 处理过程中必须处理的大量字符 编译一个大型源程序,专门缓冲 已经开发了一些技术来减少开销 需要处理单个输入字符。一个重要的方案 涉及两个交替重新加载的缓冲区,每个缓冲区都是 相同的大小N,N通常是磁盘块的大小,例如4096 字节。使用一个系统读取命令,我们可以将N个字符读入一个 缓冲区,而不是每个字符使用一个系统调用。如果少于 N个字符保留在输入文件中,然后是一个特殊字符, 由eof表示,标记源文件的结尾,与 源程序中任何可能的字符

在这本书中还提到,我们在每个缓冲区的末尾放置了eof,以实现我们到达缓冲区的末尾。它有两个指针forwardlexebgine,指向缓冲区中的词素! 我的问题是我不知道如何创建这个缓冲区?我应该在sourceBuffer类中创建大小为N的数组或缓冲区,然后如何从StreamReader读取文件并将源文件的N个字符放入数组?
如果我从源文件中读取字符,会出现什么问题?

您似乎引用了1986年的最新版《编译器:原理、技术和工具》。(但即使在当时,引用的部分也已经过时)

在现代编程语言中,如C#(或者更准确地说,在其I/O库中),这种缓冲已经实现(以一种健壮、经过测试、高性能的方式)


只需使用
StreamReader
即可完成所有这些工作。然后一个字符接着一个字符地读,直到找到一个完整的令牌,然后按照这本优秀的书中的描述处理令牌。

检查
StreamReader
的内部
charBuffer
属性的使用,展示了本书中预见的一些实现方面哦,非常感谢,正因为如此,我变得完全糊涂了!我总是使用StreamReader,但我不知道这一点!