As I've mentioned in previous posts, I've been writing my own C2Y Compiler / Interpreter / REPL for fun. One of the first things one has to do when writing a C Compiler is to first write a C Preprocessor (also known as the CPP). Counter to what most people think of the C Preprocessor, it is not a text-to-text translator. Instead it is a source to C token translator, with most implementations offering a text output to see what it does. Historically, it might have been implemented as a text-to-text translator, but the C standard specifies it as a series of phases that ends up with C tokens that are consumed by the C parser until you eventually end up with a C translation unit.