parser combinator (not finished)