A comparative study of automatic programming techniques