Introduction
When a program runs, it changes values stored in variables. To understand which assignments affect a certain point in the program, we need a way to track where each variable's value comes from. This is the problem that reaching definitions analysis solves.