0
A
回答
1
尝试使用pyparsing,而不是...
from pyparsing import *
# define the structure of a macro definition (the empty term is used
# to advance to the next non-whitespace character)
macroDef = "#define" + Word(alphas+"_",alphanums+"_").setResultsName("macro") + \
empty + restOfLine.setResultsName("value")
with open('myheader.h', 'r') as f:
res = macroDef.scanString(f.read())
print [tokens.macro for tokens, startPos, EndPos in res]
myheader.h看起来是这样的:
#define MACRO1 42
#define lang_init() c_init()
#define min(X, Y) ((X) < (Y) ? (X) : (Y))
输出:
['MACRO1', 'lang_init', 'min']
的setResultsName允许你调用的部分你希望成为会员。因此,为了您的答案,我们做了tokes.macro,但我们也可以轻松访问该值。我把这个例子中的一部分,从Paul McGuire's example here
您可以了解更多关于pyparsing here
希望这有助于
相关问题
- 1. 解析C头文件,以确定所有的宏定义
- 2. 评估C++头文件中的所有宏
- 3. 包含由宏定义的头文件
- 4. 如何在生成文件中定义头文件中的宏
- 5. 查找定义C函数的头文件
- 6. 在C++中查找所有目录中的所有文件
- 7. 如何检查Makefile中c文件中定义的宏?
- 8. C++重定义 - 头文件
- 9. 查找所有头文件和源文件依赖关系的工具C
- 10. 有关宏定义和头文件的错误
- 11. C++查找所有.wav文件
- 12. (C#)如何读取文件夹中的所有文件以查找特定行?
- 13. 在标准中定义的C++头文件<string>的宏_STRING_是?
- 14. 根据指定的头文件在C中扩展宏
- 15. C++中的宏可以定义宏吗?
- 16. 基于宏的C++头文件选择
- 17. 重新定义的类C++头文件
- 18. 如何在MATLAB中查找目录中的所有.c文件?
- 19. 在ClearCase中查找具有特定版本的所有文件
- 20. 打印所有已定义的宏
- 21. 仅使用宏在头文件中定义静态变量
- 22. 为什么不建议在头文件中定义宏?
- 23. 查找原始文件中定义的所有消息的描述符
- 24. C/C++编译器如何找到头文件中原型的定义?
- 25. 查找具有特定文本文件的所有计算机
- 26. 处理c文件中定义的变量而非头文件
- 27. 查找给定包所定义的所有选项
- 28. C++头文件说,变量未定义:
- 29. C++头文件和类定义问题
- 30. 包含自定义头文件(ANSI C)
在最简单的形式,你可以使用grep能不?什么是确切的用例?也就是说,当你说要列出所有的宏定义时,你的意思是CPP的方式是否意味着你只想列出它们? –
我知道pycparser使用cpp,我设法得到c文件中的结构定义列表。但是我找不到在h文件中获取所有#define宏的方法。现在,我只是用python解析头文件,但这不是我想要的。谢谢。 – user1587140