write an interpreter