A template-based compiler-compiler