Our goal is to implement some of the most common data-flow analysis, useful for code generation and optimization. For instance, constant propagation can have an impact on register allocation. Our interest was to verify how the collected information could be suitably used by the compiler.
Data-flow analyses make information flow forwards (or backwards) through the control-flow graph (CFG), in a more powerful and direct way than the parser attributes.