Text this: Writing interactive compilers and interpreters