A general problem with flow graphs is that they can be defined at any level of granularity. For example, with a CFG each node could be an individual statement, but statements can contain arbitrarily complex expressions, such as loops and large mathematical expressions.
How should function calls be handled? Should they be left alone or expanded inline into the flow graph?
My inclination is to reflect the user's decomposition of tasks as much as possible. For example, leave function calls as they are, because the user decides how to compose functions, so if they don't like the flow graph's decomposition, they need only change their code accordingly.
Another part of the solution may be to make the flow graphs interactive, so that the user can click on a composite task and "zoom in" to see the underlying details.
A general problem with flow graphs is that they can be defined at any level of granularity. For example, with a CFG each node could be an individual statement, but statements can contain arbitrarily complex expressions, such as loops and large mathematical expressions.
How should function calls be handled? Should they be left alone or expanded inline into the flow graph?
My inclination is to reflect the user's decomposition of tasks as much as possible. For example, leave function calls as they are, because the user decides how to compose functions, so if they don't like the flow graph's decomposition, they need only change their code accordingly.
Another part of the solution may be to make the flow graphs interactive, so that the user can click on a composite task and "zoom in" to see the underlying details.