My knowledge in this area is very dated. But is Lex (Flex) & Yacc (Bison) not the standard way to parse?
Many years ago when I was trying parsing for something else I was informed that these tools generally do as good if not a better job than hand written parsers.
Does that not hold any more?
Though, Flex+Bison is not the easiest of tools to learn.