Answer from cs61c-ew (Joo-Rak Son 16103505) for Question 1 In a very simple term, the purpose of the C preprocessor is to make the coding easier for the programmer--it shortens long names and phrases, avoids confusion by renaming some values, etc. C preprocessor keywords (#define, #include, etc) are the language of its input, and the output is C language. In a sense, this is metacircular, but in fact, the transition is always from the preprocessor keywords to C language. If the preprocessor compilation were placed in figure 3.21, it would be at the very top level (before any other step).