p9 - transformaciones de modelo a texto con xtend...generador de código 12/12/13 pl2 -...

17
Iván Ruiz Rube Departamento de Ingeniería Informática Escuela Superior de Ingeniería Universidad de Cádiz 12/12/13 1 Transformaciones de modelo a texto con Xtend Procesadores de Lenguajes 2 PL2 - Transformaciones de modelo a texto con Xtend Curso 2013-2014

Upload: others

Post on 07-Oct-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario

Iván Ruiz Rube Departamento de Ingeniería Informática Escuela Superior de Ingeniería Universidad de Cádiz

12/12/13 1

Transformaciones de modelo a texto con Xtend

Procesadores de Lenguajes 2

PL2 - Transformaciones de modelo a texto con Xtend

Curso 2013-2014

Page 2: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario

Contenidos

�  Instalación �  Introducción � Desarrollo de una transformación

12/12/13 2 PL2 - Transformaciones de modelo a texto con Xtend

Page 3: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario

INSTALACIÓN

TRANSFORMACIONES DE MODELO A TEXTO CON XTEND

12/12/13 3 PL2 - Transformaciones de modelo a texto con Xtend

Page 4: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario

Instalación Xtend

12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 4

Help → Install New Software

Incluido en la distribución de Xtext. En otro caso, instalar por el procedimiento general

Page 5: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario

INTRODUCCIÓN

TRANSFORMACIONES DE MODELO A TEXTO CON XTEND

12/12/13 5 PL2 - Transformaciones de modelo a texto con Xtend

Page 6: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario

Xtend � Xtend es un pequeño lenguaje que

permite simplificar la programación en Java

� Construido sobre la base de Xtext � Este lenguaje “compila” a un código Java

legible y bien formado � El código generado es más eficiente que

el desarrollado manualmente � Diseñado para trabajar con APIs ya

existentes 12/12/13

PL2 - Transformaciones de modelo a texto con Xtend 6

Page 7: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario

Características

� 100% compatible Java � Eliminación de ruido sintáctico: visibilidad

por defecto, paréntesis vacíos, etc. � Expresiones lambda, para evitar clases

anónimas �  Inferencia automática de tipos �  Instrucciones switch más potentes � Expresiones para plantillas

12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 7

Page 8: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario

Ejemplo: Movies.xtend

12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 8

@Data class Movie { String title int year double rating long numberOfVotes Set<String> categories

}  

Page 9: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario

Ejemplo (gen): Movie.java (I)

12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 9

import java.util.Set; import org.eclipse.xtend.lib.Data; import org.eclipse.xtext.xbase.lib.util.ToStringHelper; @Data @SuppressWarnings("all") public class Movie { private final String _title; public String getTitle() { return this._title; } ...  

Page 10: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario

Ejemplo (gen): Movie.java (II)

12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 10

public Movie(final String title, final int year, final double rating, final long numberOfVotes, final Set<String> categories) { super(); this._title = title; .. } @Override public int hashCode() { … } @Override public boolean equals(final Object obj) { … }  

Page 11: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario

Generador de código

12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11

�  El paquete generator incluye todo lo necesario para la transformación M2T.

�  En el fichero .xtend tendremos que codificar las reglas de transformación

�  La carpeta xtend-gen contendrá el código Java resultante

Page 12: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario

Desarrollo de la transformación

�  Función principal que genera un nuevo archivo HTML.

12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 12

class SurveysDSLGenerator implements IGenerator { override void doGenerate(Resource resource, IFileSystemAccess fsa) { for (myEncuesta : resource.allContents.toIterable.filter(typeof(Encuesta))) {

fsa.generateFile(myEncuesta.nombre + ".html", myEncuesta.toHTML) }

}  

Page 13: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario

Desarrollo de la transformación (II)

�  Función auxiliar que genera el contenido

12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 13

def toHTML(Encuesta myQuiz) ''’ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es”> <head><title>Mis Encuenstas</title></head> <body> <table border="1"> <tr> <td><b>Pregunta</b></td> <td><b>Descripcion</b></td> <td><b>Valoracion</b></td> </tr> «FOR myQuestion : myQuiz.preguntas» «myQuestion.toHTML» «ENDFOR» </table> </body> </html>

'''

Page 14: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario

Desarrollo de la transformación (III)

� Otra función auxiliar…

12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 14

def toHTML(Pregunta myQuestion) ''' <tr> <td> «myQuestion.titulo» </td> <td> «myQuestion.descripcion» </td> <td> «myQuestion.puntuacion» </td> </tr>

''' }

Page 15: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario

Código Java generado por Xtend

12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 15

Page 16: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario

Test del DSL con generación de código

12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 16

[Project UI] Run as → Eclipse Application

Page 17: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario

12/12/13 17 PL2 - Transformaciones de modelo a texto con Xtend

Transformaciones de modelo a texto con Xtend

Procesadores de Lenguajes 2

Iván Ruiz Rube [email protected]