All this seems for me to be overcomplicated. Naturally parsing is just a function, which may call subfunctions, sometimes recursively. Sometimes it can do it in a loop - in order to parse sequences.
I have written many parsers in such a way and I didn't even require such terms as "parser combinators".