Building a interpreter from scratch