我正在考虑编写 C 定义能够处理宏的处理器的最佳方法。不幸的是,我没有想到任何聪明的东西。 它的行为应该与 C 中的完全一样,因此它处理这样的表达式:
#define max(a, b) (a > b ? a : b)
printf("%d\n", max(a, b));
或者这个:
#define F 10
#define max(a, b) (a > b ? a : b)
printf("%d\n", max(a, F));
我知道 K&R2 的安装和查找功能,我还需要什么 替换括号内的文本? 有没有人有任何建议或一些伪代码? 我知道这是一项复杂的任务,但最好的方法是什么?
最佳答案
宏处理器非常有趣,但可能会变成难以驯服的野兽(例如,想想递归扩展)。
您可以查看现有宏处理器的实现,例如 M4 (http://www.scs.stanford.edu/~reddy/links/gnu/m4.pdf)。
一般来说,您需要:
- 首先从您的文件中提取宏定义的解析器(当然是从文件中删除它们)
- 另一个解析器,用于识别需要扩展宏的位置并执行扩展(例如,您将要跳过字符串和注释!)
我认为这是一个非常有趣的练习。处理所有这些问题的适当数据结构并非易事。
关于C宏处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1740262/