Post on 30-Jun-2015
description
Creación de lenguajes textuales de dominio específico
Vicente García Díaz (garciaviente@uniovi.es)
Juan Manuel Cueva LovelleMDE-OOTLAB Research GroupNoviembre de 2010
Lo más fácil es descargar un Eclipse con todo http://xtext.itemis.com/xtext/language=en/23
947/downloads http://download.itemis.com/distros/eclipse-SDK-
3.6-xtext-1.0.1-win32.zip
A. Crear un lenguaje E.g., diseñar un DSL para realizar videojuegos
B. Realizar programas (modelos) con el lenguaje E.g., un programa (modelo) para especificar cómo va a ser
un videojuego de avionesC. Generar artefactos con los programas
realizados con el lenguaje E.g., a partir del programa (modelo) le pasamos una o
varias plantillas para generar automáticamente código C# con el videojuego
Ejemplo 1
facilitará la generación de artefactos
*todos los archivos están en la carpeta ejemplo 1
1- Definir la gramática
este lenguaje nos va a permitir definir procesos con algunos de los elementos de jPDL
2- Generar el lenguaje Botón derecho en GenerateProcess.mwe2 Run
As MWE2 Worflow
3- Crear restricciones (OPCIONAL) 3.1- En GenerateProcess.mwe2 hay que añadir esta
línea: 3.2- Hay que volver a generar el lenguaje*** (paso A2)
..y así quedaría la carpeta del proyecto
los mejores ficheros para poner las restricciones***siempre que se cambie
algo del lenguaje, hay que volver a regenerarlo (paso A2)
3- Crear restricciones (OPCIONAL) 3.3- Especificar las restricciones
▪ Cuando Eclipse nos pregunté Do you Want to add the Xtextnature to the Project, le decimos que sí para poder trabajar con nuestro lenguaje
3.4- Como se ha hecho un cambio, hay que volver a generar el lenguaje (paso A2)
1- Instalar el plugin con el editor del lenguaje en un entorno Eclipse o ejecutar una segunda instancia de Eclipse (sirve para agilizar la fase de desarrollo) Botón derecho en uno de nuestros proyectos
Run As Eclipse Application
2- Crear un proyecto Java y dentro de la segunda instancia de Eclipse y una carpeta dentro del proyecto para meter los nuevos modelos
carpeta para los modelos, podría tener otro nombre…
3- Crear un fichero para nuestro programa Botón derecho en la carpeta modelsNew Other
File
Cuando Eclipse nos pregunté Do you Want to add the Xtextnature to the Project, le decimos que sí para poder trabajar con nuestro lenguaje
4- Realizar un programa (modelo) – o varios…
idealmente, el lenguaje podría ser tan potente como para reproducir cada uno de los ejemplos que vimos de jBPM
este nombre no está en minúsculas, entonces se muestra un Warning (lo hemos definido en la restricción del paso 3.3)
5- Cerrar la segunda instancia de Eclipse. En este momento ya hemos probado el entorno de desarrollo de nuestro lenguaje. Para probar ya no lo necesitamos más***
*** el programa (modelo) que hemos creado podríamos usarlo para generar artefactos (Java, html, …) en este mismo proyecto (sería lo ideal) porque reaprovecharíamos el entorno de desarrollo.
…pero vamos a reaprovechar el proyecto generatorque nos dan, y así “ahorramos” algún paso
1- Copiar un programa (modelo) enel archivo Example.myprocess
como no estamos trabajando con el plugin, aquí no tenemos resalte de sintaxis…
2- Preparar la plantilla de generaciónLenguaje Xpand
3- Crear extensiones (OPCIONAL)
este es nuevo
en este caso estamos implementando un método Java para timestamp(), método invocado desde Xpand. Se usa porque la sintaxis de Xpand está más orientada a generar artefactos que a realizar procesamiento lógico
Xtend, que inicialmente está pensado para realizar transformaciones entre modelos, aquí puede verse como un puente de unión entre Xpand (la plantilla) y el método Java (Java es más potente que Xtend y además YA lo conocemos)
Lenguaje Xtend
4- Preparar el Workflow para nuestrolenguaje
nos interesa recorrer todo el proceso
slot es una estructura de datos interna, lo podemos llamar como queramos
type es uno de los elementos de nuestro lenguaje, en este caso nos interesa el elemento raíz, Process, pero podría haber sido otro
5- Generar los artefactos finales Botón derecho en ProcessProcess.mwe2 Run As MWE2 Worflow
y finalmente, hemos generado artefactos (para este ejemplo, una clase java que al ejecutarla nos lista todas las actividades y transiciones)
Ejemplo 2*todos los archivos están en la carpeta ejemplo 2
Eclipse Project http://www.eclipse.org/
Eclipse Modeling Project http://www.eclipse.org/modeling/
Xtext Project http://www.eclipse.org/Xtext/