# Lenguaje específico de dominio

En desarrollo de software e ingeniería de dominio, un lenguaje específico de dominio, o "lenguaje específico del dominio", (en inglés domain-specific language, DSL) es un lenguaje de programación o especificación dedicado a resolver un problema en particular, representar un problema específico y proveer una técnica para solucionar una situación particular. El concepto no es nuevo pero se ha vuelto más popular debido al aumento del uso de modelos específicos del dominio.
Ejemplos de lenguajes específicos del dominio incluyen, Logo para niños, Verilog y VHSIC, R y S para estadísticas, Mata para programación matricial, Mathematica y Maxima para matemáticas, fórmulas de hojas de cálculo y macros, SQL para consultas a bases de datos relacionales, Yacc para crear parseadores, expresiones regulares para crear análisis léxico, Generic Eclipse Modeling System para crear lenguajes con el objetivo de diagramar, Csound un lenguaje para síntesis digital, y los lenguajes de entrada de GraphViz y GrGen, paquetes de software usados para graficar y reescribir gráficas.
Lo opuesto es:
* un lenguaje de programación de propósito general, como por ejemplo C o Java.
* o un lenguaje de modelaje de propósito general como UML.
Crear un lenguaje específico del dominio (con software que lo soporte) vale la pena cuando permite que un tipo particular de problemas o soluciones puedan ser expresadas más claramente que con otros lenguajes existentes, y el tipo de problema en cuestión reaparece lo suficiente. La programación orientada a lenguajes considera la creación de lenguajes específicos para expresar problemas una parte estándar para el proceso de solucionar el problema.
Los lenguajes específicos de dominio se componen generalmente de una sintaxis abstracta y de una sintaxis concreta. La sintaxis abstracta se define por medio de un metamodelo que especifica las reglas del lenguaje, los elementos que lo componen, y las relaciones que existen entre ellos. Por su parte, la sintaxis concreta asocia a cada elemento del metamodelo una representación, ya sea textual o gráfica.
En los DSL, la semántica del lenguaje está muy cercana al dominio del problema para el cual se diseña. Tienen un alto nivel de abstracción al usuario, por tanto, están dirigidos a expertos en el dominio.

## Diseño del metamodelo

Metamodelado es el análisis, diseño y construcción de los metamodelos necesarios para cubrir un determinado tipo de problemas, así como las reglas y restricciones aplicables.
Metamodelo: conjunto de conceptos del dominio a modelar (metaclases) y las relaciones entre ellos (metasociaciones).

## Desarrollo del modelo de presentación

Tendremos que elegir, según el problema a resolver, cuál es el formato de representación más adecuado para nuestro DSL. ¿Cuál es el tipo de problema que queremos modelar? ¿Quiénes serán los usuarios del lenguaje?
Dos tipos de DSL:
* Textuales: más expresivos, están basados en una gramática.
* Visuales: más fáciles de interpretar, está basado en el mapping entre elementos gráficos y elementos de nuestro metamodelo.

## Generación de transformaciones

Existen varios tipos de transformaciones:
* Modelo a modelo (M2M).
* Modelo a texto (M2T).

## Entorno tecnológico

El Eclipse Modeling Project centra la evolución y promoción del desarrollo de tecnologías basadas en modelos dentro de la comunidad Eclipse, proveyendo un conjunto unificado de frameworks para el modelaje, herramientas e implementación de estándares.