Игнорировать включает в себя #pycparser и определить несколько подграфов в #pydot

Я новичок в stackru, но я получил большую помощь до сих пор, спасибо сообществу за это.

Я пытаюсь создать программное обеспечение, показывающее мне вызывающий depandencys для legacycode.

Я разбираю каталог с кодом c с помощью pycparcer, и для каждого файла я хочу создать подграф с помощью pydot.

Два вопроса:

  1. При синтаксическом анализе AC-файла анализатор ссылается на #include, и я также получаю функции в моем AST из включенных файлов. Как я могу знать, если функция включена, или оригинально из этого фактического файла / или игнорировать #include??

  2. Для каждого файла я хочу создать подграф, а затем добавить все функции в этом файле в этот подграф. Я не знаю, сколько подграфов мне нужно создать...

У меня есть набор файлов, где каждый файл является морозилкой с функциями этого файла, что-то вроде этого возможно?

    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, который он создает (см. Тесты для примера).

Другие вопросы по тегам