En su libro "Idiomas específicos del dominio", Martin Folwer describe DSL internos y externos .
Internal DSL
= es un subconjunto del lenguaje de programación existente, por ejemplo, Ruby / Java, etc.
External DSL
= define una sintaxis y un vocabulario.
Un DSL externo puede ser mucho más expresivo, pero puede requerir un análisis externo y generación de código.
Si bien un DSL interno no requiere un procesamiento adicional, a veces es difícil de entender para los expertos en dominios que no son de programación (por ejemplo, analistas de negocios, probadores).
Al elegir su tipo de DSL, es importante analizar quiénes son sus usuarios. Si en su mayoría son personas no técnicas, un DSL externo puede ser una mejor opción. Para un pequeño equipo de programadores experimentados, se puede elegir un DSL interno, si el lenguaje de programación que usan es lo suficientemente expresivo.