Over the years I have developed a number of domain specific languages, or translator front ends.
My first ever translator was a front end for MS-Basic. I had learned programming initially in Basic, and then Z-80 assembler, finally graduating to Pascal. Then I got my first job, and it was pure Basic, line numbers and all, ouch. So I wrote a front end in Turbo Pascal to simulate as much of Pascal as I could, especially getting rid of line numbers, and introducing includes, and functions/procedures. I did it over a weekend, and showed it to my boss on the following Monday, he was most impressed, and gave me a week to rewrite it in Basic. The subsequent rewrite added more features from Pascal, like multi-line if/endif, and case statements, and was used to write a whole suite of applications.
Then I got my hands on a real language tool “QParser+”, this was on DOS (way back in the 80’s), and I developed a variety of languages for defining menu structures, form layouts, and report layouts for a custom accounting, sales, purchase and stock control application. These languages were resource description languages, and performed a similar function for Pascal, and Basic applications I was working on as a .rc file does for a Windows application.
I also developed a DOS menu front end application using QParser+ and Turbo Pascal. This tool generated a Turbo Pascal program that implemented the defined menu in a standalone .exe file.
I used Lex/Yacc toI develop an IDL for a development framework to implement a dynamically loadable modules system that would work across Linux, Unix, Windows, and the Macintosh.
I have recently developed an IDL (OIL) using ANTLR, and am actively engaged in developing the next generation of it using ANTLR 3. This IDL is used to define RPC calls, and interfaces to Oracle stored procedures. The tool generates a lot of the boringly repetitive Java code, and reduces errors and ensures consistency in the transport layer.
The RPC calls are currently implemented over XML, but the next generation will support configurable transport formats.