Si usted está buscando en una SL independientes de escritura, entonces usted está buscando en los compiladores de construcción - no hay manera de evitarlo. La construcción del compilador es conocimiento de programación esencial, y realmente no es tan difícil como se pensaba comúnmente. El número Righ Programmer Food de Steve Yegge resume el valor de saber cómo compilar compiladores bastante bien.
Hay muchas maneras de comenzar. Recomiendo ver los 2 artículos mencionados en el artículo: Want to write a compiler? Just read these Two papers. El primero, Let's build a compiler, es muy accesible. Utiliza Turbo Pascal como lenguaje de implementación, pero puede implementarlo fácilmente en cualquier otro idioma; el código fuente es muy claro. Pascal es un lenguaje simple.
Una vez que tenga una buena idea de cómo funcionan las cosas y la terminología involucrada, le recomiendo profundizar en algo como ANTLR. ANTLR tiene un buen IDE, ANTLRWorks, que viene con un intérprete y un depurador. También produce visualizaciones muy buenas de tus gramáticas sobre la marcha. Lo encontré invaluable en el aprendizaje.
ANTLR tiene varios buenos tutoriales, aunque pueden ser un poco abrumadores al principio. This one es bueno, aunque está en contra de ANTLR 2.0, por lo que podría encontrarse con incompatibilidades con una versión más reciente (actualmente la última es 3.1).
Finalmente, existe otro enfoque para las DSL: el enfoque Lisp. Dada la naturaleza sintaxis de Lisp (tu código es básicamente árboles sintácticos abstractos), puedes formar interminables idiomas, siempre que te acostumbres a los paréntesis :).
Si lo hace con ese enfoque, desea utilizar un Lisp incrustable. En Java, tiene Clojure, un dialecto Lisp que interactúa sin problemas con JVM y sus bibliotecas. No lo he usado personalmente, pero se ve bien.Para Scheme, hay GNU Guile, que es licensed under LGPL. Para Common Lisp, hay ECL, también bajo LGPL. Ambos usan una interfaz C para la interoperabilidad, por lo que puedes integrarlos en cualquier otro idioma. ECL es único entre Lisp en que cada función Lisp se implementa como una función C, por lo que puede escribir código Lisp en C si lo desea (por ejemplo, dentro de sus propios métodos de extensiones; puede crear funciones C que operen en objetos Lisp, y luego llamarlos desde Lisp). He estado usando ECL para un proyecto paralelo mío por un tiempo, y me gusta. El mantenedor es bastante activo y receptivo.
NOTA: No necesariamente estoy buscando la completitud de Turing aquí, tampoco. En su mayoría solo la sintaxis de expresión para configurar cosas en mi modelo. – chadmyers