Language designers use a specialized kind of compiler to make the compilers that they expect others to use. There is even more regress as one bootstraps the compiler compiler.
I first learned in 1966 that one could take the condition out of an if statement and store that result in a boolean variable. This idea struck me like a bolt of lightning.
(This was my first glimmer of the uncountable versatility of even a small grammar. At the same time I was trying to understand how a transistor amplified and why a modulated signal had sidebands. All mysteries that were eventually revealed.)
A decade later, after the field of computer science had studied the structure of language, and the methods of processing kinds of languages, I found myself studying compilers once again.
The graduate level course expected us to build the tools we would use to write a compiler. The tool would be a compiler compiler.
In that class we could say compiler compiler and understand exactly what we were talking about. We could also refer to the compiler we used to compile our compiler compiler without any ambiguity. This was not a bolt of lightning, more like the deep rumble of AC power.
Not relevant, so much as weirdly associated: Dropout Boogie