María Cándida Luengo Díez Director: Dr. Juan Manuel Cueva Lovelle

62
Tesis Doctoral 1 Desarrollo y Evaluación de Técnicas de Construcción de Procesadores de Lenguaje para Máquinas Abstractas Orientadas a Objetos María Cándida Luengo Díez Director: Dr. Juan Manuel Cueva Lovelle Tesis Doctoral Universidad de Oviedo - Departamento de Informática

description

Universidad de Oviedo - Departamento de Informática. Tesis Doctoral. Desarrollo y Evaluación de Técnicas de Construcción de Procesadores de Lenguaje para Máquinas Abstractas Orientadas a Objetos. María Cándida Luengo Díez Director: Dr. Juan Manuel Cueva Lovelle. Tesis Doctoral. Contenido. - PowerPoint PPT Presentation

Transcript of María Cándida Luengo Díez Director: Dr. Juan Manuel Cueva Lovelle

Page 1: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 1

Desarrollo y Evaluación de Técnicas de Construcción de Procesadores de Lenguaje para Máquinas Abstractas

Orientadas a Objetos

María Cándida Luengo Díez

Director: Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral

Universidad de Oviedo - Departamento de Informática

Page 2: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 2

Tesis Doctoral

• Estudio de los Sistemas Relevantes

• Objetivos

• El Sistema O2C2

• Diseño e Implementación del Prototipo

• Ventajas del Sistema Diseñado y Aplicaciones

• Conclusiones y Líneas de Investigación Futuras

Contenido

• Introducción• Introducción

Page 3: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 3

Introducción

Generadores de Procesadores: Características

• “Un Procesador de Lenguaje es una función cuyo dominio es un lenguaje fuente y cuyo rango está contenido en un lenguaje objeto ” [Ter00]

• “Un Generador de Procesadores de Lenguajes es un programa que transforma una especificación en un procesador para el lenguaje de programación descrito en la especificación” [GH98]

Características

Metalenguaje

Funcionalidad

Documentación

- Fácil de leer, aprender y usar- Integrado- Construcciones sencillas

- Robusto- Eficiente- Extensible

- Permite la descripción del sistema generador

Page 4: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 4

Introducción

Generadores de Procesadores: Estructura

Procesador(Total/Parcial)

Procesador(Total/Parcial)

ProgramaFuente

Generador deProcesadoresGenerador deProcesadoresMetalenguaje

Tiempo de

generación

ProgramaObjeto

Tiempo de

compilación

Tiempo de

ejecución

Page 5: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 5

Introducción

Generadores de Procesadores: Clasificación

Fase de AnálisisFase de Análisis

AnalizadorLéxico

AnalizadorLéxico

AnalizadorSintáctico

AnalizadorSintáctico

AnalizadorSemánticoAnalizadorSemántico

OptimizadorOptimizador Generación decódigo

Generación decódigo

ProgramaFuente

Tokens ÁrbolSintáctico

CódigoIntermedio

ProgramaObjeto

Generador deAnalizadoresSintácticos

Generador deAnalizadoresSintácticos

Generador deAnalizadores

Léxicos

Generador deAnalizadores

Léxicos

Generador deAnalizadoresSemánticos

Generador deAnalizadoresSemánticos

Generador deGeneradores de

Código

Generador deGeneradores de

CódigoGenerador Fase de Análisis

Expresionesregulares

Gramáticas libres de contexto

GramáticasAtribuidas Descripción del

Código Intermedio y Código Máquina

Metalenguajes

Page 6: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 6

Tesis Doctoral

• Introducción

• Estudio de los Sistemas Relevantes

• Objetivos

• El Sistema O2C2

• Diseño e Implementación del Prototipo

• Ventajas del Sistema Diseñado y Aplicaciones

• Conclusiones y Líneas de Investigación Futuras

Contenido

Page 7: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 7

Estudio

Estudio de los sistemas relevantes Nombre Tipo

AnálisisLeguaje

GeneradoTratamiento de Errores

Especificaciones Características

Destacables

Lex/Yacc LALR(1) C Malo BNF / C - Falta integración A. Léxico y Sintáctico

- No genera ASTs

- Ciclo de desarrollo largo

Lemon LALR(1) C Malo BNF / C - Misma estructura y modo de operar de Yacc

Accent AE/AP C Malo BNF / C - Ciclo de desarrollo largo

- No genera ASTs

Cocktail LALR(1)

LL(1)C

Módulo-2

Regular BNF / C o Módula-2 - Ciclo de desarrollo largo

- Falta integración A. Léxico y Sintáctico

- Características de los generadores clásicos

Antlr LL(K) C++/Java Bueno EBNF / Java o C++ - Flexibilidad de predicados costosa

- Ciclo de desarrollo largo

JavaCC LL(K) Java Bueno EBNF / Java - Herramienta externa para generar ASTs

- Ciclo de desarrollo largo

