Well, the way you ask your question in abstract sort of biases it towards a CS-heavy approach, doesn't it?
What's your goal?
I've written non-trivial macros that could be understood to be a tiny compiler, but wasn't ever interested in compiler design and I can't claim to know much about it.