1

我目前正在制作一个旨在能够在程序中输入数据的解析器。使用的语法极大地受到了 C 的启发。

我很乐意将一种预处理器内联替换复制到其中。

例如

#define HELLO ((variable1 + variable2 + variable3))
int variable1 = 37;
int variable2 = 82;
int variable3 = 928;

事情是……我实际上在使用 C。我还使用 stdio.h 中的标准函数来解析我的文件。那么......我可以使用哪些技术来正确有效地完成这项工作?

标准编译器是否通过重新复制流缓冲区并在重新复制发生时在那里进行替换来替换文本?有没有更有效的技术?

我想我们说预处理器是因为它首先替换所有内容,直到没有 preproc 指令(可能是递归方法?),然后,它开始执行真正的编译工作?

原谅我知识匮乏!

谢谢!

4

3 回答 3

2

不,现代 C 编译器不会将预处理器实现为文本处理器,但是它们将不同的编译器阶段(预处理是其中之一)纠缠在一起。这对于编译器本身的效率以及能够将错误跟踪回原始源代码尤其重要。

自己实现预处理器也是一项繁琐的任务。在开始这样的项目之前请三思而后行。

于 2013-07-28T11:56:08.473 回答
0

是的,你对预处理器是正确的。它的任务是将执行程序所需的所有文件汇集到一个文件中,例如。标准输入法.h。然后它允许编译器编译程序。您要编译的文件作为编译器的参数给出,编译器使用的技术可能因操作系统和编译器本身而异

于 2013-07-28T10:52:21.163 回答
0

C 预处理器处理标记而不是文本。特别是,宏扩展不能包含预处理器指令。其他预处理器,例如 m4,工作方式不同。

于 2013-07-28T11:16:10.370 回答