类似预处理器的替换到解析器中

时间:2013-07-28 10:26:01

标签: c parsing text-parsing

我正在制作一个解析器,目的是能够在程序中输入数据。 使用的语法很大程度上来自C。

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

例如

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

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

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

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

请原谅我缺乏知识!

谢谢!

3 个答案:

答案 0 :(得分:2)

不,现代C编译器没有将预处理器实现为文本处理器,但它们具有不同的编译器阶段(预处理就是其中之一)。这对于编译器本身的效率以及能够将错误追溯回原始源代码尤其重要。

另外,自己实现预处理器是一项繁琐的工作。在开始这样一个项目之前要三思而后行。

答案 1 :(得分:0)

是的,你对预处理器是正确的。它的作用是将执行程序所需的所有文件汇集到例如1个文件中。 stdio.h中。然后它允许编译器编译程序。您要编译的文件作为编译器的参数给出,编译器使用的技术可能会根据操作系统和编译器本身而有所不同

答案 2 :(得分:0)

C预处理器可以处理令牌而不是文本。特别是,宏扩展不能包含预处理程序指令。其他预处理器(如m4)的工作方式不同。