What is the easiest way to generate a Control Flow-Graph for a method in Python?

13,051

Solution 1

There's a Python package called staticfg which does exactly the this -- generation of control flow graphs from a piece of Python code.

For instance, putting the first quick sort Python snippet from Rosseta Code in qsort.py, the following code generates its control flow graph.

from staticfg import CFGBuilder

cfg = CFGBuilder().build_from_file('quick sort', 'qsort.py')
cfg.build_visual('qsort', 'png')

quick sort

Note that it doesn't seem to understand more advanced control flow like comprehensions.

Solution 2

RPython, the translation toolchain behind PyPy, offers a way of grabbing the flow graph (in the pypy/rpython/flowspace directory of the PyPy project) for type inference.

This works quite well in most cases but generators are not supported. The result will be in SSA form, which might be good or bad, depending on what you want.

Share:
13,051

Related videos on Youtube

user739807
Author by

user739807

Updated on June 04, 2022

Comments