Compilers are very much like life in that the basic structure is stacks of automata, each consuming the input of its parents or children and producing something that us subsequently consumed by the same components.
Stacks and layers of simple components can produce rock solid results, and rock solid complex results. If complexity is simple on the inside, it’s good. If complexity is complex on the inside, it’s just a mess.