I had a great experience using PetitParser (https://github.com/petitparser) in Dart, though it turned out my use case was a bit hairy for combinatorial parsing: I made a parser for org-mode (https://orgmode.org/) markup, which is similar to Markdown.
Markdown-like formats are quite line-oriented and sometimes context-sensitive in ways that make rules hard to express.
I did get something usable, but I had to make some new primitives and break some efficiency rules (copying substrings).
The result is here: https://github.com/amake/org_parser
(Shameless plug) It’s used in my FOSS mobile org-mode viewer app Orgro: https://orgro.org