How to implement a programming language