C++ parser combinator library