implement ^x.y.z parsing