2010-02-14 96 views
-1

我正处于扫描阶段以构建编译器。我想知道在处理之前是否应该读取整个文件内容?我认为它应该会更好,因为我的编译器可能需要稍后进行一些优化(所以我不需要重新读取该文件)。但是如果输入程序有点大,可能需要很多内存才能保存文件内容。编译器:我应该读取整个文件进行扫描

需要一些更多的想法和讨论。

谢谢。

+0

请注意,16兆字节同时是一个很小的内存量,以至于现在的计算机和大约一年的专业程序员的源代码输出都没有被​​注意到(给予或带走)。除非您打算编译生成的代码,否则您是否意识到编译器输入耗尽内存意味着什么?你的问题中的“如果输入程序很大”条款是可笑的。 – 2010-02-14 18:50:25

+0

对于多通道编译器,第一遍是源代码。第二,第三,...通行证怎么样?任何编译器多次处理源代码? – user397232 2010-02-14 18:51:34

+0

不好意思,但你为什么要构建一个编译器?这是一个非常基本的问题,我认为任何有足够知识的人建立一个人就已经知道了。 – 2010-02-14 18:51:40

回答

1

优化通常不需要对实际源代码进行第二次传递 - 您应该做的第一件事是对它进行标记并对标记版本进行操作。挂在源头上的原因是,如果你需要在你的错误信息中完全重现它,你可能不会这样做。

1

通常情况下,你首先想到的是一种词法分析,即将输入文件分成标记。然后你创建一个符号表和一个抽象语法树。任何优化或代码生成都可以在这些中间数据结构上工作,而不是在原始输入文件上。因此,我认为完全读取和缓冲输入文件没有意义。

1

优化将发生在Abstract Syntax Tree或稍后的一些中间表示上,而不是在源代码上。 AST绝对需要完全适应内存。源代码没有,因为它可以在运行中转换成AST。