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. representing a symbolic state as a condition-map pair (C, σ) where C denotes a current path condition predicate and σ denotes a map from program variables to symbolic values; c. merging symbolic term values at join nodes to avoid path-explosion by using choose and if-then-else (ite) function operators, where choose is a term of form choose ((C 1 ,t 1 ),(C 2 ,t 2 ),(C 3 ,t 3 )) on expression sort with a non-deterministic choice between the values t 1 (1≦i≦3) given a corresponding condition C 1 ; d. performing simplification of term values using rewriting logic, wherein a set of rules for simplifying choose and ite terms are used along with rules for simplifying Presburger arithmetic expressions; e. determining successors of the graph node to which data must be propagated; f. updating symbolic data for elements of the successors; g. performing anti-unification to generalize similar terms obtained at a loop head; and h. displaying the program analysis for code review.