crafting a compiler