Eli LALR(1) C Regular Esp. Declarativas - Conjunto amplio de especificaciones

- Falta de uniformidad en las especificac.

Gentle LALR(1) C Malo Esp. Alto Nivel - Añade una capa más de especificaciones

- Utiliza internamente Lex/Yacc

Spirit LL-ND C++ Malo Esp. en C++ - Técnica «Template metaprogramming» para generar analizadores sintácticos

Page 8: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 8

Estudio

Problemática con los sistemas actuales (I)

• Mezcla de especificaciones y acciones semánticas – Dificulta la legibilidad y mantenimiento de código.

– Incrementa la complejidad ya que es más difícil comprender la estructura y el sentido de una especificación gramatical.

• Reusabilidad– El hecho de que se mezclen las especificaciones sintácticas y semánticas (a veces también léxicas) hace que sean muy poco reutilizables.

– Se dificulta la incorporación de nuevas características a un determinado lenguaje. Extenderlo requeriría realizar muchas adaptaciones.

• Extensibilidad– La construcción de un procesador exige « casi siempre » empezar de cero. No existen mecanismos que permitan aprovechar parte de la implementaciones existentes para extenderlas con nuevas características.

Page 9: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 9

Estudio

Problemática con los sistemas actuales (II)

• Mantenimiento– Se incrementa el esfuerzo necesario para poder depurar los errores cometidos.– La duplicación del código deja al programador la responsabilidad de mantener actualizados el fichero de especificaciones y el programa resultante.

• Entornos visuales de desarrollo– No incorporan un entorno integrado de desarrollo que permita la construcción de procesadores con el menor esfuerzo posible.

– No se integran de manera sencilla en los diferentes entornos de desarrollo de aplicaciones.

• Modularidad– Existen muchas interdependencias. Es necesario realizar cambios en la especificación aunque no cambie la gramática.

– Cualquier cambio realizado en el código de las acciones implica volver a procesar el fichero de especificaciones. Este proceso es ineficiente, complica y aumenta el ciclo de desarrollo de aplicaciones.

Page 10: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 10

EstudioInconvenientes Derivados

Limitan su funcionalidad ofreciendo diferentes opciones y añadiendo complejidad en las especificaciones de entrada.

Analizadores generados difíciles de depurar.

El ciclo de desarrollo es largo.

Falta de integración entre las herramientas y en los denominados entornos de desarrollo.

Uso no intuitivo.

Page 11: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 11

Construcción de un sistema en el que se apliquen los principios de diseño e implantación del paradigma de orientación a objetos integrando Frameworks y Patrones como métodos de diseño.

Estudio

Solución

Beneficios

– El sistema tendrá una estructura modular, en la cual determinados componentes podrán ser identificados y reutilizados.

– El sistema podrá ser configurado mediante la extensibilidad para unas necesidades específicas, asegurando nuevas características y servicios o para cumplir determinadas restricciones. De esta forma se facilita el mantenimiento.

Page 12: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 12

Tesis Doctoral

• Introducción

• Estudio de los Sistemas Relevantes

• Objetivos

• El Sistema O2C2

• Diseño e Implementación del Prototipo

• Ventajas del Sistema Diseñado y Aplicaciones

• Conclusiones y Líneas de Investigación Futuras

Contenido

Page 13: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 13

Descripción de un sistema de soporte en la construcción de procesadores de lenguaje, que facilite el desarrollo e implementación de los lenguajes de programación, y la reutilización de diferentes tareas relacionadas con la programación de una forma rápida y sencilla.

Aplicación de Tecnologías Orientadas a Objetos basadas en Frameworks para la construcción de Generadores de Procesadores de Lenguajes.

Empleo de un modelo de objetos uniforme y homogéneo, para estructurar la funcionalidad del sistema.

Valoración cualitativa del modelo diseñado y las principales técnicas utilizadas para la construcción de procesadores de lenguajes.

Objetivos

Objetivos Fundamentales

Page 14: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 14

Incorporar Técnicas Orientadas a Objetos– Los objetos proporcionan modularidad y encapsulación.– Los sistemas son más fáciles de reutilizar, extender y mantener.– La comunicación entre los distintos grupos de objetos se puede realizar a través de las interfaces ofrecidas por los frameworks.

Metalenguaje sencillo – Fácil de aprender y de utilizar.– Integrado con las diferentes notaciones– No permita cometer errores fácilmente.

Tratamiento y recuperación de errores – Permitir que los usuarios puedan localizar y corregir los errores.– Incorporar código especializado para el tratamiento de los errores.– Permitir que el sistema se recupere y pueda seguir su proceso.

Generación de AST

Objetivos

Objetivos Relativos a la Construcción (I)

Page 15: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 15

Usabilidad – Incorpore un nivel de abstracción adecuado para la retención de ideas.– Sea fácil de utilizar.– Ofrezca un buen grado de satisfacción por parte del usuario.

