From preprocessor-constrained parse graphs to preprocessor-constrained control flow
Featherweight Java: a minimal core calculus for Java and GJ