Draft recursive-descent parser. We're getting somewhere.