Describir: Writing interactive compilers and interpreters