Xtext (Lenguajes de dominio específico textuales)
-
Upload
vicente-garcia-diaz -
Category
Documents
-
view
1.183 -
download
0
description
Transcript of Xtext (Lenguajes de dominio específico textuales)
![Page 1: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/1.jpg)
Xtext 1.0Creación de lenguajes textuales de dominio específico
Vicente García Díaz ([email protected])
Juan Manuel Cueva LovelleMDE-OOTLAB Research GroupNoviembre de 2010
![Page 2: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/2.jpg)
Lenguajes textuales de dominio específicoUna breve introducción
![Page 3: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/3.jpg)
¿Cómo se crea habitualmente un DSL textual?
Generalmente se crean utilizando generadores de parsers De una gramática obtienen un parser ANTLR, JavaCC, Lexx/yacc, …
El parser valida el texto y crea un árbol Generalmente un Abstract
Syntax Tree (AST)
5*6 + 25
5
Suma
Multiplicación
LiteralLiteral
6 25
Literal
![Page 4: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/4.jpg)
Herramientas más sofisticadas
Escribir un parser es una tarea difícil Incluso utilizando una herramienta como
ANTLR …y aún faltaría
Crear un entorno de desarrollo para el lenguaje
Transformar el AST en “algo” a partir de lo cual generar código fácilmente
Es mejor no hacerlo “a mano” Xtext Oslo (lenguaje M)
![Page 5: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/5.jpg)
XtextFramework para desarrollar lenguajes textuales
![Page 6: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/6.jpg)
Xtext
Herramienta para construir DSLs o GPLs Genera varios artefactos
automáticamente a partir de una gramática EBNF Un parser Un metamodelo Ecore Un IDE para Eclipse
▪ Resalte de sintaxis▪ Ayuda para completar sentencias▪ Ventana de Resumen▪ Chequeo de restricciones en tiempo real
Generador Xtext
Metamodelo Ecore
Gramática Xtext(Petri.xtext)
Parser ANTLR
Editor Plug-in
Proyecto del DSL “Petri”
Proyecto UI
![Page 7: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/7.jpg)
¿Dónde se ubica Xtext?
Herramienta UML
Instanceof
Ecore
Metamodelo I
Metamodelo II
Modelo I Modelo II
Instanceof
Especific. De un editor
GMF
Editor personalizado
XMI
Especific. De la
sintáxis textual
Xtext
Editor personalizado
Builds
Builds
Check
Xtend
Xpand
Artefactos generados
Recipe (FW)
Código manual
EMF
![Page 8: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/8.jpg)
Instalación
Lo más fácil es descargar un Eclipse con todo
http://xtext.itemis.com/xtext/language=en/23947/downloads
![Page 9: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/9.jpg)
Wizard para crear un nuevo lenguaje Project name: Es el nombre del proyecto Eclipse en el que se definirá el
lenguaje Language name: Es el nombre del lenguaje Language extension: La extensión de los archivos que trabajan con el
lenguaje en el editor Create a generator project: Si se selecciona, entonces se creará otro
proyecto únicamente a modo de ejemplo para permitir generar artefactos a partir de “programas” realizados con el lenguaje
![Page 10: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/10.jpg)
Proyectos generados por el Wizard
Proyecto del lenguaje Gramática del lenguaje Domainmodel Workflow que ejecuta el generador Xtext
Proyecto “ejemplo” para generar artefactos a partir del lenguaje Ejemplo de modelo Ejemplo de plantilla Ejemplo de workflow
Proyecto de la interfaz de usuario Código del IDE para trabajar con el
lenguaje
![Page 11: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/11.jpg)
Gramática del lenguaje (1/6)
Dos propósitos principales Describir la sintaxis concreta Describir el metamodelo (estructura del
AST) Domainmodel.xtext
Nombre de la gramática
Especifica una gramática que se puede utilizar dentro de la gramática
DomainModel
Nombre y URI del EPackage Ecore
![Page 12: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/12.jpg)
Gramática del lenguaje (2/6)
![Page 13: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/13.jpg)
Gramática del lenguaje (3/6)Reglas terminales
Son símbolos atómicos de las gramáticas Crean tokens terminales en el AST En org.eclipse.xtext.common se encuentran las reglas terminales que Xtext
ofrece por defecto Por convenio, se nombran en mayúsculas
No las procesa el
parser
Importa el EPackage, con sus tipos de datos, del
metamodelo Ecore
Cardinalidad 0..1
Cardinalidad 0..n
Cardinalidad 1..n
Rango de valores
Alternativa
Token “until”Token
“negated”
Comodín
![Page 14: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/14.jpg)
Gramática del lenguaje (4/6)Reglas parser (1/2)
No son símbolos atómicos de las gramáticas Crean un subárbol en el AST Expresiones no compatibles: rangos, comodines, token “until”
y “negated” Expresiones específicas
Asignaciones▪ Asignación “=“. El elemento de la derecha se le asigna al de la izquierda▪ Asignación “+=“. Una lista de elementos de la derecha son asignados al
elemento de la izquierda▪ Asignación “?=”. Asigna un EBoolean al elemento de la izquierda. Es
“true” si el elemento de la derecha es consumido. De otra forma es “false”.
![Page 15: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/15.jpg)
Gramática del lenguaje (4/6)Reglas parser (2/2)
Referencias cruzadas▪ Una tipo de datos que referencia a otro
a través de su ID (por defecto)
Llamadas a reglas sin asignación
Grupos desordenados
Reglas ocultas▪ Son reglas que no se procesarán por el parser porque no tienen valor
semántico▪ Para utilizarlas se utiliza el sentencia hidden a nivel de gramática o a
nivel de regla
![Page 16: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/16.jpg)
Gramática del lenguaje (5/6)Reglas tipo de datos
Son muy similares a las reglas terminales Son símbolos atómicos de las gramáticas
No contienen ni llamadas a reglas parser ni asignaciones
A diferencia de las reglas terminales: Se recomiendan para combinar reglas terminales
▪ Se evita ocultación de reglas y conflictos en el parser
Permiten utilizar tokens ocultos▪ Por ejemplo se podrían introducir comentarios entre dos Ids
▪ espacionombres./*comentario entre IDs*/.clase
![Page 17: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/17.jpg)
Gramática del lenguaje (6/6)Reglas enumeración
Sirven para crear enumerados en una gramática
Es posible definir literales alternativos HOME = “home” | WORK = “work” | CLASS = “class” | CLASS = “classes”
Ecore no permite enumerados sin asignación (cuando se utiliza “?”)
Gramática del lenguaje
Editor del lenguaje
![Page 18: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/18.jpg)
Generación del código del DSL
Se lanza el archivo Modeling Workflow Engine (MWE) predefinido con el proyecto (GenerateDomainmodel.mwe)
Utilizando MWE se ejecuta el generador Xtext
Se genera de ese modo: El metamodelo Ecore del DSL El editor del DSL El parser para procesar el DSL
![Page 19: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/19.jpg)
Metamodelo Ecore (1/2)
Con el meta-metamodelo Ecore se definen los metamodelos de los DSLs
EPackage Siempre que se utiliza el directiva generate, que engloba a todo el
metamodelo, se crea EClass
Cada regla parser se corresponde con un tipo de datos EClass EEnum
Cada regla enumeración se corresponde con un tipo de datos EEnum EDataType
Cada regla terminal o regla tipo de datos se corresponde con un tipo de datos EDataType, siendo por defecto EString
Hay que tener en cuenta que: Los tipos de datos tienen el mismo nombre que las reglas …a no ser que explícitamente se le indique otro Además, dos o más reglas pueden hacerse corresponder con un mismo tipo
de datos
![Page 20: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/20.jpg)
Metamodelo Ecore (2/2)
![Page 21: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/21.jpg)
Entorno de desarrollo (1/2)
![Page 22: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/22.jpg)
Entorno de desarrollo (2/2)
Creando un proyecto en blanco se puede añadir un archivo con la extensión .dmodel Ayuda al escribir código Resalte de sintaxis Validación sintáctica Vista resumen de código Referencias entre elementos
![Page 23: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/23.jpg)
Refinar la gramática (1/2)
![Page 24: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/24.jpg)
Refinar la gramática (2/2)
![Page 25: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/25.jpg)
Procesamiento dinámico del lenguaje
![Page 26: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/26.jpg)
Modelos en el contexto Xtext
Modelo semántico
Modelo de nodos
Modelo
Modelo de la gramática
Metamodelo Parser
![Page 27: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/27.jpg)
Modelo semántico (1/3)
EClass en el metamodelo
Elemento del modelo
(instancia del Eclass)
![Page 28: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/28.jpg)
Modelo semántico (2/3)
Para cargar un modelo realizado con nuestro DSL
Los metamodelos creados con Xtext tienen
▪ EClasses (DomainModel, Type, Entity, …) EAtributes (name, multi, …) EReferences (elements, features, …)
▪ EDataTypes EEnums
![Page 29: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/29.jpg)
Modelo semántico (3/3)
![Page 30: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/30.jpg)
Modelo de nodos (1/3)
Tiene dos tipos de nodos principales
Métodos interesantes de org.eclipse.xtext.parsetree▪ CompositeNode NodeUtil.getNode(EObject obj)▪ Iterable<AbstractNode> NodeUtil.getAllContents(CompositeNode
rootNode)
+getElement() : EObject
-line : int-length : int
AbstractNode
CompositeNode
-text : string
LeafNode1
*
![Page 31: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/31.jpg)
Modelo de nodos (2/3)
![Page 32: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/32.jpg)
Modelo de nodos (3/3)
![Page 33: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/33.jpg)
Generación de artefactos a partir del lenguaje
![Page 34: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/34.jpg)
Proyecto de ejemplo
Ejemplo de modelo
Ejemplo de transformación
Ejemplo de plantilla
Ejemplo de flujo de trabajo
![Page 35: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/35.jpg)
Modeling Workflow Engine
![Page 36: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/36.jpg)
Xpand (1/3)
Es una herramienta utilizada para realizar transformaciones M2T Permite generar artefactos textuales a partir de un modelo
Se integra perfectamente con Xtext y con MWE
![Page 37: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/37.jpg)
Xpand (2/3)
![Page 38: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/38.jpg)
Xpand (3/3)Xtend
Template.xpt
Extensions.ext
JavaExtensions.javaEs válido features y
this.features
![Page 39: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/39.jpg)
Check (1/2)
Lenguaje muy similar a OCL GenerateDomainmodel.mwe2
DomainmodelChecks.chk DomainmodelFastChecks.chk DomainmodelExpensiveChecks.chk
![Page 40: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/40.jpg)
Check (2/2)
Se quiere mostrar un mensaje de ERROR con el formato “Se ha importado un paquete con el mismo nombre que NOMBRE_PAQUETE” Sin necesidad de solicitarlo, es decir, según se está programando
![Page 41: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/41.jpg)
Modeling Workflow Engine 2Ejecución de flujos de trabajo de forma declarativa
![Page 42: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/42.jpg)
¿Cómo funciona MWE2?
MWE
![Page 43: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/43.jpg)
Extendiendo MWE2Ejemplo 1. Hola mundo
¿Qué queremos?
¿Cómo?
![Page 44: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/44.jpg)
Extendiendo MWE2Ejemplo 2. Manipular modelos (1/4)
¿Qué queremos?
![Page 45: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/45.jpg)
Extendiendo MWE2Ejemplo 2. Manipular modelos (2/4)
¿Cómo? ResourceReader
En lugar de implementar la interfaz IWorkflowComponent, extendemos una
clase que ya la implemente y que además ya tiene un setter y un getter
para ModelSlot
![Page 46: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/46.jpg)
Extendiendo MWE2Ejemplo 2. Manipular modelos (3/4)
¿Cómo? ResourceWriter
![Page 47: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/47.jpg)
Extendiendo MWE2Ejemplo 2. Manipular modelos (4/4)
¿Cómo? RenamingTransformer
![Page 48: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/48.jpg)
PrácticoEjercicios
![Page 49: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/49.jpg)
Ejercicio 1. Creación de una gramática
Este ejercicio consiste en crear una gramática que permita definir Redes de Petri de la forma más precisa posible.
P1
P2
P1P3 P5
T1
T2
15
4
17
3 4 6
![Page 50: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/50.jpg)
Ejercicio 2. Creación de una gramática
Este ejercicio consiste en crear una gramática que permita describir máquinas de estados utilizadas para bloquear / desbloquear “compartimentos secretos”
Permitirá:•Definir una serie de posibles eventos (cada uno asociado con un código)•Especificar qué eventos reiniciarán al sistema•Definir una serie de posibles órdenes o comandos (cada uno asociado con un código)•Definir los posibles estados
•Cada estado puede opcionalmente tener una serie de acciones asociadas•Cada evento producido en un estado conducirá al sistema a otro estado
Ejemplo de Martin Fowler
![Page 51: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/51.jpg)
Ejercicio 3. Generador de código
Este ejercicio consiste en crear, mediante la previa creación de una gramática, un generador de código
Permitirá:•Definir las entidades de una aplicación y sus relaciones•Para cada entidad se generará una clase Java•También se generará un script SQL que permita crear una estructura de datos para almacenar la información de las entidades
Code
![Page 52: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/52.jpg)
Ejercicio 4. Agenda de contactos
Este ejercicio consiste en crear un DSL textual para especificar la agenda de contactos (teléfono, mail, dirección, etc.)
Debería:•Utilizarse Eclipse como Rich Client Platform para crear una aplicación completa utilizando Eclipse como base
Permitirá:•Crear, eliminar y modificar listas de contactos•Exportar las listas de contactos a diferentes formatos (CSV, vCard, etc.)
![Page 53: Xtext (Lenguajes de dominio específico textuales)](https://reader034.fdocuments.es/reader034/viewer/2022042614/5571f9d149795991699081f2/html5/thumbnails/53.jpg)
Recursos
Eclipse Project http://www.eclipse.org/
Xtext Project http://www.eclipse.org/Xtext/
Eclipse Modeling Project: A Domain-Specific Language (DSL) Toolkit Richard C. Gronback Addison-Wesley. The Eclipse Series - 2009 http://www.eclipse.org/resources/resource.php?id=493