1

我正在考虑编写能够处理宏的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 的安装和查找功能,我还需要什么来替换括号内的文本?有没有人有任何建议或一些伪代码?我知道这是一项复杂的任务,但是,最好的方法是什么?

4

3 回答 3

1

宏处理器非常有趣,但也可能成为难以驯服的野兽(例如考虑递归扩展)。

您可以查看已经存在的宏处理器的实现,例如 M4 ( http://www.scs.stanford.edu/~reddy/links/gnu/m4.pdf )。

一般来说,您将需要:

  • 一个解析器,它将首先从您的文件中提取宏定义(当然,从文件中删除它们)
  • 另一个解析器,它识别宏需要在哪里扩展并执行扩展(例如,您将要跳过字符串和注释!)

我认为这是一个非常有趣的练习。处理所有这些的正确数据结构并非易事。

于 2009-11-16T10:38:22.757 回答
0

这是一个模式匹配问题,你应该先看一下正则表达式,然后当你掌握了理论之后,你可以继续阅读lexers

正则表达式基本上是将字符串与预定义的模式匹配。

一些正则表达式(正则表达式的缩写)软件/库:
- Boost.Regexp
- GNU C 库正则表达式
- PCRE

词法分析器是一种对匹配文本执行某些操作的软件,例如,用其他文本替换该文本,基本上是您似乎需要的。

一些已知的词法分析器:
- flex
- Boost.Wave

于 2009-11-16T05:45:53.650 回答
-1

2条建议:

即“不要在家里尝试这个”。

于 2009-11-16T05:37:59.150 回答