Control flow analysis is a static code analysis technique for determining the control flow of a program. The control flow is expressed as a control flow graph (CFG).
For many languages, the control flow of a program is explicit in a program's source code. As a result, control-flow analysis implicitly usually refers to a static analysis technique for determining the receiver(s) of function or method calls in computer programs written in a higher-order programming language. For both functional programming languages and object-oriented programming languages, the term CFA refers to an algorithm that computes control flow.
The term control flow analysis was introduced independently by Neil D. Jones[1] and Olin Shivers[2].
In a programming language like Scheme, the target of a function call may not be explicit. For example in the isolated expression:
(lambda (f) (f x))
it is unclear to which procedure f
may refer. To determine the possible targets, a control-flow analysis must consider where this expression could be invoked, and what argument it may receive.
Abstract interpretation, constraint solving and type systems may be used to compute control-flow analysis.