通常,为编译器读取文件的最佳方法是什么?

时间:2013-10-16 10:24:12

标签: file compiler-construction token

我知道这是一个普遍的问题。

我要编写一个编译器,我想知道在读取文件时是否更好地使用该语言的标记(即首先打开文件,然后在阅读时提取标记,以及最后关闭文件)或首先读取文件,关闭它然后使用变量中的数据。伪代码就像:

file = open(filename);
textVariable = read(file);
close(file);

getTokens(textVariable);

第一个选项是:

file = open(filename);
readWhileGeneratingTokens(file);
close(file);

我猜第一个选项看起来更好,因为在主内存方面没有额外的成本。但是,我认为使用第二个选项可能会有一些好处,因为我最大限度地缩短了文件打开的时间。

2 个答案:

答案 0 :(得分:0)

我无法提供任何硬数据,但通常编译器花费令牌化源代码的时间与优化/生成目标代码所花费的时间相比相当小。因此,希望最小化源文件打开的时间似乎为时过早。此外,在标记化之前将整个源文件读入内存将阻止任何类型的逐行执行(想想解释语言)或从非文件位置读取输入(想想像stdin这样的流)。我认为可以肯定地说,将整个源文件读入内存的开销不值得计算机的资源,最终会对您的项目产生不利影响。

答案 1 :(得分:0)

编译器经过精心设计,能够在输入时一次只执行一个字符。它们在处理之前不会读取整个文件,或者说它们不需要这样做:这只会增加无意义的延迟。他们甚至不需要在处理之前读取整行。