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

时间:2015-03-16 08:11:25

标签: c# compiler-construction buffer

我想第一次使用C#编写编译器而且我不知何故失去了关于缓冲的方法!我的参考是编译器,原理,技术和工具,,它说:

  

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

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

1 个答案:

答案 0 :(得分:2)

似乎你从1986年开始参考上一版的“编译器:原理,技术和工具”。(但即使在那个时候,引用的部分已经过时了。)

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

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