我正处于扫描构建编译器的阶段。我想知道在处理之前是否应该读取整个文件内容?我认为它应该更好,因为我的编译器可能需要稍后进行一些优化(所以我不需要重新读取文件)。但是如果输入程序有点大,那么保存文件内容可能需要大量内存。
需要更多的想法和讨论。
感谢。
答案 0 :(得分:1)
优化通常不需要对实际源代码进行第二次传递 - 您应该做的第一件事就是对其进行标记,然后处理标记化版本。挂起源的原因是你需要在错误消息中准确地重现它,你可能不会这样做。
答案 1 :(得分:1)
通常,您首先想到的是一个词法分析,您可以将输入文件拆分为标记。然后,您构建一个符号表和一个抽象语法树。然后,任何优化或代码生成都适用于这些中间数据结构,而不是原始输入文件。因此,我认为完全读取和缓冲输入文件没有意义。
答案 2 :(得分:1)
优化将在Abstract Syntax Tree或稍后的中间表示上进行,而不是在源代码上进行。 AST肯定需要完全适合内存。源代码没有,因为它可以在运行中转换为AST。