Skip to content

DSL – Introducción a Domain Specific Languages

septiembre 10, 2012

… o Lenguajes Específicos de Dominio en español.

Conversando con Jerónimo, un colega de Buenos Aires, que participó también en el ICSOFT, estuvimos compartiendo algunas ideas, donde él me recomendaba meterme en el tema de DSLs como para considerar algo de eso para mi propuesta de tesis (el ya tiene bastante conocimiento sobre el tema). Así que en mis primeras investigaciones, tomo notas por aquí:

Resumen

  1. Generar gramática con Xtext
  2. Escribir el template del código a generar con Xtend
  3. Ejecutar el proyecto en una nueva instancia de Eclipse (pues se genera como un plugin que es capaz de manejar la gramática)
  4. Al crear un nuevo proyecto, crear un archivo con la extensión de la gramática que definimos, se convierte a un proyecto de Xtext
  5. Dentro del proyecto, trabajar en la carpeta “src” con nuestra gramática, y luego al crear el directorio “src-gen” se genera el código según el Xtend definido

Documentación

En el sitio del proyecto en Eclipse hay muy buen material, donde se puede ir avanzando en distintos tutoriales de pocos minutos: http://www.eclipse.org/Xtext/documentation.html

Este es un muy buen tutorial paso a paso, que sigue el ejemplo del libro de Martin Folwer. Este tutorial es útil para los primeros pasos de definir gramática y generador de código a partir de la misma.

Con Xtext se define la gramática del DSL a implementar. Acá hay buena información de cómo definir la gramática.

Para seguir el tutorial hay que instalar Xtext lo cual es muy fácil. Se define la gramática y se ejecuta el generador de artefactos de Xtext. Luego para probar la gramática se ejecuta el proyecto como un nuevo Eclipse, el cual tendrá soporte a esta nueva gramática definida.

Primeros problemas resueltos

Es muy común tener un mensaje de problemas de memoria PermGen. Para resolverlo agregar esta línea a los parámetros de ejecución del proyecto:

-XX:MaxPermSize=256m

Cuando se quiere usar referencias en la gramática, se debe hacer por el atributo “name”, y al referenciar se pone la regla entre corchetes. Por ejemplo:

'fk' name=ID source=[Table] '->' dest=[Table]

Para que eso funcione es necesario que “Table” tenga un atributo “name”, como podría ser:

Table:
 'table' name=ID '{'
 columns+=Column+
 '}'
;

 

Anuncios

From → DSL

Dejar un comentario

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: