Static program analysis for string manipulation languages