Plataforma de desarrollo – Soporte a la experimentación .– Permita la portabilidad de las aplicaciones.– Sea flexible para conseguir que la funcionalidad del sistema esté disponible en forma de API.

Entorno visual de desarrollo – Incorpore un conjunto de herramientas para facilitar el desarrollo rápido de aplicaciones sin demasiado esfuerzo, automatizando todo lo posible el proceso de construcción de procesadores de lenguajes.

– Permita que las distintas herramientas que integran el sistema puedan interactuar sin la intervención del usuario.

Objetivos

Objetivos Relativos a la Construcción (II)

Page 16: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 16

Tesis Doctoral

• Introducción

• Estudio de los Sistemas Relevantes

• Objetivos

• El Sistema O2C2 – Arquitectura– Funcionalidad proporcionada

• Diseño e Implementación del Prototipo

• Ventajas del Sistema Diseñado y Aplicaciones

• Conclusiones y Líneas de Investigación Futuras

Contenido

Page 17: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 17

El Sistema O2C2

Arquitectura

Metalenguaje

Sistema Generadorde

Procesadores de Lenguajes

Acciones Semánticas

Procesadorde

Lenguaje

Entorno Visual

Page 18: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 18

El Sistema O2C2

Funcionalidad proporcionada

Entorno Visual

Sistema Generador

– Proporcionar una interfaz usable y completa.

– Permitir una interacción eficiente con el sistema generador.

– Incorporar un conjunto de herramientas que faciliten las tareas de desarrollo.

– Transformar el metalenguaje y las acciones semánticas en un procesador de lenguaje.

– Integrar y encapsular las fases de construcción para facilitar el desarrollo de las aplicaciones.

Page 19: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 19

El Sistema O2C2. Funcionalidad

Entorno visual (I)

• Características del entorno

– TransparenciaTransparencia – Concisión en la representaciónConcisión en la representación

– Adaptabilidad y tutorialidadAdaptabilidad y tutorialidad

– Completitud funcionalCompletitud funcional

– Soporte de diferentes niveles de abstracciónSoporte de diferentes niveles de abstracción – Independencia en las accionesIndependencia en las acciones

– IntegraciónIntegración

– Soporte para el desarrolloSoporte para el desarrollo

Dar a conocer lo que sucede en todo momento en el sistema

En las opciones y en la información al usuario

En las preferencias y el contexto actual

Proporcionar toda la funcionalidad del sistema

En la visualización

Funciones y semántica coherente en cada situación.

Un solo entorno para el análisis léxico, sintáctico y semántico

Flexibilizar la estructura de los proyectos

Page 20: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 20

El Sistema O2C2. Funcionalidad

Entorno visual (II)

• Funcionalidad Básica

Editor

Depurador

Visualizador

Permitir detectar y corregir fácilmente los errores producidos.

Conocer los datos, las estructuras internas y los objetos que

forman el AST.

Definir el conjunto de reglas de la especificación gramatical y comprobar su adecuación en base al tipo de análisis.

Definir el conjunto de tokens que conforman el léxico del lenguaje.

Establecer las acciones semánticas asociadas a las secciones gramaticales.

Incorporar un módulo de definición de clases de forma que una clase descrita visualmente tenga su descripción textual y viceversa.

Page 21: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 21

El Sistema O2C2. Funcionalidad

Sistema Generador (I)

Análisis Léxico

Análisis Semántico

Análisis Sintáctico

Gestor de errores

Generación Código

Intermedio

• Módulos básicos

– Análisis Léxico

– Análisis Sintáctico

– Análisis Semántico

– Gestor de errores

– Gen. Código Intermedio

• Módulos adicionales

– Optimización de código Intermedio

– Generación de Código

Page 22: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 22

El Sistema O2C2. Sistema Generador

Análisis Léxico (I)

Problemática

El uso de expresiones regulares oscurece el formato de los

símbolos tratados dificultando su entendimiento.

Algunos problemas de reconocimiento son difíciles de resolver

usando expresiones regulares.

El ciclo de desarrollo – edición, generación y compilación – debe

ser repetido para corregir, cambiar o extender el analizador léxico

Page 23: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 23

El Sistema O2C2. Sistema Generador

Análisis Léxico (II)

Modelo Orientado a Objetos

Scan

Framework GenéricoFramework Genérico

InputScanner

Lexer

Clase abstracta de los objetos

reconocedores

Proporciona loscaracteres de la entrada

Organiza los objetos Scan

Interfaz del framework

Los objetos pueden reconocer los distintos símbolos del lenguaje (identificadores, cadenas, etc).

Se seleccionan los objetos para realizar un análisis específico sin preocuparse del reconocimiento llevado a cabo de forma individual.

El usuario puede extenderlos o incorporar otros objetos diferentes.

La comunicación entre las clases del framework y las clases de usuario se realiza a través de la interfaz Lexer.

Page 24: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 24

El Sistema O2C2. Sistema Generador

