SMS: Writing interactive compilers and interpreters / P. J. Brown.