1 / 37

Tema 3. Creación de DSL

Departamento de Informática y Sistemas. Tema 3. Creación de DSL. Postgrado Informática y Matemáticas Aplicadas a la Ciencia e Ingeniería . Jesús García Molina Departamento de Informática y Sistemas Universidad de Murcia http://dis.um.es/~jmolina. Contenidos. Introducción

enya
Download Presentation

Tema 3. Creación de DSL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Departamento de Informática y Sistemas Tema 3. Creación de DSL Postgrado Informática y Matemáticas Aplicadas a la Ciencia e Ingeniería Jesús García Molina Departamento de Informática y Sistemas Universidad de Murcia http://dis.um.es/~jmolina

  2. Contenidos • Introducción • Metamodelado • Elementos de un DSL • Sintaxis abstracta • Sintaxis concreta • Semántica • Etapas en la creación de un DSL • Familias de Lenguajes • Reutilización • Lenguajes para sintaxis concreta DSDM

  3. Introducción • DSDM requiere lenguajes apropiados para describir todos los aspectos de los sistemas y a diferentes niveles de abstracción. • Lenguajes de modelado son lenguajes específicos del dominio (DSL). • DSL son un elemento clave en las factorías de software (líneas de producto). • Programación orientada a los lenguajes, Ingeniería del software de lenguajes, Desarrollo Específico del dominio.

  4. Introducción • Lenguajes son una parte importante de desarrollo: • Nivel apropiado de abstracción a través de múltiples lenguajes. • Necesidad de: • Transformaciones • Composición • Evolución • Extensibilidad • Sincronización • Frameworks para la creación de DSL que permiten además adaptarlos o extenderlos para crear nuevos DSL.

  5. Sintaxis concreta Sintaxis abstracta Semántica Sintaxis de serialización Introducción “Metamodelado es un marco teórico para crear DSL”

  6. Elementos de un lenguaje • Sintaxis abstracta • Define los diferentes elementos del lenguaje y las reglas que establecen cómo pueden ser combinados • Sintaxis concreta • Define cómo los elementos del lenguaje aparece en una notación visual o textual utilizable por las personas • Sintaxis de serialización • Es una sintaxis concreta pero no destinada a su uso por las personas sino a la persistencia e intercambio de las especificaciones expresadas con el lenguaje. • Semántica • Define el significado del lenguaje

  7. Metamodelado • Transformaciones • Los lenguajes están relacionados • Extensibilidad • Los lenguajes pueden cambiar a lo largo del tiempo • ¿Qué abarca un metamodelo? • Sintaxis abstracta, sintaxis concreta y semántica • Normalmente sintaxis abstracta (y restricciones estáticas) • Herramientas de metamodelado • Editor de sintaxis abstracta • Editor de sintaxis concreta (mapping con sintaxis abstracta) • Crear editores para los lenguajes creados • Almacenar modelos de los lenguajes creados • Ejecución, análisis y testing

  8. Arquitectura de cuatro capas

  9. Creación de un DSL • Cinco etapas: • Sintaxis abstracta • Reglas de semántica estática • Sintaxis concreta • Semántica • Transformaciones • Varios grados de formalidad. • Elegir una arquitectura de metamodelado con un lenguaje de metamodelado: • Clases, Paquetes, Atributos, Operaciones, OCL

  10. Ejemplo: DSL “Simple” AlquilerCoche desasignar AlquilerCoche cocheAsignado : Coche especifReserva : EspecifCoche Asignado No asignado setEspecif (espec: EspecifCoche) asignar (c:Coche) desasignar() recoger() devolver() recoger asignar setEspec Coche Devuelto Fuera especificacion : EspecifCoche setEspecif (espec: EspecifCoche) devolver EspecifCoche class AlquilerCoche { setEspecif(spec) {especifReserva = spec} asignar(c) {cocheAsignado = c} desasignar() {cocheAsignado = null} } class Car { setEspecif(spec) { especificacion = spec} }

  11. Descripción DSL “Simple” • Un modelo está formado por una o más clases. • Una clase tiene cero o más atributos y cero o más métodos • En el cuerpo de un método se puede asignar valores a atributos • Una clase puede ser asociada a una máquina de estados que establece restricciones sobre el orden en el que pueden invocarse los métodos. • Un estado puede tener estados anidados • Existe un estado raíz que se llama igual que la clase asociada. • Cada transición tiene un estado origen y otro destino y debe ser etiquetada por un método de la clase. • Existe un estado inicial que se liga a uno de los estados • No hay asociaciones entre clases • Se usa notación UML para la sintaxis concreta gráfica y también texto para representar las clases y sus métodos.

  12. Creación de la sintaxis abstracta • Identificación de conceptos • A partir de una lista de conceptos candidatos • Que tengan un nombre • Que contengan otros conceptos • Que registren información sobre relaciones entre dos conceptos. • Que muestren una relación tipo/instancia • Que se puedan componer recursivamente • Que son parte (o están asociados a) de una expresión • Construir modelos ejemplo • Identificar casos de uso del lenguaje • No se deben considerar conceptos ligados a la notación. • Crear un modelo conceptual • Posibilidad de reutilizar uno existente • Escribir las reglas de semántica estática • Validar y chequear el metamodelo.

  13. Sintaxis abstracta • Elementos atómicos y compuestos • Las reglas o relaciones establecen como se forman los elementos compuestos a partir de otros elementos • Dos técnicas: • Metamodelado • Gramáticas libres de contexto • Normalmente DSL gráficos con metamodelos y DSL textuales con gramáticas • Grammarware vs. Modelware • En el caso de usar gramáticas se usan extensiones de BNF.

  14. BNF para DSL “Simple” Model ::= (ModelElement)* ModelElement ::= Class Class ::= ClassName (Features)* (StateMachine)? ClassName ::= Identifier Feature ::= Attribute| Method Attribute ::= AttributeName TypeRef AttributeName ::= Identifier TypeRef ::= Identifier Method ::= MethodName (Argument)* Statement Argument ::= ArgumentName TypeRef ArgumentName ::= Identifier Statement ::= (Statement)* | AssignmentStatement AssignmentStatement ::= LHS RHS LHS ::= AttributeRef AttributeRef ::= Identifier RHS ::= AttributeRef | ArgumentRef ArgumentRef ::= Identifier

  15. BNF para DSL “Simple” StateMachine ::= Root Root := State State ::= StateName (StartState)? (State)* (Transition)* StateName ::= Identifier StartState ::= StateRef Transition ::= MethodRef StateRef MethodRef ::= Identifier StateRef ::= Identifier

  16. AST :Model :Class … :Class :ClassName :Feature … :StateMachine :Attribute :Root AlquilerCoche : Identifier :State :AttributeName :TypeRef coche : Identifier cocheAsignado : Identifier :StateName :State :StartState … AlquilerCoche : Identifier :StateName :Transition :StateRef :MethodRef :StateRef NoAsignado : Identifier NoAsignado : Identifier SetEspecif : Identifier NoAsignado : Identifier

  17. Limitaciones Gramáticas • No es posible compartir nodos entre diferentes padres. • AST (Abstract Syntax Tree) es un árbol no es un grafo • Necesidad de referencias • En el caso anterior referencias a estados, atributos y argumentos que son identificadores de texto. • Se podría definir la sintaxis concreta al tiempo que la sintaxis concreta • Xtext y TCS son lenguajes para definir sintaxis concretas que también expresan la sintaxis abstracta.

  18. Metamodelo (I) <<datatype>> Identifier

  19. Metamodelo (II)

  20. BNF a metamodelos • No terminales representados como clases • Reglas de producción corresponden a relaciones de composición. • Una regla con varias alternativas en la parte izquierda se representa mediante herencia. • No terminales que corresponden a un elemento primitivo pueden ser representados como atributos • Por ejemplo, nombre de la clase • Elementos de repetición se representan con multiplicidades. • Referencias son representadas con asociaciones con navegabilidad • Todas las composiciones son bidireccionales

  21. AST-Instancia de un metamodelo :Model element element element :Class name = AlquilerCoche :Class name = Coche …. …. feature feature :Method name = Coche :Attribute name = CocheAsignado :State name = AlquilerCoches invoked root machine :StateMachine child sourceOf :State name = NoAsignado :Transition target

  22. Restricciones OCL context Transition inv sameMachine: target.root().machine = source.root().machine context State::body() body: if parent = null then self else parent.root() context AssigmentStatement inv: lhs.type = rhs.type

  23. Metamodelos y Gramáticas • Un metamodelo tiene más potencia expresiva que un CFG • Generación de AST a partir de una especificación textual conforme a una gramática puede ser automatizada. Construcción de un AST es un paso previo a construir un ASG. • Lenguajes gráficos tienen una estructura de grafo en vez de árbol, más apropiado usar metamodelos.

  24. Sintaxis concreta • Puede ser textual o gráfica. • Notación textual • Tema bastante conocido : GrammarWare • Herramientas muy extendidas: ANTLR, SableCC,.. • Conexión de grammarware con modelware. • TCS y Xtext son lenguajes para definir la sintaxis concreta de un metamodelo. • Notación gráfica • Se deben crear herramientas que pemitan asociar una notación al metamodelo y crear editores • GMF para metamodelos Ecore • Herramientas propietarias: DSL Tools, Metaedit, GME

  25. Sintaxis concreta gráfica • En nuestro ejemplo de metamodelo: • Un estado se dibuja como un rectángulo con esquinas redondeadas. • El nombre de un estado sin hijos aparece en el centro del rectángulo que lo representa. • El nombre de un estado con hijos aparece en la parte superior del rectángulo separado por una línea recta. • Una máquina de estado no tiene notación propia se representa por el símbolo de su estado raíz. • Estados hijos son topológicamente anidados, se colocan dentro de su estado padre, en el compartimiento debajo de la línea recta bajo el nombre. • Transiciones son representadas pro flechas dirigidas del estado fuente al destino. • Los nombres de los métodos se colocan sobre la flecha de la transición. • El estado inicial se designa asociándole un pequeño círculo negro conectado por una flecha.

  26. Sintaxis Concreta Gráfica AlquilerCoches asignar Asignado No asignado desasignar setEspecif Devuelto Retirado devolver

  27. Sintaxis Concreta Gráfica AlquilerCoche cocheAsignado : Coche especifReserva : EspecifCoche setEspecif (espec: EspecifCoche) asignar (c:Coche) desasignar() recoger() devolver() “ name ‘( ‘argument.name ‘:’ argument.type.name ‘)’ “

  28. Otras cuestiones • Servicios de edición: seleccionar, cortar, pegar, mover símbolos. • ¿Pueden cruzarse las transiciones? • ¿Cómo se calcula el tamaño de los símbolos? • ¿Formato de texto embebido en un diagrama? • ¿Cómo se posiciona el nombre de los métodos sobre las transiciones? • Asignación de colores a las figuras

  29. Intercambio de modelos gráficos • Especificación Interchange Diagram de OMG. • Extensión del metamodelo de UML y XMI (XMI[UML+DI]) • Posibilidad de incluir información gráfica de un modelo en un fichero XMI que serializa al modelo. • Una opción es crear una representación en SVG

  30. LeafElement Metamodelo DI

  31. Metamodelo DI

  32. Herramientas • Sintaxis Textual • Xtext en OpenArchitectureWare • TCS para AMMA • Sintaxis gráfica • GMF para EMF/Eclipse • Metaedit • GME

  33. Semántica de traducción • Un lenguaje de modelado o DSL se traduce a otro lenguaje que ya tiene una semántica bien definida y que posiblemente es ejecutable, por ejemplo el conjunto de instrucciones de un procesador. • Transformaciones modelo a modelo o modelo a código.

  34. Semántica basada en la traza • Uso de un depurador • Se ejecuta la especificación y se interpreta la traza. • Se define un lenguaje de traza de la ejecución gráfico o textual. • Se establece una correspondencia entre las expresiones del DSL y las trazas. • De forma constructiva o declarativa

  35. Sintaxis abstracta de un lenguaje de trazas StateMachine Trace Object Trace Model Trace machineTrace objectTrace 1 ObjectTrace guid : Guid guid : Guid guid : Guid 0..1 0..1 modelTrace 1 1 1 * lifeline 0..1 lifeline 1 value value * * machineValue post StateMachine Value Method ObjectValue 1 0..1 1 1 invocation pre invocation 1 1 1 stateValue target * Attribute Value argValue * Transition Ocurrence StateValue Argument Value 1 attributeValue 1 0..1 sourceOf source

  36. Sintaxis concreta de un lenguaje de trazas 03:AlquilerCoches cocheAsignado = null especifReserva = null No asignado setEspecif (01) cocheAsignado = null especifReserva = 01 No asignado asignar (02) cocheAsignado = 02 especifReserva = 01 Asignado

  37. Mapping DSL- Lenguaje de trazas traceFor ModelTrace Model 1 1 valueFor ModelValue Reglas OCL traceFor ObjectTrace Class 1 1 valueFor ObjectValue traceFor MethodInvocation Method 1

More Related