Jump to content

Control-flow analysis

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Nick Number (talk | contribs) at 22:06, 15 December 2011 (repaired link(s) to disambiguation page - (you can help) - CFA). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

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.

References

  1. ^ Neil D. Jones (1981), "Flow analysis of lambda expressions", Automata, Languages and Programming: 114–128, doi:10.1007/3-540-10843-2_10
  2. ^ Shivers, Olin (1988), "Control-flow analysis in Scheme", Proceedings of the ACM SIGPLAN'88 Conference on Programming Language Design and Implementation (PLDI), SIGPLAN Notices, Vol.23, No.7: 164–174, doi:10.1145/53990.54007 {{citation}}: Unknown parameter |note= ignored (help); line feed character in |note= at position 62 (help)