Я работаю над автоматизацией инструмента, который печатает все константы в 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)
редактировать: текущий вывод: константа: тип = int, значение = 0x243456BE желаемый вывод: константа: тип = int, name = имя переменной, которой принадлежит константа (обычно имя массива), значение = 0x243456BE