Análisis Léxico (III)

Reconocimiento

Caracteresde entrada

Objetos Scan

......

Objetos marcados

Objeto que reconocela secuencia más larga

Si existen varios objetos se elige el primero que se haya localizado.

El objeto Scanner invoca al método yylex() del objeto

suscrito para realizar la acción correspondiente

Para optimizar la búsqueda del objeto ganador se indexa esta búsqueda por el primer carácter del símbolo ya que es significativo de su tipo.

Page 25: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 25

El Sistema O2C2. Sistema Generador

Análisis Léxico (IV)

Ventajas del modelo

Los objetos encapsulan su estado simplificando el reconocimiento individual.

Permite la creación de clases que pueden ser usadas para especializar a otras existentes sin necesidad de acceder al código fuente.

Las clases pueden ser utilizadas por diferentes analizadores léxicos.

Los objetos que representan las distintas acciones pueden ser reemplazados en un momento determinado por otros diferentes para atender otras necesidades.

Page 26: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 26

El Sistema O2C2. Sistema Generador

Análisis Sintáctico (I)

Modelo Orientado a ObjetosFramework Framework

• Clases que conforman el núcleo del framework.

• Son clases comunes a todos los frameworks generados

por el sistema.

• La jerarquía de clases opera con los diferentes elementos

que forman parte de la descripción de una gramática.

• Clases que completan al núcleo e incorporan características específicas del lenguaje.

• Se genera una clase para cada elemento no terminal, para cada producción y elemento de tipo EBNF.

• Las clases son descendientes de las interfaces y clases que componen el núcleo del framework.

Page 27: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 27

El Sistema O2C2. Sistema Generador

Análisis Sintáctico (II)

Análisis

Analizador sintáctico

Parser

Tipo de análisis

- Ascendente- Descendente- No determinista

• La utiliza el núcleo del sistema para

manejar la clase principal del

analizador sintáctico generado.

• Debe ser implementada por todos los

procesadores de lenguaje generados.

El método parser() inicializa el proceso

de análisis.

• Se encarga de inicializar objetos antes

de comenzar el análisis sintáctico.

Interfaces del framework

Gramática en

notación EBNF

Error Listener

Page 28: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 28

El Sistema O2C2. Sistema Generador

Análisis Semántico (I)

Modelo Orientado a Objetos

Listener

Clases de usuario

Clases generadas por el sistema

La comunicación con las clases sintácticas se

realiza a través de la interfaz Listener.

La clases de usuario actúan como listeners y se deben

suscribir ante ciertas clases sintácticas para que sean notificadas

al reconocer determinadas secciones gramaticales.

Las clases con el código semántico necesario

para completar el procesador de lenguaje

generado, estarán separadas de las clases

generadas por el sistema. (Analizador sintáctico)

Page 29: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 29

El Sistema O2C2. Sistema Generador

Análisis Semántico (II)

Listener 1 Listener 2 Listener 3

Objeto Fuente Listener 1

Listener 2

Listener 3

Listener 4

Los eventos son transmitidos solamente a los listener registrados

Evento no transmitido al listener 4

La lista de listener registrados, es mantenida en el objeto fuente

Cada vez que se produce un evento,

el objeto fuente invoca un método

con el objeto listener para que pueda

realizar el tratamiento correspondiente.

Una clase sintáctica puede tener

varias clases de usuario suscritas y

una misma clase que actúa como

listener puede estar suscrita a eventos,

de varias clases sintácticas, el modelo

no impone restricciones en este

sentido.

Page 30: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 30

El Sistema O2C2. Sistema Generador

Análisis Semántico (III)

Ventajas del modelo

Evita que las acciones semánticas estén mezcladas con los elementos que describen la gramática del lenguaje.

– Se facilita la modularidad del sistema.

– Se mejora el nivel de reconocimiento de los analizadores deterministas que

aplican el tipo de análisis LR.

Permite la reutilización del código semántico.

– Una clase semántica puede estar asociada a varios eventos sintácticos.

– Varias clases semánticas pueden ser utilizadas en diferentes analizadores sintácticos.

– Un grupo de clases de usuario que opera con una estructura sintáctica determinada

puede ser reutilizada en cualquier lenguaje que incluya dicha estructura.

Page 31: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 31

El Sistema O2C2. Sistema Generador

Análisis Semántico (IV)

Un objeto de usuario puede activar o desactivar su suscripción en tiempo de ejecución en función de las circunstancias del análisis.

Una gramática puede ser utilizada con conjuntos de clases de usuario diferentes.

Los compiladores que trabajan con varias pasadas pueden ser desarrollados con facilidad activando o desactivando la suscripción de clases.

Cualquier cambio realizado en la especificación sintáctica no alteraría el contenido semántico de las clases.

Ventajas del modelo (Continuación)

Page 32: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 32

El Sistema O2C2. Sistema Generador

Gestor de Errores (I)

Objetivos

