Compilers and programming languages
Virtually every sufficiently complex problem involves creating a compiler or interpreter in its solution.
We like using compiler and programming language techniques. Many truly flexible systems end up interpreting configuration files that are as complex as any programming language. Also, many complicated problems end up being very similar to compilers in that something is translated into a simpler form. The theory and practice of programming languages and compilers make such problems a snap.

