【发布时间】:2015-03-16 08:11:25
【问题描述】:
我想第一次用 C# 编写编译器,但不知怎的,我不知如何处理它的缓冲!我的参考文献是编译器、原理、技术和工具, 它说:
由于处理字符所花费的时间量和 大量的字符,必须在过程中处理 大型源程序的编译,专门的缓冲 已经开发了一些技术来减少开销 需要处理单个输入字符。一个重要的方案 涉及到两个交替重新加载的缓冲区,每个缓冲区的 同样大小N,N通常是一个磁盘块的大小,例如4096 字节。使用一个系统读取命令,我们可以将 N 个字符读入一个 缓冲区,而不是每个字符使用一个系统调用。如果小于 N 个字符保留在输入文件中,然后是一个特殊字符, 用eof表示,标记源文件结束,不同 来自源程序的任何可能的字符。
这本书里也说过,我们把eof放在每个缓冲区的末尾,以实现我们到达缓冲区的末尾。它有两个指针forward和 lexemBegine 指向缓冲区中的词位! 我的问题是我不知道如何创建这个缓冲区?我应该在 sourceBuffer 类中创建大小为 N 的数组或缓冲区,然后如何从 StreamReader 读取文件并将源文件的 N 个字符放入数组中? 如果我从源文件中读取字符,会有什么问题?
【问题讨论】:
标签: c# compiler-construction buffer