我正在研究自动化一个打印出 C 文件中所有常量的工具。到目前为止,我已经设法打印出 C 文件中的所有常量,但是如果不打印出整个抽象语法树,我想不出一种方法来显示它们关联的变量名,这有很多不必要的给我的信息。有没有人有任何想法?现在,它将打印出常量及其类型。这是我的代码:
from pycparser import c_parser, c_ast, parse_file
class ConstantVisitor(c_ast.NodeVisitor):
def __init__(self):
self.values = []
def visit_Constant(self, node):
self.values.append(node.value)
node.show(showcoord=True,nodenames=True,attrnames=True)
def show_tree(filename):
# Note that cpp is used. Provide a path to your own cpp or
# make sure one exists in PATH.
ast = parse_file(filename, use_cpp=True,cpp_args=['-E', r'-Iutils/fake_libc_include'])
cv = ConstantVisitor()
cv.visit(ast)
if __name__ == "__main__":
if len(sys.argv) > 1:
filename = sys.argv[1]
else:
filename = 'xmrig-master/src/crypto/c_blake256.c'
show_tree(filename)
编辑:当前输出:常量:type=int,value=0x243456BE 期望输出:常量:type=int,name=变量名常量所属(通常是数组名),value=0x243456BE