A process to discover the dependencies between different data items manipulated by a program. The order of execution in a data driven language is determined solely by the data dependencies. For example, given the equations
1. X = A + B 2. B = 2 + 2 3. A = 3 + 4
a data-flow analysis would find that 2 and 3 must be evaluated before 1. Since there are no data dependencies between 2 and 3, they may be evaluated in any order, including in parallel.
This technique is implemented in hardware in some pipelined processors with multiple functional units. It allows instructions to be executed as soon as their inputs are available, independent of the original program order.