2013-02-13 3 views
1

Я новичок в stackoverflow, но до сих пор я получил большую помощь благодаря сообществу для этого.Игнорировать включает в себя #pycparser и определять несколько подграфов в #pydot

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

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

Два вопрос:

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

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

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

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" 

Надеюсь, у вас есть мой вызов ... любые идеи?

Спасибо!

EDIT:.

Я решил вопрос о 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)   

ответ

0

Я могу обратиться к pycparser ЧАСТЬ препроцессор оставляет #line директивы, в которых указывается, к какому файлу & пришел код строки, и pycparser его потребляет. Вы можете получить эту информацию из создаваемого AST (см. тесты для примера).