Semantics, Applications, and Implementation of Program Generation by Walid Taha