Este documento presenta una tesis doctoral sobre un enfoque dirigido por modelos para el desarrollo de herramientas de soporte para lenguajes de programación (grammarware) llamado MetaCET. El objetivo principal es desarrollar una metodología que permita obtener automáticamente diferentes herramientas para un lenguaje mediante la modelización de su sintaxis abstracta y la aplicación de transformaciones. El documento introduce el tema, revisa el estado del arte, y describe la propuesta MetaCET, la cual se basa en modelar la sintaxis abstract
Avances tecnológicos del siglo XXI y ejemplos de estos
Grammarware engineering: un enfoque dirigido por modelos
1. Grammarware Engineering: un
enfoque dirigido por modelos
basado en separación de
conceptos
- Tesis Doctoral Director: Abraham Duarte Muñoz
Doctorando: Francisco Gortázar Bellas
2. Grammarware Engineering: un
enfoque dirigido por modelos
basado en separación de
conceptos
- Tesis Doctoral Director
Abraham Duarte Muñoz
Doctorando
Francisco Gortázar Bellas
Departamento de Ciencias de la
Computación
Escuela Superior de Ciencias
Experimentales y Tecnología
9. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Documento
Entorno de
Desarrollo
10. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Motivación
Desarrollo de lenguajes de computadora
•
•
•
Definición del lenguaje y construcción de las
herramientas (grammarware) necesarias para su
utilización
Grammarware: software que necesita conocimiento de
la descripción estructural del lenguaje para llevar a
cabo las tareas para las que fue diseñado
Grammarware Engineering [Klint et al., 2005]
• “Desarrollo y mantenimiento de grammarware
fomentando las buenas prácticas, las herramientas de
soporte y los métodos rigurosos.”
Francisco Gortázar Bellas
10
11. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Motivación
Creciente interés motivado por diferentes fuerzas
•
•
Lenguajes específicos del dominio (DSLs – Domain
Specific Languages)
Apertura arquitectónica de los IDEs (Integrated
Development Environments)
Comunidades interesadas
•
•
•
Metodologías ágiles
Ingeniería Dirigida por Modelos (MDE – Model Driven
Engineering)
Desarrolladores de IDEs
Francisco Gortázar Bellas
11
12. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Motivación
El desarrollo de lenguajes es costoso
•
•
El diseño requiere un esfuerzo considerable
La implementación de herramientas requiere un
esfuerzo aún mayor: considérense las herramientas
mínimas necesarias para que un desarrollador se
sienta “cómodo” utilizando el lenguaje
• Editores
• Refactorizadores
• Asistencia según se escribe
Francisco Gortázar Bellas
12
13. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Motivación
Algunos ejemplos...
•
•
La incorporación de un nuevo lenguaje en Eclipse se
realiza en numerosas ocasiones copiando y pegando
el código fuente del soporte para Java y adaptándolo
al lenguaje objetivo [Ho et al., 2004]
La adaptación del soporte para Java en Eclipse a las
especificaciones de Java 5 llevó un año y medio de
trabajo [Solmi, 2005]
La causa del problema es la falta de una
metodología adecuada [Klint et al., 2005]
•
El desarrollo de lenguajes es una tarea realizada
principalmente ad-hoc para cada lenguaje
Francisco Gortázar Bellas
13
14. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Motivación
La naturaleza de los lenguajes de computadora es
muy diversa, pero comparten ciertas características
•
•
•
Presentan unos conceptos y una estructura (sintaxis
abstracta del lenguaje)
Representación de dichos conceptos (sintaxis
concreta del lenguaje)
Dichos conceptos tienen unos significados (semántica
del lenguaje)
Francisco Gortázar Bellas
14
15. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Motivación
La propuesta, denominada MetaCET, se centra en:
•
•
Sintaxis abstracta del lenguaje
Sintaxis concreta del lenguaje
• Lenguajes textuales
Francisco Gortázar Bellas
15
16. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Hipótesis
La hipótesis fundamental de esta tesis doctoral se
puede enunciar del siguiente modo:
•
Es posible alcanzar los objetivos de Grammarware
Engineering a través de una separación de conceptos
clara llevada a la práctica mediante la Ingeniería
Dirigida por Modelos
Francisco Gortázar Bellas
16
17. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Objetivos
A partir de las hipótesis se plantea como objetivo
fundamental
•
Desarrollar una metodología para Grammarware
Engineering basada en el modelado de lenguajes a
través de su sintaxis abstracta que permita la
aplicación de la Ingeniería Dirigida por Modelos para
obtener automáticamente diferentes herramientas de
soporte para dichos lenguajes
Francisco Gortázar Bellas
17
18. Grammarware Engineering
Introducción
Estado del Arte
•
•
•
Grammarware Engineering
Ingeniería Dirigida por Modelos
Enfoques MDE para Grammarware Eng.
MetaCET
Validación: generación de un parser
Implementación
Conclusiones, aportaciones y trabajo futuro
Francisco Gortázar Bellas
18
19. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Grammarware Engineering
Gramáticas independientes del contexto
•
Una gramática independiente del contexto puede
definirse mediante una 4-tupla
G = (Vt , Vn , P, S )
• V es el conjunto de símbolos terminales
• V es el conjunto de símbolos no terminales
• P es un conjunto finito de reglas de producción
• S es el símbolo inicial
t
n
Vt ∩ Vn = φ
Francisco Gortázar Bellas
19
20. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Grammarware Engineering
Gramáticas independientes del contexto
•
Las reglas de producción P tienen la siguiente forma
N → w | N ∈ Vn , w ∈ Σ*
•
Σ = Vn ∪ Vt
∑∗
representa una cadena de terminales y no
terminales
Francisco Gortázar Bellas
20
21. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Grammarware Engineering
Analizadores sintácticos o parsers
•
•
Determinan si una cadena pertenece al lenguaje
Dos familias de técnicas de análisis sintáctico
• Ascendentes: parten de la cadena y van realizando
•
•
sustituciones hasta llegar al símbolo inicial
Descendentes: parten del símbolo inicial y tratan de
obtener la cadena mediante sustituciones
Las sustituciones se realizan utilizando las
producciones
Estas técnicas son limitadas
•
•
No soportan todos los tipos de GICs
Cada generador de analizadores implementa
exclusivamente una de estas técnicas
Francisco Gortázar Bellas
21
22. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Grammarware Engineering
Principios de GE
•
•
•
•
•
•
Gramáticas neutrales: independencia de técnicas de
análisis y generadores de analizadores
Transformaciones para diferentes casos de uso
Separación de conceptos
Evolución del grammarware
Ingeniería inversa del grammarware
Calidad del grammarware: establecimiento de
métricas adecuadas para medir la calidad
Francisco Gortázar Bellas
22
23. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Ingeniería Dirigida por Modelos
MDE pretende solucionar los problemas que tienen
los lenguajes de tercera generación para afrontar la
complejidad de las plataformas y expresar
conceptos del dominio de manera efectiva [Douglas
C. Schmidt, 2006]
•
•
Utilización de lenguajes de modelado específico del
dominio
Motores de transformación de modelos y generación
de código
Francisco Gortázar Bellas
23
24. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Ingeniería Dirigida por Modelos
MDE considera los modelos como una entidad de
primer orden en el proceso de desarrollo
Modelo ([Bézivin y Gerbé, 2001])
•
Un modelo es una representación de un sistema que
se construye con un objetivo concreto. En este
sentido, el modelo debe ser capaz de proporcionar
respuestas sin tener que construir el sistema real
Plataforma
•
Requisitos específicos del contexto en el que el
sistema tiene que ejecutarse
Francisco Gortázar Bellas
24
25. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Ingeniería Dirigida por Modelos
Tres principios básicos [Jean-Marie Favre, 2004]
•
Representación directa
• Cada aspecto del sistema debe ser modelado con su
propio DSL
•
Automatización
• Obtención de nuevos modelos a través de
transformaciones
•
Estándares (UML, XMI, etc.)
• Interoperabilidad
Francisco Gortázar Bellas
25
26. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Ingeniería Dirigida por Modelos
Dos tipos de modelos
•
•
Modelos independientes de la
plataforma
Modelos dependientes de la
plataforma
Transformaciones
•
Permiten obtener modelos
dependientes de la plataforma a
partir de modelos independientes
Francisco Gortázar Bellas
26
27. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Ingeniería Dirigida por Modelos
Dos tipos de modelos
•
•
Modelos independientes de la
plataforma
Modelos dependientes de la
plataforma
Transformaciones
•
Permiten obtener modelos
dependientes de la plataforma a
partir de modelos independientes
Francisco Gortázar Bellas
27
28. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Enfoques MDE para GE
Características estudiadas
•
•
Utilización de gramáticas neutrales
Separación de conceptos
•
•
Automatización: uso de transformaciones
Utilización de estándares
• Sintaxis abstracta respecto de la gramática
• Gramática respecto de técnicas de análisis
• Técnicas de análisis respecto de generadores
Francisco Gortázar Bellas
28
29. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Enfoques MDE para GE
Resumen de los diferentes enfoques
Francisco Gortázar Bellas
29
30. Grammarware Engineering
Introducción
Estado del Arte
MetaCET
•
•
Sintaxis abstracta
MetaCET
Validación: generación de un parser
Implementación
Conclusiones, aportaciones y trabajo futuro
Francisco Gortázar Bellas
30
31. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Sintaxis abstracta
MDE requiere un cambio en la visión del proceso de
desarrollo
•
•
Modelar el lenguaje
Definir las transformaciones
Francisco Gortázar Bellas
31
32. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Editores
Refactorizadores
AST
Buscadores
Parser
Vista #1
Documento
Vista #2
33. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Gramática
Independiente
del Contexto
Definición
del AST
Editores
Refactorizadores
AST
Buscadores
Parser
Vista #1
Documento
Vista #2
34. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Editores
Refactorizadores
AST
Buscadores
Parser
Vista #1
Documento
Vista #2
35. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Editores
Refactorizadores
AST
Buscadores
Parser
Vista #1
Documento
Vista #2
36. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Editores
Refactorizadores
AST
Buscadores
Parser
Vista #1
Documento
Vista #2
37. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Sintaxis abstracta
Nuestra propuesta es basar la definición de
lenguajes en este modelo
•
•
Diseñado en UML
La sintaxis concreta puede añadirse posteriormente al
modelo
Francisco Gortázar Bellas
37
38. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
MetaCET
Propuesta metodológica concreta para
Grammarware Engineering
•
Diseño de lenguajes y desarrollo de herramientas de
soporte para los mismos
Proporciona un marco general para el desarrollo de
lenguajes
•
•
Con mayor capacidad de abstracción que los
enfoques dirigidos por gramáticas
Con flexibilidad suficiente para permitir la
personalización
Francisco Gortázar Bellas
38
39. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
MetaCET
Metodología general
1.
2.
3.
4.
Modelar la sintaxis abstracta del lenguaje con UML
Modelar la sintaxis concreta anotando el modelo de
sintaxis abstracta
Diseñar las transformaciones necesarias para cada
herramienta de soporte
Diseñar el generador de código
Francisco Gortázar Bellas
39
40. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
MetaCET
Francisco Gortázar Bellas
40
41. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
MetaCET
Basado en el modelo de sintaxis abstracta
Independiza la definición del lenguaje de gramáticas
Sintaxis abstracta y sintaxis concreta pueden tener
un uso que no requiera de una gramática
•
Outline, editores estructurales, etc.
Si es necesario la gramática puede generarse
posteriormente de manera automática
Francisco Gortázar Bellas
41
42. Grammarware Engineering
Introducción
Estado del Arte
MetaCET
Validación: generación de un parser
•
•
•
•
Lenguaje de ejemplo
Descripción del perfil Syntax
Separación en niveles de abstracción
Comparativa MetaCET-Enfoque Tradicional
Implementación
Conclusiones, aportaciones y trabajo futuro
Francisco Gortázar Bellas
42
43. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Validación de MetaCET
Lenguajes
•
•
•
Statechart
Dialecto de SQL
Java
Grammarware generado
•
•
•
Editor
Gramática
Parser
Francisco Gortázar Bellas
43
44. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Editores
Refactorizadores
AST
Buscadores
Parser
Vista #1
Documento
Vista #2
45. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
for (Ticket t : tickets)
{
display(t);
}
Ticket.java
46. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
for (Ticket t : tickets)
{
display(t);
}
Ticket.java
47. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
for (Ticket t : tickets)
{
display(t);
}
Ticket.java
48. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
for (Ticket t : tickets)
{
display(t);
}
Ticket.java
49. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
for (Ticket t : tickets)
{
display(t);
}
Ticket.java
Parser
50. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
for (Ticket t : tickets)
{
display(t);
}
Ticket.java
Parser
51. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
for (Ticket t : tickets)
{
display(t);
}
Ticket.java
Parser
52. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Modelo de
Sintaxis
Abstracta
for (Ticket t : tickets)
{
display(t);
}
Ticket.java
Parser
AST
53. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Modelo de
Sintaxis
Abstracta
Sintaxis
Concreta
for (Ticket t : tickets)
{
display(t);
}
Ticket.java
Parser
AST
54. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Modelo de
Sintaxis
Abstracta
Sintaxis
Concreta
for (Ticket t : tickets)
{
display(t);
}
Ticket.java
Parser
AST
55. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Modelo de
Sintaxis
Abstracta
Sintaxis
Concreta
for (Ticket t : tickets)
{
display(t);
}
Ticket.java
Parser
AST
56. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Modelo de
Sintaxis
Abstracta
Sintaxis
Concreta
for (Ticket t : tickets)
{
display(t);
}
Ticket.java
Parser
AST
57. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Modelo de
Sintaxis
Abstracta
Sintaxis
Concreta
for (Ticket t : tickets)
{
display(t);
}
Ticket.java
Parser
AST
58. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Modelo
del
Lenguaje
Sintaxis
Concreta
for (Ticket t : tickets)
{
display(t);
}
Ticket.java
Parser
AST
59. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Modelo del lenguaje
•
•
•
•
Definición de sintaxis
abstracta y concreta
Independiente de
gramáticas
Independiente de
técnicas de análisis
Independiente de
generadores
Parser
60. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Modelo del analizador
•
•
•
Gramática neutral
Independiente de
técnicas de análisis
Independiente de
generadores
Parser
61. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Modelo del generador
•
•
•
Analizador sintáctico
Dependiente de una
técnica de análisis
Dependiente de un
generador
Parser
62. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Comparativa
MetaCET-Enfoque Tradicional
Enfoque tradicional
•
•
•
•
•
Gramáticas
dependientes del uso
Dependientes de la
técnica de análisis y
generador
Duplicación de
información
Dificultad para generar
herramientas
Difícil evolución
Francisco Gortázar Bellas
62
63. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Comparativa
MetaCET-Enfoque Tradicional
Enfoque tradicional
•
•
•
•
•
Gramáticas
dependientes del uso
Dependientes de la
técnica de análisis y
generador
Duplicación de
información
Dificultad para generar
herramientas
Difícil evolución
MetaCET
•
•
•
•
•
Estándares
Niveles de abstracción
Formalización de la
definición del lenguaje
Casos de uso
Independencia de
herramientas
Francisco Gortázar Bellas
63
73. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Conclusiones generales
Aplicación de MDE al desarrollo de lenguajes
Principios de Grammarware Engineering
Definición del lenguaje mediante UML
Metodología general
Francisco Gortázar Bellas
73
74. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Aportaciones principales
1.
Metodología general para el desarrollo de
lenguajes
2.
Modelado de lenguajes en UML a través del perfil
Syntax
3.
Separación de conceptos
Francisco Gortázar Bellas
74
75. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Aportaciones principales
4.
5.
Particularización de la metodología para obtener
un analizador sintáctico
Modelado de gramáticas en UML a través del perfil
Parser
•
•
6.
7.
Gramática neutral
Independiente de técnicas de análisis
Modelado de especificaciones JavaCC y JFlex en
UML a través de los perfiles JFlex y JavaCC
Publicación de resultados
Francisco Gortázar Bellas
75
76. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Trabajo futuro
Ampliación de la gama de herramientas generadas
•
•
•
•
Editores estructurales
Herramientas de búsqueda
Metricadores
Herramientas de análisis
Aumentar la definición del lenguaje con la semántica
estática
•
•
•
Posiblemente con OCL
Enlazar referencias con declaraciones
Comprobación de tipos
Francisco Gortázar Bellas
76
77. Introducción – EA – MetaCET – Validación – Implementación – Conclusiones
Trabajo futuro
Relaciones entre dos modelos de lenguajes
diferentes
•
•
Traducción de programas de un lenguaje a otro
Aprovechar el grammarware existente para un
determinado lenguaje
• Compiladores
• Depuradores
• Máquinas virtuales
Publicación del código
Francisco Gortázar Bellas
77
78. Grammarware Engineering: un
enfoque dirigido por modelos
basado en separación de
conceptos
- Tesis Doctoral Director: Abraham Duarte Muñoz
Doctorando: Francisco Gortázar Bellas
79. Grammarware Engineering: un
enfoque dirigido por modelos
basado en separación de
conceptos
- Tesis Doctoral Director
Abraham Duarte Muñoz
Doctorando
Francisco Gortázar Bellas
Departamento de Ciencias de la
Computación
Escuela Superior de Ciencias
Experimentales y Tecnología
Editor's Notes
Muchas gracias, sr. presidente
Gracias, sr. presidente.
Buenos días. Este trabajo de investigación se ha desarrollado en el seno del grupo Gavab, grupo de investigación multidisciplinar al cual pertenezco. Este grupo pertenece al Departamento de Ciencias de la Computación de la Escuela Superior de Ciencias Experimentales y Tecnología en la Universidad Rey Juan Carlos.
Querría extender mi agracedimiento a los miembros del tribunal, a mi director de tesis, y a todos los que se han acercado hasta aquí hoy a ver esta exposición.
La presentación del trabajo de tesis está dividida en cinco apartados. En primer lugar haré una introducción al tema de la tesis presentando la motivación, las hipótesis y los objetivos de la misma. A continuación se describe el estado del arte, exponiendo brevemente las características fundamentales de Grammarware Engineering y Model Driven Engineering o Ingeniería Dirigida por Modelos, para posteriormente pasar a describir la metodología general propuesta en esta tesis para Grammarware Engineering, denominada MetaCET. Como ejemplo de aplicación de la metodología se mostrará la obtención de un parser, que es una de las herramientas básicas de soporte para los lenguajes de computadora. Finalmente, se expondrán las conclusiones, aportaciones principales y futuros trabajo.
Esta tesis doctoral pretende dar un primer paso que convierta el desarrollo de lenguajes en una Ingeniería de Lenguajes. Por desarrollo de lenguajes se entiende la definición de lenguajes de computadora y la implementación o construcción de herramientas de soporte para el mismo. Estas herramientas, denominadas grammarware, no son sino software que necesita conocimiento de la descripción estructural del lenguaje para llevar a cabo su función. Grammarware Engineering, según la definición dada por Paul Klint, Ralf Lämmel, y Chris Verhoef, es el desarrollo y mantenimiento de grammarware fomentando las buenas prácticas, las herramientas de soporte y los métodos rigurosos.
Esta tesis doctoral pretende dar un primer paso que convierta el desarrollo de lenguajes en una Ingeniería de Lenguajes. Por desarrollo de lenguajes se entiende la definición de lenguajes de computadora y la implementación o construcción de herramientas de soporte para el mismo. Estas herramientas, denominadas grammarware, no son sino software que necesita conocimiento de la descripción estructural del lenguaje para llevar a cabo su función. Grammarware Engineering, según la definición dada por Paul Klint, Ralf Lämmel, y Chris Verhoef, es el desarrollo y mantenimiento de grammarware fomentando las buenas prácticas, las herramientas de soporte y los métodos rigurosos.
Esta tesis doctoral pretende dar un primer paso que convierta el desarrollo de lenguajes en una Ingeniería de Lenguajes. Por desarrollo de lenguajes se entiende la definición de lenguajes de computadora y la implementación o construcción de herramientas de soporte para el mismo. Estas herramientas, denominadas grammarware, no son sino software que necesita conocimiento de la descripción estructural del lenguaje para llevar a cabo su función. Grammarware Engineering, según la definición dada por Paul Klint, Ralf Lämmel, y Chris Verhoef, es el desarrollo y mantenimiento de grammarware fomentando las buenas prácticas, las herramientas de soporte y los métodos rigurosos.
Esta tesis doctoral pretende dar un primer paso que convierta el desarrollo de lenguajes en una Ingeniería de Lenguajes. Por desarrollo de lenguajes se entiende la definición de lenguajes de computadora y la implementación o construcción de herramientas de soporte para el mismo. Estas herramientas, denominadas grammarware, no son sino software que necesita conocimiento de la descripción estructural del lenguaje para llevar a cabo su función. Grammarware Engineering, según la definición dada por Paul Klint, Ralf Lämmel, y Chris Verhoef, es el desarrollo y mantenimiento de grammarware fomentando las buenas prácticas, las herramientas de soporte y los métodos rigurosos.
Esta tesis doctoral pretende dar un primer paso que convierta el desarrollo de lenguajes en una Ingeniería de Lenguajes. Por desarrollo de lenguajes se entiende la definición de lenguajes de computadora y la implementación o construcción de herramientas de soporte para el mismo. Estas herramientas, denominadas grammarware, no son sino software que necesita conocimiento de la descripción estructural del lenguaje para llevar a cabo su función. Grammarware Engineering, según la definición dada por Paul Klint, Ralf Lämmel, y Chris Verhoef, es el desarrollo y mantenimiento de grammarware fomentando las buenas prácticas, las herramientas de soporte y los métodos rigurosos.
Esta tesis doctoral pretende dar un primer paso que convierta el desarrollo de lenguajes en una Ingeniería de Lenguajes. Por desarrollo de lenguajes se entiende la definición de lenguajes de computadora y la implementación o construcción de herramientas de soporte para el mismo. Estas herramientas, denominadas grammarware, no son sino software que necesita conocimiento de la descripción estructural del lenguaje para llevar a cabo su función. Grammarware Engineering, según la definición dada por Paul Klint, Ralf Lämmel, y Chris Verhoef, es el desarrollo y mantenimiento de grammarware fomentando las buenas prácticas, las herramientas de soporte y los métodos rigurosos.
Esta tesis doctoral pretende dar un primer paso que convierta el desarrollo de lenguajes en una Ingeniería de Lenguajes. Por desarrollo de lenguajes se entiende la definición de lenguajes de computadora y la implementación o construcción de herramientas de soporte para el mismo. Estas herramientas, denominadas grammarware, no son sino software que necesita conocimiento de la descripción estructural del lenguaje para llevar a cabo su función. Grammarware Engineering, según la definición dada por Paul Klint, Ralf Lämmel, y Chris Verhoef, es el desarrollo y mantenimiento de grammarware fomentando las buenas prácticas, las herramientas de soporte y los métodos rigurosos.
A pesar de los años que han pasado desde los primeros lenguajes de computadora, es esta un área que sigue despertando interés. Este interés se ha visto incrementado en los últimos años debido a dos fuerzas fundamentalmente: en primer lugar, la necesidad de definir y utilizar lenguajes específicos del dominio; en segundo lugar, la apertura arquitectónica de los entornos de desarrollo, que han pasado de una arquitectura monolítica, a una arquitectura completamente abierta, basada en el concepto de plug-in, que permite añadir nueva funcionalidad al entorno, lo cual a su vez ha permitido que proveedores distintos al propietario del entorno de desarrollo puedan ofertar productos que se integran bien en dicho entorno.
Este interés ha venido impulsado por tres comunidades principalmente: las metodologías ágiles, que propugnan la inclusión de expertos del dominio en el proceso de desarrollo. Estos expertos pueden colaborar en el desarrollo describiendo, por ejemplo, casos de prueba, siempre que se les proporcione un lenguaje adecuado para describir dichos casos de prueba. De ahí el interés en los DSLs de esta comunidad. Por otro lado, la ingeniería dirigida por modelos, que basa el proceso de desarrollo en el modelado específico del dominio, a través de DSLs. Aunque describiré en más detalle MDE, baste decir que la definición de este tipo de lenguajes es esencial en esta metodología. Por último, los desarrolladores de IDEs, puesto que estos entornos se han convertido en entornos con soporte para múltiples lenguajes y tareas, motivando la búsqueda de la reutilización en esta torre de babel en que se han convertido.
Sin embargo, el problema con el que se encuentran estas áreas, es la complejidad de la tarea que tienen delante. El desarrollo de lenguajes es costoso, tanto el diseño como la implementación de las herramientas de soporte al lenguaje requieren un esfuerzo considerable. Supóngase, por ejemplo, que se desea desarrollar un nuevo lenguaje con el objetivo de utilizarlo para describir determinadas partes de una aplicación software compleja que se está desarrollando. Cualquier usuario del lenguaje, que tenga experiencia con otros lenguajes de computadora, espera disponer de ciertas herramientas que hoy en día se consideran básicas: editores con resaltado de sintaxis y asistencia según se escribe, metricadores, refactorizadores, y un largo etcétera. La construcción de todas estas herramientas es una tarea ardua.
Algunos datos sobre el alcance de este problema han sido dados por diversos autores. Ho y otros señalan ,en un artículo presentado en la conferencia de Eclipse, que el soporte para un nuevo lenguaje dentro de este entorno se implementa copiando y pegando el soporte del lenguaje Java (reconocido como uno de los más logrados), y adaptándolo al lenguaje que se desea incorporar. Por otro lado, Riccardo Solmi, en su tesis doctoral, señala que la incorporación de los cambios introducidos en la versión 5 de Java dentro del soporte para Java en Eclipse llevó un año y medio de trabajo. Parece mucho tiempo habida cuenta de que se trata de evolucionar las herramientas, y no de desarrollarlas desde cero.
El problema es la falta de una metodología adecuada para el desarrollo de lenguajes. Esta tarea es realizada de manera ad-hoc para cada lenguaje.
Aunque existen infinidad de lenguajes de computadora, todos ellos comparten ciertas características: en primer lugar, todos presentan ciertos conceptos estructurados de alguna forma. Estos conceptos representan información del dominio en el contexto del cual se desarrolla el lenguaje. Los conceptos y su estructura conforman lo que se denomina sintaxis abstracta del lenguaje.
En segundo lugar, el lenguaje define un significado para dichos conceptos, que es lo que se denomina semántica del lenguaje.
Por último, una definición del lenguaje incluye cómo se representan dichos conceptos. Esto se denomina sintaxis concreta del lenguaje. La representación puede ser gráfica, como la notación para diagramas de clases del lenguaje UML, o textual, como el lenguaje Java.
La propuesta presentada en esta tesis doctoral se centra exclusivamente en la sintaxis abstracta y la sintaxis concreta del lenguaje. Además, está orientada exclusivamente hacia lenguajes con representación textual. Para los lenguajes con representación gráfica existen algunas propuestas muy interesantes (como por ejemplo el Graphical Modeling Framework de Eclipse).
A continuación se describen las bases conceptuales de Grammarware Engineering y de MDE, y se presentan, de manera resumida, los problemas encontrados en la mayoría de herramientas relacionadas que han sido estudiadas.
En el contexto del desarrollo de lenguajes, las gramáticas independientes del contexto son el formalismo más utilizado a la hora de definir el lenguaje. Herramientas como los generadores de analizadores sintácticos utilizan descripciones de este tipo para construir analizadores que son capaces de determinar si un fragmento de código es correcto, y detectar diferentes tipos de errores en el mismo.
Una gramática independiente del contexto puede definirse como una cuatro tupla, donde V sub t representa el conjunto de símbolos terminales, estos símbolos representan el vocabulario del lenguaje. V sub n es el conjunto de símbolos no terminales. Ambos conjuntos tienen la particularidad de que su intersección es vacía. P es un conjunto finito de reglas de producción y S es el símbolo inicial. A partir de S es posible generar todas las posibles cadenas del lenguaje utilizando las producciones.
Las producciones definen reglas de transformación entre un no terminal y una cadena de terminales y no terminales. Al no terminal se le denomina antecedente (o parte izquierda de la producción), a la cadena se la denomina consecuente (o parte derecha).
Las GICs tienen la ventaja de que se conocen diferentes técnicas de análisis sintáctico que, dada una GIC, son capaces de determinar si una cadena pertenece al lenguaje.
Complementariamente al uso de gramáticas, Klint y otros proponen una serie de principios que deberían ser aplicados para hacer del desarrollo de lenguajes y de grammarware una ingeniería. Para ello proponen utilizar gramáticas neutrales para independizar la definición del lenguaje de las técnicas de análisis sintáctico. Aplicar diferentes transformaciones a partir de estas gramáticas neutrales para diferentes casos de uso. Separar conceptos diferentes. Permitir la evolución de grammarware. Investigar la ingeniería inversa de grammarware, ya que existe una gran cantidad de grammarware ya desarrollado. Desarrollar unas métricas adecuadas que permitan medir la calidad del grammarware.
Al final:
Nuestra propuesta trata de aplicar estos principios mediante la utilización de una metodología dirigida por modelos para la construcción de grammarware.
La Ingeniería Dirigida por Modelos pretende solucionar los problemas de los lenguajes de tercera generación a la hora de afrontar la complejidad de las plataformas en las que las aplicaciones tienen que ejecutarse y de expresar conceptos del dominio de manera efectiva. En este sentido, esta metodología promueve la utilización de lenguajes de modelado específicos del dominio que permitan expresar conceptos de las plataformas concretas y la generación de las aplicaciones a mediante motores de transformación de modelos y generación de código.
Por plataforma entendemos aquellos requisitos específicos del contexto en el cual el sistema tiene que ejecutarse. Una plataforma puede ser desde un lenguaje de implementación, un sistema operativo, un framework web, un sistema gestor de bases de datos, etcétera.
El objetivo de las transformaciones es ir introduciendo aspectos específicos de la plataforma en los modelos. En ocasiones esta información llega a ser tan descriptiva que es posible generar el sistema completo.
Lo interesante del enfoque es la capacidad para especializar el sistema para plataformas diferentes.
En este enfoque los modelos se consideran una entidad de primer orden. En este sentido, y según la definición dada por Bezivin y Gerbé, un modelo es una representación de un sistema o parte de él que se construye con un objetivo concreto. El modelo debe poder proporcionar respuestas sobre el sistema sin tener que construir el sistema real.
Según Favre, esta metodología está guiada por tres principios básicos: representación directa, es decir, cada aspecto del sistema debe ser gestionado con su propio lenguaje, automatización para obtener nuevos modelos a través de transformaciones; y estándares, que permiten la interoperabilidad de las herramientas MDE.
Dentro de MDE se pueden distinguir dos tipos diferentes de modelos
Previamente al desarrollo de la metodología que se presenta en esta tesis, se estudiaron aquellas herramientas que por su enfoque estaban más cercanas a un enfoque MDE.
Esta tabla resume los resultados obtenidos tras el estudio. Aunque no voy a describir cada herramienta en detalle, sí comentaré las conclusiones que se extrajeron de dicho estudio.
Tras haberse descrito brevemente las principales características de Grammarware Engineering y MDE, a continuación se describirá la metodología desarrollada en esta tesis doctoral para la definición de lenguajes y el desarrollo de herramientas de soporte para los mismos. En primer lugar detallaré cómo nos llevamos la definición de lenguajes desde el campo de las gramáticas independientes del contexto al campo del modelado orientado a objetos, apoyándonos para ello la sintaxis abstracta del lenguaje. En segundo lugar, describiré la metodología general, denominada MetaCET.
Este marco general independiza...
Este marco general independiza...
Para mostrar el enfoque propuesto, se utilizará un ejemplo sencillo, en este caso una representación de un bucle for, habitual en la mayoría de lenguajes de programación. La representación textual de dicho bucle se puede ver en la figura. Esta representación incluye palabras reservadas como for, símbolos, como las llaves o los paréntesis, nombres de variables, etc.
Los elementos relevantes desde el punto de vista del AST son, en primer lugar, la declaración de la variable t, de tipo Ticket.
En segundo lugar, la referencia a la variable tickets.
Y en tercer lugar el cuerpo del bucle.
La representación de la información relevante en el correspondiente AST puede verse en la imagen de la derecha. Cada caja representa un objeto en memoria que tiene unos valores para cada uno de sus atributos. Concretamente, la declaración de la variable t se representa
Como un objeto de tipo VarDecl,
Este objeto contiene un valor t para el atributo name, y un valor ticket para el atributo type.
Este AST es una instancia de las clases definidas en el modelo de sintaxis abstracta, donde se definen los conceptos de For, VarDecl, etcétera jun to con sus atributos y relaciones. El objetivo es construir el parser a partir de este modelo de sintaxis abstracta.
Para ello necesitamos incorporar a este modelo información sobre la sintaxis concreta del lenguaje, es decir, sobre su representación textual. Así, el for está formado textualmente por la palabra reservada for, seguida de un paréntesis de apertura, una declaración de variable, el símbolo dos puntos, una referencia a una variable, un paréntesis de cierre y un cuerpo.
En el modelo de sintaxis abstracta, la clase for se estereotipa entonces con el estereotipo syntax. La propiedad value de este estereotipo permite definir toda esta información. Es importante notar que la declaración de la variable, la referencia a la variable y el cuerpo del bucle se indican utilizando el nombre de los correspondientes atributos de la clase For. Sus representaciones textuales vendrán dadas en las respectivas clases VarDecl, VarRef y Body.
En el caso de VarDecl la representación textual se limita a un tipo y un nombre.
La representación textual de la clase VarRef contiene exclusivamente el nombre de la variable que se referencia.
Por último el cuerpo del bucle se representa como una lista de sentencias encerrada entre llaves.
Ahora tenemos toda la infgormación relevante de la sintaxis abstracta y sintaxis concreta. Este modelo lo denominamos modelo del lenguaje, puesto que incluye ambas características.
Por último el cuerpo del bucle se representa como una lista de sentencias encerrada entre llaves.
Ahora tenemos toda la infgormación relevante de la sintaxis abstracta y sintaxis concreta. Este modelo lo denominamos modelo del lenguaje, puesto que incluye ambas características.
El modelo...
La generación del parser tiene lugar a partir de este modelo en dos transformaciones sucesivas y una fase de generación de código.
Muchas gracias, sr. presidente
Gracias, sr. presidente.
Buenos días. Este trabajo de investigación se ha desarrollado en el seno del grupo Gavab, grupo de investigación multidisciplinar al cual pertenezco. Este grupo pertenece al Departamento de Ciencias de la Computación de la Escuela Superior de Ciencias Experimentales y Tecnología en la Universidad Rey Juan Carlos.
Querría extender mi agracedimiento a los miembros del tribunal, a mi director de tesis, y a todos los que se han acercado hasta aquí hoy a ver esta exposición.