我想部分解析 C 声明和/或函数定义的列表。
也就是说,我想将它拆分为子字符串,每个子字符串都包含一个声明或函数定义。
然后每个声明(单独)将被传递给另一个模块(它确实包含一个完整的 C 解析器,但我不能直接调用。)
显然,我可以通过在我的程序中包含另一个完整的 C 解析器来做到这一点,但我希望避免这种情况。
到目前为止,我遇到的棘手案例涉及是否'}'
终止声明/定义的问题。例如在
int main(int ac, char **av) {return 0;}
... the'}'
是一个终止符,而在
typedef struct foo {int bar;} *pfoo;
它不是。也可能有这样的病态代码:
struct {int bar;} *getFooPtr(...) { /* code... */ }
笔记
- 请假设 C 代码在我的函数看到之前已经完全预处理。(实际上它没有,但我们有一个解决方法。)
- 我的解析器可能会用LPeg在 Lua 中实现