But then I had occasion to implement a "real" language, and I just went with a hand-coded parser instead, despite a desire to avoid that.
I think these kinds of tools are good for prototyping toy languages, as you say, but unfortunately they're still TWO steps away from production quality implementations of real language. They're not good for even prototyping "real" languages (think shell, C++, Perl, Make), or production-quality implementations of "toy" languages.
Possible reasons for this:
1) Developer experience... you end up having to reason about control flow and performance for "real" languages, breaking out of the declarative abstraction.
2) Most parsing tools are frameworks rather than libraries -- they kind of force you into a single lexer -> parser -> tree architecture (ANTLR being a prime example, re2c being a great counterexample for lexing). But this architecture doesn't work for many languages.
3) They make other unwarranted assumptions, e.g. about whitespace, which Bourne shell violates.
There are a bunch of other reasons I can list if anyone is interested. A a good research topic is to bridge this gap.
I wrote a very complete parser for shell in Python and sort of "discovered" what the language is... I would love to now port it to a meta-language and generate C/C++ code, rather than port it to C++ by hand.
http://www.oilshell.org/blog/2016/11/17.html
But I think it's impossible. I was thinking of putting out a "meta-language bounty" to help me solve this problem.
I think what's more likely is that I will end up writing a custom code generator to port my subset of Python to C++. But I would love to be proven wrong. The Python parser is 3500 lines and the AST is 2000 lines. I would like to describe this with 200-500 lines of code in a meta-language (factor of 10 reduction). Although I think some things like good error messages are sort of "irreducible" so maybe that's impossible.
Basically the goal is: describe bash with a meta-language. I have described it in ~5K lines of Python, which is a pretty good compression over the actual bash source code, where the parser is between 10K and 20K lines, spread out over many files and many stages.
I wonder what Alan Kay would say about bash. I think he would probably say "don't use such a complex tool". But I think that's just an indication of the gap between research and practice. More people have used bash than any of his languages, and it consumes more CPU cycles worldwide as well. Although his ideas were influential, they had to be modified to actually work in practice.