<p>What tools are there for me to build a real, honest to goodness external DSL. And no, I'm not talking about abusing Ruby, Boo, XML or another existing language or syntax, I mean a REAL external DSL -- my own language for my own purposes.</p>

<p>I know that there are a few language workbenches being developed and I've heard about things like "Irony" for .NET.  And, of course, there's ANTLR, Lex/Yaac, etc but I'm afraid those are too complicated for what I'm trying to do.</p>

<p>Please talk about a DSL builder tool you may have used or heard about and your impressions on how it helps and what its downsides are.</p>

You should really check out
Ragel
. It's a framework to embed state machines in your regular source code. Ragel supports C, C++, Objective-C, D, Java and Ruby.
Ragel's great for writing file and protocol parsers as well as stepping through external DSL stuff. Chiefly because it allows you to execute any kind of code on state transitions and such.
A couple of notable projects that use Ragel are,
Mongrel
, a great ruby web server. And
Hpricot
, a ruby based html-parser, sort of inspired by jQuery.
Another great feature of Ragel is how it can generate
graphviz
-based charts that visualize your state machines. Below is an example taken from
Zed Shaw's
article on ragel state charts
.