Completo– Detectar todos los errores producidos durante el proceso de análisis.

– Proporcionar mecanismos para la recuperación del sistema.

– Adoptar un tratamiento adecuado.

Fácil de utilizar– Se aplican conceptos ampliamente extendidos para no incrementar el

aprendizaje del sistema.

– El modelo orientado a objetos aplicado se basa en el mecanismo Listener y las

excepciones.

Page 33: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 33

El Sistema O2C2. Sistema Generador

Gestor de Errores (II)

Implementación del modelo

Error

Clases de usuario

Clases generadas por el sistema

(Analizador sintáctico)

Se utiliza una jerarquía de clases para dar tratamiento

a los diferentes errores que puedan producirse

( léxico, sintáctico, semántico, interno, etc).

Cuando se produce una excepción, si el usuario ha

demostrado interés en tratar el error, se cede el control

a las clases suscritas para ese tipo de evento. Si no hay clases

registradas, la excepción sería tratada en otro punto por defecto.

La comunicación de las clases creadas por el usuario con las

clases del sistema se realiza a través de la interfaz Error.

Page 34: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 34

El Sistema O2C2. Sistema Generador

Generación Código Intermedio

Se permite añadir el código necesario, a través de las clases semánticas,

para realizar cualquier tratamiento de la entrada:

– Compilación

– Interpretación

– Traducción

Se ha optado por una solución intermedia entre los generadores totales y

los generadores parciales.

Page 35: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 35

Tesis Doctoral

• Introducción

• Estudio de los Sistemas Relevantes

• Objetivos

• El Sistema O2C2

• Diseño e Implementación del Prototipo– Descripción general

– Implementación

• Creación de clases de usuario

• Incorporación del mecanismo Listeners

• Sistema de suscripciones

• Tratamiento de errores

• Entorno integrado de desarrollo

• Ventajas del Sistema Diseñado y Aplicaciones

• Conclusiones y Líneas de Investigación Futuras

Contenido

Page 36: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 36

Prototipo

Descripción General (I)

Formado por un conjunto de subsistemas.

O2C2

O2C2rt

O2C2ui

O2C2xml

O2C2Conv

O2C2rt. Integra la jerarquía principal de clases de los

frameworks generados por el prototipo. Es la base sobre

la que se construirán frameworks específicos.

O2C2Conv. Completa el framework genérico

proporcionado por el paquete O2C2rt y genera clases para

obtener un analizador sintáctico que se integre con el léxico,

y las clases que tratan el semántico y generación de código.

O2C2. Ofrece la misma funcionalidad que O2C2Conv. Se

utilizó para la construcción de la versión inicial.

O2C2ui. Integra las clases que conforman la interfaz gráfica.

O2C2xml. Contiene las clases que integran el procesador

de lenguaje capaz de reconocer los proyectos usados en

O2C2ui expresados en el lenguaje XML.

Page 37: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 37

Prototipo

Descripción General (II)

Núcleo Núcleo del prototipodel prototipo

Node

void parse()

NodeToken

void parse()

NodeSeqOptional

void parse()

NodeSeq

void parse()

NodeOptional

void parse()

NodeChoice

void parse()

Node. Clase raíz del framework.Todos los elementos de una gramática derivan de esta clase y se convierten en nodos del AST creado.

NodeChoice. Se crea una subclase para tratar las producciones de cada símbolo no terminal.

NodeOptional. Es la superclase de las clases que tratan elementos de la gramática cuya aparición en los programas no es obligatoria.

NodeSeq. Las subclases representan las producciones de los diferentes símbolos no terminales.

NodeSeqOptional. Las subclases representan las repeticiones múltiples de elementos gramaticales.

La existencia de estos elementos es opcional.

NodeToken. No tiene subclases. Representa los tokens del AST generado.

Clases auxiliares

Permiten hacer de interfaz entre el núcleo y el resto de las clases que dependen del lenguaje

Parser

Lexer

Listener

ErrorListener

Page 38: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 38

Prototipo

Implementación (I)

Prototipo O2C2

Metagramática 1 CUP

Analizador Sintáctico Generado por CUP 2

Analizador Léxico Generado por JFlex

Analizador Sintáctico Generado por CUP 2

Framework Específico 3

O2C2

Metagramática (Notación EBNF)

Clases Semánticas

Gramática EBNF

1 Gramática que describe a otras gramáticas en notación EBNF 2 Programa que convierte una gramática en notación EBNF en un

programa (analizador sintáctico). 3 Generador de analizadores sintácticos construido con el prototipo

Page 39: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 39

Prototipo

Implementación (II)

Prototipo

Framework

Generador de

Analizadores Sintácticos

O2C2

JFLEX (externo)

GramáticaEBNF

Tabla de Símbolos

Con la información de la gramática almacenada en la

Tabla de Símbolos, se aplican los algoritmos necesarios

para determinar si cumple la condición LL(1) – Extensible

a LL(k).

