1. A method, performed using computing functionality, for generating subprograms that perform string manipulation tasks, comprising: receiving and storing input-output examples, the input-output examples providing input strings and corresponding output strings; identifying tokens that are used in input strings of the input-output examples, to provide identified tokens; identifying a first program-generating constraint; determining whether substrings align with natural token boundaries; generating, based on the first program-generating constraint, sets of subprograms for the respective input-output examples, each subprogram configured to transform at least one input string associated with a particular input-output example when the substrings align with natural token boundaries, otherwise excluding generation of loop-type expressions and subprograms for the respective input-output examples; grouping the sets of subprograms into partitions, yielding at least one representative subprogram for each partition; determining whether said generating and grouping provide results that satisfy a predefined success test; and repeating said generating and grouping, as governed by a second program-generating constraint, if it is determined that said generating and grouping do not satisfy the predefined success test, the second program generating constraint permitting at least one generation of loop-type expressions or subprograms based on the substrings not aligning with natural token boundaries thereby imposing greater processing complexity and allowing for a larger set of subprograms compared to the first program generating constraint.