Still easily implemented with combinators the whole way down. It’s building an ast, that’s it. Once you have a tree, you can do whatever you want with the result before passing it to a compiler for a language. Here though, just serialization stuff.
Edit: It’s not that accurate. It’s just math used in a way to compose parsers using parsers.
I'm dense: what's a combinator?
edit: Forgot partial application. Not strictly required, but super handy.