Si la gramática cumple dicha condición:– Se generan las clases correspondientes a los distintos

elementos gramaticales y producciones. Pueden descender de

NodeChoice, NodeSeq, NodeOptional, NodeSeqOptional.

Si el elemento es un símbolo terminal se crea una instancia

de NodeToken.

Existe un método único para crear estas clases.

– Se generan las clases auxiliares para dar funcionalidad al

analizador sintáctico generado (Parser, Symb, etc).

Page 40: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 40

Prototipo. Implementación

Creación de clases de usuario

Se estudió la posibilidad de incluir el código para realizar cualquier tratamiento

semántico en las propias clases generadas por el sistema. Este enfoque plantea

varios inconvenientes.

• No facilita la modularidad.

• No permite una separación clara entre el código generado por el sistema

y el código proporcionado por el usuario.

• Un cambio en la especificación sintáctica obligaría a regenerar las clases

de usuario.

• El código añadido a una clase asociada a un elemento de la gramática

no podría utilizarse en otras diferentes.

Page 41: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 41

Prototipo. Implementación

Incorporación del mecanismo Listener

Se basa un la utilización del patrón Listener (conocido también como

patrón Observer).

Consigue que el código proporcionado por el usuario esté incluido en las denominadas

clases Listeners en vez de incluirlo directamente en las clases generadas por el sistema.

Separa la finalidad del propio analizador del tratamiento de los eventos que tienen

lugar cada vez que se identifica una parte de la entrada con una sección gramatical.

Los eventos son generados por las clases del sistema que representan las distintas

secciones de la gramática.

Page 42: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 42

Prototipo. Implementación

Se debe conocer ante qué clases del sistema se tienen que registrar las clases creadas

por el usuario (clases Listeners) para tratar los eventos.

La especificación gramatical estará representada en notación EBNF y podrá incluir

enlaces (nombres entrecomillados) para denotar secciones en la gramática que puedan

dar lugar a eventos que el usuario estaría interesado en escuchar.

El usuario señala únicamente las partes de la gramática que van a recibir tratamiento

semántico dando nombres a las secciones que le interesen. Las clases creadas por el

usuario se tiene que registrar ante las clases que representan dichos enlaces.

Ejemplo de una simple calculadora

<S> ::= <num> <op> <num> "operation" ;

<op> ::= + "addition " | - "subtraction" | * "multiplication" | / "division"

<num> ::= DIGIT {DIGIT} "number" ;

Sistema de suscripciones (I)

S

operation

addition subtraction multiplication

num

number

NodeChoice

void parse()

NodeOptional

void parse()

NodeSeq

void parse()

NodeSeqOptional

void parse()

NodeToken

void parse()

numberEBNF0

multiplicationmultiplication

op

division

Node

void parse()

Page 43: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 43

Prototipo. Implementación

Sistema de suscripciones (II)

Para que las clases Listener puedan ser invocadas cada vez que se produzca un

evento al que el usuario se ha suscrito es necesario que:

Exista un objeto de la clase Listener y en el constructor de esta clase se

encuentre la llamada al método addListener()de la clase a la que se

quiere realizar la suscripción.

Se implemente la interfaz Listener incluyendo el método

performAction(Node n)

Page 44: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 44

Prototipo. Implementación

Sistema de suscripciones (III)

: S : SListener

PerformAction( )

getValue()

setValue( )

user_code( )

Diagrama de colaboración entre una clase Listener y la clase del sistema a la que se suscribe.

Page 45: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 45

Prototipo. Implementación

Tratamiento de errores

Jerarquía de excepciones ParserException

InternalException MismatchedTokenExceptionSemanticException LexerException

El mecanismo de detección, tratamiento y recuperación de errores

está incluido en el subsistema O2C2rt.

El usuario puede crear clases específicas para tratar los errores. Se necesita:

– Implementar la interfaz Errorlistener incluyendo el método

Boolean TreatError (MismatchedTokenException e)

Page 46: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 46

Prototipo. Implementación

Entorno integrado de desarrollo

Integra los procesos de análisis

léxico, sintáctico y semántico.

Permite hacer más fácil e intuitivo

el proceso de creación de

procesadores de lenguaje.

Crea los esqueletos de las

clases Listener de forma automática.

Flexibiliza la estructura de los proyectos

generados permitiendo almacenar los

datos en formato XML.

Page 47: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 47

Prototipo

Implementación

Analizador gramatical de O2C2Conv

Analizador de proyectos XML para O2C2ui

Analizador de producciones de O2C2ui

“ Se ha utilizado el

propio prototipo para

construir cada uno

de los analizadores

que intervienen en la implementación”

Page 48: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 48

Tesis Doctoral

• Introducción

• Estudio de los Sistemas Relevantes

• Objetivos

• El Sistema O2C2

• Diseño e Implementación del Prototipo

• Ventajas del Sistema Diseñado y Aplicaciones

