When and how to develop domain-specific languages
Eli: a complete, flexible compiler construction system