tesis doctoral 1 desarrollo y evaluación de técnicas de construcción de procesadores de lenguaje...
Post on 12-Jan-2015
0 Views
Preview:
TRANSCRIPT
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
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
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
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
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
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
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
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.
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.
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.
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.
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
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
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)
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)
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
Tesis Doctoral 17
El Sistema O2C2
Arquitectura
Metalenguaje
Sistema Generadorde
Procesadores de Lenguajes
Acciones Semánticas
Procesadorde
Lenguaje
Entorno Visual
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.
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
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.
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
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
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.
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.
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.
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.
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
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)
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.
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.
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)
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.
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.
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.
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
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.
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
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
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).
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.
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.
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()
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)
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.
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)
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.
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”
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
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.
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
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.
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.
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
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.
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.
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.
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.
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
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
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)
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)
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
top related