我在一个开发特定源到源编译器的项目中。在这个阶段,我需要在 C 源代码中找到变量的类型。例如,如果代码是,c[i]=j*f[k]+p;
我应该找到 、 、 、 、 和变量的类型c
(i
、j
和f
源k
中p
定义int*
的float
任何其他类型)。有什么工具可以做到这一点吗?如果有多个工具,我更喜欢基于 python 的工具。
提前谢谢你。
我在一个开发特定源到源编译器的项目中。在这个阶段,我需要在 C 源代码中找到变量的类型。例如,如果代码是,c[i]=j*f[k]+p;
我应该找到 、 、 、 、 和变量的类型c
(i
、j
和f
源k
中p
定义int*
的float
任何其他类型)。有什么工具可以做到这一点吗?如果有多个工具,我更喜欢基于 python 的工具。
提前谢谢你。
您可以使用pycparser编写自己的解析器,您可以在此处找到更多示例
from pycparser import c_parser
parser = c_parser.CParser()
text = 'int x; int y; float z;'
ast = parser.parse(text, filename='<none>')
ast.show()
FileAST:
Decl: x, [], [], []
TypeDecl: x, []
IdentifierType: ['int']
Decl: y, [], [], []
TypeDecl: y, []
IdentifierType: ['int']
Decl: z, [], [], []
TypeDecl: z, []
IdentifierType: ['float']
您应该能够使用 llvm-tools 从源代码创建AST,然后分析 AST。除了你的任务是编写类似 llvm-tools 的东西 :)
这是一个如何使用 llvm-bindings for python 分析 c 文件的示例: