Describir: The theory and practice of compiler writing