The document discusses source-to-source compilers. It defines a source-to-source compiler as a compiler that takes source code as input and produces source code as output, which can then be used as input for another compiler. Some key differences between regular compilers and source-to-source compilers are discussed. Examples of popular source-to-source compilers like ROSE, DMS, OpenMP, and Cetus are provided.