Static Program Analysis for String Manipulation Languages