Isn't this what perl6 grammars set out to solve?
Some interesting articles about perl6's parsing:
http://dev.perl.org/perl6/doc/design/apo/A05.html (Apocalypse 5)
and especially
http://dev.perl.org/perl6/doc/design/exe/E05.html#A_cleaner_... (Exegesis 5)
The bad news is that the syntax is rather insane and perl-like. But the good news is it's some seriously powerful stuff.