Title: Desarrollo y Evaluaci
1Desarrollo y Evaluación de Técnicas de
Construcción de Procesadores de Lenguaje para
Máquinas Abstractas Orientadas a Objetos
Universidad de Oviedo - Departamento de
Informática
Tesis Doctoral
- María Cándida Luengo Díez
- Director Dr. Juan Manuel Cueva Lovelle
2Tesis Doctoral
Contenido
?
- 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
3IntroducciónGeneradores 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
- Fácil de leer, aprender y usar
- Integrado
Metalenguaje
- Construcciones sencillas
Características
- Robusto
Funcionalidad
- Eficiente
- Extensible
Documentación
- Permite la descripción del sistema generador
4IntroducciónGeneradores de Procesadores
Estructura
Generador de Procesadores
Metalenguaje
Tiempo de generación
Tiempo de ejecución
Procesador (Total/Parcial)
Programa Fuente
Programa Objeto
Tiempo de compilación
5IntroducciónGeneradores de Procesadores
Clasificación
Metalenguajes
Expresiones regulares
Gramáticas Atribuidas
Gramáticas libres de contexto
Descripción del Código Intermedio y Código
Máquina
Generador de Analizadores Sintácticos
Generador de Analizadores Léxicos
Generador de Analizadores Semánticos
Generador de Generadores de Código
Generador Fase de Análisis
Fase de Análisis
Analizador Léxico
Analizador Sintáctico
Analizador Semántico
Optimizador
Generación de código
Código Intermedio
Programa Objeto
Tokens
Programa Fuente
Árbol Sintáctico
6Tesis Doctoral
Contenido
- 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
?
7EstudioEstudio de los sistemas relevantes
Nombre Tipo Análisis Leguaje Generado Tratamiento 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
8Estudio 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.
9Estudio Problemática con los sistemas actuales
(II)
- 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.
- 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.
10Estudio
Inconvenientes 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.
11Estudio
Solución
- 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.
- El sistema tendrá una estructura modular, en
la cual determinados componentes podrán ser
identificados y reutilizados.
Beneficios
- 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.
12Tesis Doctoral
Contenido
- 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
?
13Objetivos
Objetivos Fundamentales
- 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.
14Objetivos
Objetivos Relativos a la Construcción (I)
- 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.
15Objetivos
Objetivos Relativos a la Construcción (II)
- 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.
- 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.
- 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.
16Tesis Doctoral
Contenido
- 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
?
17El Sistema O2C2
Arquitectura
18El Sistema O2C2
Funcionalidad proporcionada
Entorno Visual
- 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.
Sistema Generador
- 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.
19El Sistema O2C2. Funcionalidad
Entorno visual (I)
- Características del entorno
Dar a conocer lo que sucede en todo momento en el
sistema
- Concisión en la representación
En las opciones y en la información al usuario
- Adaptabilidad y tutorialidad
En las preferencias y el contexto actual
Proporcionar toda la funcionalidad del sistema
- Soporte de diferentes niveles de abstracción
En la visualización
- Independencia en las acciones
Funciones y semántica coherente en cada
situación.
Un solo entorno para el análisis léxico,
sintáctico y semántico
- Soporte para el desarrollo
Flexibilizar la estructura de los proyectos
20El Sistema O2C2. Funcionalidad
Entorno visual (II)
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.
Editor
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.
Depurador
Permitir detectar y corregir fácilmente los
errores producidos.
Visualizador
Conocer los datos, las estructuras internas y los
objetos que forman el AST.
21El Sistema O2C2. Funcionalidad
Sistema Generador (I)
Análisis Sintáctico
- Análisis Léxico
- Análisis Sintáctico
- Análisis Semántico
- Gestor de errores
- Gen. Código Intermedio
Análisis Léxico
Análisis Semántico
Gestor de errores
Generación Código Intermedio
- Optimización de código Intermedio
- Generación de Código
22El 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
23El Sistema O2C2. Sistema Generador
Análisis Léxico (II)
Modelo Orientado a Objetos
Framework Genérico
- La comunicación entre las clases del framework
y las - clases de usuario se realiza a través de la
interfaz Lexer.
Lexer
- Los objetos pueden reconocer los distintos
símbolos - del lenguaje (identificadores, cadenas, etc).
Scanner
Input
Scan
Interfaz del framework
- Se seleccionan los objetos para realizar un
- análisis específico sin preocuparse del
- reconocimiento llevado a cabo de forma
individual.
Proporciona los caracteres de la entrada
Organiza los objetos Scan
Clase abstracta de los objetos reconocedores
- El usuario puede extenderlos o incorporar
- otros objetos diferentes.
24El Sistema O2C2. Sistema Generador
Análisis Léxico (III)
Reconocimiento
Objetos marcados
Objetos Scan
Caracteres de entrada
...
El objeto Scanner invoca al método yylex() del
objeto suscrito para realizar la acción
correspondiente
Objeto que reconoce la secuencia más larga
- Si existen varios objetos se elige el primero
que se haya localizado.
- 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.
25El 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.
26El Sistema O2C2. Sistema Generador
Análisis Sintáctico (I)
Modelo Orientado a Objetos
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.
27El Sistema O2C2. Sistema Generador
Análisis Sintáctico (II)
Análisis
Parser
Error
Listener
Interfaces del framework
- 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.
Gramática en notación EBNF
Tipo de análisis
Analizador sintáctico
- - Ascendente
- Descendente
- No determinista
28El Sistema O2C2. Sistema Generador
Análisis Semántico (I)
Clases generadas por el sistema
Modelo Orientado a Objetos
- 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.
Listener
(Analizador sintáctico)
- 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.
Clases de usuario
29El Sistema O2C2. Sistema Generador
Análisis Semántico (II)
- 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.
30El 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.
31El Sistema O2C2. Sistema Generador
Análisis Semántico (IV)
Ventajas del modelo (Continuación)
- Una gramática puede ser utilizada con
conjuntos de clases de usuario - diferentes.
- 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.
- Cualquier cambio realizado en la
especificación sintáctica no alteraría el - contenido semántico de las clases.
- Los compiladores que trabajan con varias
pasadas pueden ser desarrollados - con facilidad activando o desactivando la
suscripción de clases.
32El 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.
33El Sistema O2C2. Sistema Generador
Gestor de Errores (II)
Implementación del modelo
Clases generadas por el sistema
- 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).
Error
- 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.
(Analizador sintáctico)
- La comunicación de las clases creadas por el
usuario con las - clases del sistema se realiza a través de la
interfaz Error.
Clases de usuario
34El Sistema O2C2. Sistema Generador
Generación Código Intermedio
- Se ha optado por una solución intermedia entre
los generadores totales y - los generadores parciales.
- 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
35Tesis Doctoral
Contenido
- 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
?
36Prototipo
Descripción General (I)
Formado por un conjunto de subsistemas.
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.
O2C2rt
O2C2xml
O2C2
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.
O2C2Conv
O2C2xml. Contiene las clases que integran el
procesador de lenguaje capaz de reconocer los
proyectos usados en O2C2ui expresados en el
lenguaje XML.
O2C2ui
37Prototipo
Descripción General (II)
Node
void parse()
Núcleo del prototipo
NodeToken
NodeSeqOptional
NodeSeq
NodeOptional
NodeChoice
void parse()
void parse()
void parse()
void parse()
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.
Clases auxiliares Permiten hacer de
interfaz entre el núcleo y el resto de las clases
que dependen del lenguaje
Parser Lexer Listener
ErrorListener
- 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.
38Prototipo
Implementación (I)
Analizador Sintáctico
Metagramática
CUP
1
2
Generado por CUP
Gramática
Prototipo O2C2
EBNF
Analizador Léxico
Metagramática
Framework
Generado por JFlex
(Notación EBNF)
3
Específico
O2C2
Å
Analizador Sintáctico
2
Generado por CUP
Clases
Semánticas
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
39Prototipo
Implementación (II)
Prototipo
- 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).
Framework
O2C2
Generador de Analizadores Sintácticos
- 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).
JFLEX (externo)
Gramática
EBNF
Tabla de Símbolos
40Prototipo. 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.
41Prototipo. 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.
42Prototipo. Implementación
Sistema de suscripciones (I)
- 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.
43Prototipo. 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)
44Prototipo. Implementación
Sistema de suscripciones (III)
Diagrama de colaboración entre una clase Listener
y la clase del sistema a la que se suscribe.
S
SListener
45Prototipo. Implementación
Tratamiento de errores
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)
Jerarquía de excepciones
46Prototipo. Implementación
Entorno integrado de desarrollo
Permite hacer más fácil e intuitivo el proceso de
creación de procesadores de lenguaje.
Integra los procesos de análisis léxico,
sintáctico y semántico.
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.
47Prototipo
Implementación
Se ha utilizado el propio prototipo
para construir cada uno de los analizadores que
intervienen en la implementación
48Tesis Doctoral
Contenido
- 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
?
49Ventajas y aplicaciones
Ventajas del sistema diseñado (I)
Eficiencia
En una aplicación consumo de recursos
(memoria, procesador) que mantenga.
En un sistema generador ayude al usuario
del sistema a ser eficiente.
- Eficiencia de los procesadores de lenguaje
generados
- 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.
estrategias
- Eficiencia del sistema propuesto
- Optimización del ciclo de desarrollo del
software.
50Ventajas y aplicaciones
Ventajas del sistema diseñado (II)
Especificación Gramatical
Análisis Descendente
Gramática (EBNF)
Código de Usuario
Sistema
Prog fun
O2C2
fun ID stmt
Prog fun S..
stmt ...
Generador
Análisis Ascendente
fun ID 1...
stmt ...
Yacc
Parser.Java
Listeners
Framework
s,x
class ...
...)
O2C2rt (class
Ciclo
s,x
Parser.c
Ciclo
Salida
Compilador
Java
Entrada
Salida
Text
Compilador C
xx yyy
Entrada
Text
Text
0100111
xx yyy
Text
(text)
0100111
Procesador de
(text)
Procesador de
Lenguaje
Leguaje
51Ventajas y aplicaciones
Ventajas del sistema diseñado (III)
Robustez
- Permite integrar la funcionalidad siguiendo el
mismo modelo orientado a objetos. - Elimina barreras adicionales que dificultan su
uso.
Aceptación
- Facilidad de aprendizaje al estar basado en un
conjunto uniforme de conceptos. - Fácil de utilizar.
Diseño abierto
- 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 incorporar nuevas capacidades
52Ventajas y aplicaciones
Aplicaciones
Plataforma de experimentación
- 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.
Lenguajes de dominio específico
Realizar diferentes tareas relacionadas con la
programación
- 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, ...)
Analizadores sintácticos
53Tesis Doctoral
Contenido
- 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
?
54Conclusiones
Características (I)
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.
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.
Se consigue a través de la extensibilidad,
reutilizando el propio código de las clases.
Permite modificar las aplicaciones añadiendo o
quitando funcionalidad.
55Conclusiones
Características (II)
- Ciclo de
- desarrollo corto
Permite comprender mejor la estructura y el
código de las aplicaciones generadas disminuyendo
su complejidad.
Integra de forma sencilla e intuitiva toda la
funcionalidad proporcionada por el sistema.
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.
- Soporte para el diseño e implementación de
lenguajes
56Conclusiones
Resultados destacables (I)
Utilidad
- 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.
Facilidad de aprendizaje
- Sistema basado en un pequeño grupo de
conceptos.
Eficiencia
- Permite realizar de una forma cómoda y
eficiente el trabajo de desarrollar - un procesador de lenguaje.
57Conclusiones
Resultados destacables (II)
Errores
- Permite añadir código especializado para
conseguir aplicaciones tolerantes a fallos. - Detecta los errores producidos facilitando su
localización y corrección.
Satisfacció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.
Retención de ideas
- 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.
58Conclusiones
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 de Procesadores de Lenguajes
Ciclo de desarrollo corto
Tratamiento de errores eficaz
Entorno visual de desarrollo
Manteninimiento
Extensibilidad
Generador total
Modularidad
Reusabilidad
59Conclusiones
Líneas de investigación futuras
- 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.
60Conclusiones
Publicaciones derivadas (I)
- 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 CIICC98. 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.
61Conclusiones
Publicaciones derivadas (II)
- 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/scri
pts/user/chapters.php3
62Desarrollo y Evaluación de Técnicas de
Construcción de Procesadores de Lenguaje para
Máquinas Abstractas Orientadas a Objetos
Universidad de Oviedo - Departamento de
Informática
Tesis Doctoral
- Fin de la Exposición
- (c) María Cándida Luengo Díez
- Junio 2002