Greatly simplify parse() by using look-ahead