【问题标题】:how to write buffer for compiler?如何为编译器编写缓冲区?
【发布时间】:2015-03-16 08:11:25
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# compiler-construction buffer


    【解决方案1】:

    您似乎引用了 1986 年的最后一版“编译器:原理、技术和工具”。(但即使在那个时候引用的部分已经过时了)。

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

    只需使用 StreamReader 即可完成所有这些工作。然后逐个字符地阅读,直到找到完整的标记,然后按照这本优秀书籍中的描述处理你的标记。

    【讨论】:

    • 检查StreamReader的内部charBuffer属性在Microsoft Reference Source的使用显示了本书中预见的一些实现方面
    • 哦,非常感谢,正因为如此,我完全糊涂了!我一直使用 StreamReader,但我不知道这一点!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    相关资源
    最近更新 更多