Игнорировать включает в себя #pycparser и определить несколько подграфов в #pydot
Я новичок в stackru, но я получил большую помощь до сих пор, спасибо сообществу за это.
Я пытаюсь создать программное обеспечение, показывающее мне вызывающий depandencys для legacycode.
Я разбираю каталог с кодом c с помощью pycparcer, и для каждого файла я хочу создать подграф с помощью pydot.
Два вопроса:
При синтаксическом анализе AC-файла анализатор ссылается на #include, и я также получаю функции в моем AST из включенных файлов. Как я могу знать, если функция включена, или оригинально из этого фактического файла / или игнорировать #include??
Для каждого файла я хочу создать подграф, а затем добавить все функции в этом файле в этот подграф. Я не знаю, сколько подграфов мне нужно создать...
У меня есть набор файлов, где каждый файл является морозилкой с функциями этого файла, что-то вроде этого возможно?
for files in SetOfFiles:
#how to create subgraph with name of files?
for function in files:
self.graph.add_node(pydot.Node(funktion)) #--> add node to subgraph "files"
Я надеюсь, что вы получили мой вызов... есть идеи?
Спасибо!
РЕДАКТИРОВАТЬ:
Я решил вопрос о pydot, это было тихо легко... Так что я остаюсь с моей проблемой pycparser:(
for files in ListOfFuncs:
cluster_x = pydot.Cluster(files, label=files)
for functions in files:
cluster_x.add_node(pydot.Node(functions))
graph.add_subgraph(cluster_x)
1 ответ
Я могу обратиться к части Pycparser. Препроцессор уходит #line
директивы, которые определяют, для какого файла и строкового кода пришелся, а pycparser их использует. Вы можете получить эту информацию из AST, который он создает (см. Тесты для примера).