Crafting interpreters. A handbook for making programming languages.