parser combinator.