Dipanwita Sarkar, Oscar Waddell And R. Kent Dybvig
A compiler structured as a small number of monolithic passes is difficult
to understand and difficult to maintain. The steep learning curve is
daunting and even experienced developers find that modifying existing
passes is difficult and often introduces subtle and tenacious bugs. These
problems are especially frustrating when the developer is a student in a
compiler class. An attractive alternative is to structure the compiler as a
collection of many fine-grained passes, each of which performs a single
task. This organization aligns the actual implementation of a compiler with
its logical organization, simplifying development, testing, and
debugging. This paper describes the methodology and tools comprising a
framework for constructing such compilers.