预处理器和编译器之间的边界究竟在哪里?

fre*_*low 8 c++ compiler-construction preprocessor terminology

根据各种消息来源(例如,与Kevlin Henney的SE电台节目,如果我没记错的话),"C with classes"是用预处理器技术实现的(输出然后被输入到C编译器),而C++一直是用编译器实现(刚好在早期就吐出了C).这似乎引起了一些混乱,所以我想知道:

预处理器和编译器之间的边界究竟在哪里?你什么时候调用一个实现语言"预处理器"的软件,什么时候称它为"编译器"?

那么,"编译语言"是一个既定术语?如果是这样,究竟是什么意思?

Dar*_*mas 8

这是个有趣的问题.我不知道一个明确的答案,但如果按下一个,我会说这个:

预处理器不解析代码,而是扫描嵌入的模式并扩展它们

编译器实际上通过构建AST(抽象语法树)来解析代码,然后将其转换为不同的语言