1. A computer implemented method for analyzing data-flow using program expressions or terms, comprising: a. extracting a control flow graph node from a work list; b. merging symbolic term values at join nodes; c. performing simplification of term values using rewriting logic; d. determining successors of the graph node to which data must be propagated; e. updating symbolic data for elements of the successors; and f. displaying the program analysis for code review.