• Conclusiones y Líneas de Investigación Futuras

Contenido

Page 49: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 49

Ventajas y aplicaciones

Ventajas del sistema diseñado (I)

Eficiencia

• Eficiencia de los procesadores de lenguaje generados

En una aplicación consumo de recursos (memoria, procesador) que mantenga.

En un sistema generador ayude al usuario del sistema a ser eficiente.

estrategias

• Eficiencia del sistema propuesto

- Los objetos del framework se inicializan cuando es necesario.

- El texto a analizar nunca está completamente en memoria.

- No es necesario un tratamiento semántico en todas las secciones.

- Modularidad en las aplicaciones generadas.

– Optimización del ciclo de desarrollo del software.

Page 50: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 50

Ventajas y aplicaciones

Ventajas del sistema diseñado (II)

Generador

Yacc

Prog := fun {S$..

fun := ID {$1... }

stmt := ...

Análisis Ascendente

Compilador C

Procesador de Leguaje

Text (text)

Entrada Text xx yyy 0100111

Salida

Ciclo

Especificación

Gramatical

+

Código de Usuario

Parser.c

s,x

s,x

Parser.Java

Sistema

O2C2

Prog := { fun } fun := ID {stmt } stmt := ...

Gramática (EBNF)

Análisis Descendente

class ...

Listeners

O2C2rt (class ...)

Framework

Compilador Java

Procesador de Lenguaje

Text

(text)

Entrada

Text xx yyy 0100111

Salida Ciclo

Page 51: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 51

Ventajas y aplicaciones

Ventajas del sistema diseñado (III)

Robustez

Aceptación

Diseño abierto

- Facilidad de aprendizaje al estar basado en un conjunto uniforme de conceptos.

- Fácil de utilizar.

Permite incorporar

nuevas capacidades

- Operar con analizadores léxicos externos al sistema.

- Modelo que permita al usuario elegir el tipo de análisis.

- Sistema de tipos genérico extendiendo las interfaces.

- Permite integrar la funcionalidad siguiendo el mismo modelo orientado a objetos.

- Elimina barreras adicionales que dificultan su uso.

Page 52: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 52

Ventajas y aplicaciones

Aplicaciones

Plataforma de experimentación

Lenguajes de dominio específicoRealizar diferentes tareas relacionadas con la programación

Analizadores

sintácticos

- Lenguajes de programación.

- Lenguajes de marcas (HTML, XML, ...)

- Formatos de ficheros y estándar comerciales (IDL, ODL, ...)

- Lenguajes de bases de datos y modelado (SQL, VRML, ...)

- Lenguajes de propósito especial, protocolos (http, ftp, ...)

- Permite la descripción de diferentes definiciones formales de lenguajes de

programación usando la generación automática de procesadores de lenguaje

de una forma simple y rápida.

- Soporte en el plano educacional y comercial.

Page 53: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 53

Tesis Doctoral

• Introducción

• Estudio de los Sistemas Relevantes

• Objetivos

• El Sistema O2C2

• Diseño e Implementación del Prototipo

• Ventajas del Sistema Diseñado y Aplicaciones

• Conclusiones y Líneas de Investigación Futuras

Contenido

Page 54: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 54

Conclusiones

Características (I)

Modularidad Al separar las especificaciones del código semántico se logra

encapsular los detalles de la implementación ayudando a entender

y manejar mejor las aplicaciones.

Al separar las especificaciones del código semántico se logra

encapsular los detalles de la implementación ayudando a entender

y manejar mejor las aplicaciones.

Extensibilidadad La organización del sistema como un conjunto de clases

permite que se puedan extender para adaptar su comportamiento

a las nuevas condiciones requeridas por una aplicación.

La organización del sistema como un conjunto de clases

permite que se puedan extender para adaptar su comportamiento

a las nuevas condiciones requeridas por una aplicación.

Reusabilidad Se consigue a través de la extensibilidad, reutilizando el propio

código de las clases.

Se consigue a través de la extensibilidad, reutilizando el propio

código de las clases.

Mantenimiento Permite modificar las aplicaciones añadiendo o quitando

funcionalidad.

Permite modificar las aplicaciones añadiendo o quitando

funcionalidad.

Page 55: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 55

Conclusiones

Características (II)

Soporte para el diseño e implementación de lenguajes

Ciclo de

desarrollo cortoPermite comprender mejor la estructura y el código de las

aplicaciones generadas disminuyendo su complejidad.

Permite comprender mejor la estructura y el código de las

aplicaciones generadas disminuyendo su complejidad.

Entorno visual Integra de forma sencilla e intuitiva toda la funcionalidad

proporcionada por el sistema.

Integra de forma sencilla e intuitiva toda la funcionalidad

proporcionada por el sistema.

Integración flexible La funcionalidad del sistema puede ser proporcionada en

forma de API. Así las aplicaciones clientes podrán

interactuar con el sistema desde diferentes entornos de

desarrollo.

La funcionalidad del sistema puede ser proporcionada en

forma de API. Así las aplicaciones clientes podrán

interactuar con el sistema desde diferentes entornos de

desarrollo.

Page 56: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 56

Conclusiones

Resultados destacables (I)

Utilidad

Facilidad de aprendizaje

Eficiencia

– Pensado para dar solución a diversas tareas relacionadas con la programación.

– Genera procesadores basados en jerarquías de clases, adaptados para ser la base

de aplicaciones grandes y complejas.

– Sistema basado en un pequeño grupo de conceptos.

– Permite realizar de una forma cómoda y eficiente el trabajo de desarrollar

un procesador de lenguaje.

Page 57: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 57

Conclusiones

Resultados destacables (II)

Errores

Satisfacción

Retención de ideas

– Permite añadir código especializado para conseguir aplicaciones tolerantes a fallos.

– Detecta los errores producidos facilitando su localización y corrección.

– Las especificaciones son simples, el comportamiento del propio sistema y de los

procesadores generados en fácil de entender y los conceptos que usa son conocidos.

– La abstracción proporcionada por el sistema es adecuada. Libera al usuario de tener que tratar con muchos datos de forma simultánea y ocuparse de muchos detalles.

Page 58: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 58

Conclusiones Comparación cualitativa

Accent N N N N N N P N

Antlr N N N N N N P S

Cocktail N N N N N N P P

Eli P P P P N N S P

Gentle N N N N N N P N

JavaCC N N N N N N P S

Lemon N N N N N N P N

Lex/Yacc N N N N N N P N

ProGrammar P P P S S S P P

SableCC P P P S S N P N

Spirit N P P P N N P N

Sistema O2C2 S S S S S S P S

Generador deProcesadoresde Lenguajes M

odul

arid

adR

eusa

bilid

adE

xten

sibi

lidad

Man

teni

nim

ient

o

Cic

lo d

ede

sarr

ollo

cort

o

Gen

erad

or to

tal

Ent

orno

vis

ual

de d

esar

rollo

Tra

tam

ient

o de

erro

res

efic

az

Page 59: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 59

Incorporación del resto de funcionalidades al sistema.

Generalización del tipo de análisis.

Mejora en el entorno visual de desarrollo.

Implementación de un sistema de tipos.

Sistema de prototipado de lenguajes.

Conclusiones

Líneas de investigación futuras

Page 60: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 60

Luengo Díez M. Cándida. Diseño y construcción de Procesadores de Lenguaje Orientados a Objetos. II Jornadas sobre Tecnologías Orientadas a Objetos. Oviedo, 1996.

Luengo Díez M. C., Labra Gayo J. E., Dominguez Mateos F., Pérez Díaz A., García Fernández N., Cueva Lovelle J. M. Desarrollo de Compiladores en un Sistema Integral Orientado a Objetos. V Congreso Internacional de Investigación en Ciencias Computacionales CIICC´98. Mexico, Noviembre 1998.

Basanta D., Luengo M.C., Izquierdo R., Labra J. E., Cueva J. M. Constructing Language Processors using Object-Oriented Techniques. 6th International Conference on Object Oriented Information Systems (OOIS 2000). London-UK, Diciembre 2000.

D. Basanta, M.C. Luengo, R. Izquierdo, J.E. Labra, J.M. Cueva. Improving the

quality of compiler construction with object-oriented techniques. ACM SIGPLAN. Volumen 35, Número 12. Pág. 41-51. Diciembre 2000.

Conclusiones

Publicaciones derivadas (I)

Page 61: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 61

Luengo M.C., Labra J. E., Cueva J.M., García N., Basanta D. Building Compiler Tools using Frameworks. SISOFT 2001: Simposio Iberoamericano de Sistemas de Información e Ingeniería de Software en la Sociedad del Conocimiento. Bogota – Colombia, Agosto 2001.

Luengo M. C., Cueva J.M., Labra J. E., García N., Basanta D. Applying Frameworks and Object-Oriented Techniques for developing Language Processors Tools. Primeras Jornadas sobre Programación y Lenguajes. Almagro – Ciudad Real, Noviembre 2001.

Luengo M. C., Labra J. E., García N., Cueva J. M, Basanta D. O2C2: A Framework Generator for Object-Oriented Language Processors Development . 4 – Volume books on Software Architectures, PLAS, Components and Enterprise Framework (Pendiente de aceptación)http://www.cse.unl.edu/~fayad/Books/NewBooks/scripts/user/chapters.php3

Conclusiones

Publicaciones derivadas (II)

Page 62: María Cándida Luengo Díez Director:  Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 62

Desarrollo y Evaluación de Técnicas de Construcción de Procesadores de Lenguaje

para Máquinas Abstractas Orientadas a Objetos

Fin de la Exposición

(c) María Cándida Luengo Díez

Junio 2002

Tesis Doctoral

Universidad de Oviedo - Departamento de Informática