There's a nice post from Steven Kelly which contrasts different ways of interacting with a DSL in a tool.
I say 'interacting with a DSL', to stress the difference between that and working with a static syntax on a piece of paper. Working through a tool provides you with many more options not only in how you view and browse expressions in your language, but how you create and update those expressions.
However, I'd like to pick Steven up on a couple of points:
Saw you DSL demo on channel 9, I know it’s old but very helpful.
I need more resources as I am sure do many others, specifically in code gen, how does that happen, a DSL is useless without it, but there are even today no real examples.