Compiler construction 为什么预处理与编译是不同的步骤?

Compiler construction 为什么预处理与编译是不同的步骤?,compiler-construction,compilation,preprocessor,Compiler Construction,Compilation,Preprocessor,目前正在学习编译器模块,我是编译的绝对初学者。有人能帮我把这个问题弄清楚吗?预处理包括转换与要编译的语言没有直接联系的源代码。预处理器的产品也是源代码 source --->[ preprocessor ]--> modified source -->[ compiler ]--> object -->[ linker ]--> executable 通常,它通过在源代码文本上提供一些替代规则来工作 不必如此 当然,单词“preprocessor”的使用意味

目前正在学习编译器模块,我是编译的绝对初学者。有人能帮我把这个问题弄清楚吗?

预处理包括转换与要编译的语言没有直接联系的源代码。预处理器的产品也是源代码

source --->[ preprocessor ]--> modified source -->[ compiler ]--> object -->[ linker ]--> executable
通常,它通过在源代码文本上提供一些替代规则来工作

不必如此

当然,单词“preprocessor”的使用意味着这是正确处理之前的一步,对于C预处理器来说确实如此,它最初是一个单独的程序(在一些实现中仍然存在)


但是,预处理器执行的操作——以文本形式包括其他文件;宏观扩张;条件编译——理论上可以在编译期间执行,有些语言就是这样定义的。(许多语言根本没有实现这些功能,只能由外部实用程序来实现。)

请尝试在社区cs.stackexchange.com中询问这个问题,这可能是一个更好的地方。谢谢,请记住这一点!Cobol是一种具有内置“预处理”的语言的很好的例子,其中包含复制、替换和复制替换动词。处理通常位于扫描仪和编译器之间。