Flexible Representation For Genetic Programming : Lessons From Natural Language Processing