Vous êtes sur la page 1sur 62

Universidad de Oviedo - Departamento de Informtica

Tesis Doctoral
Desarrollo y Evaluacin de Tcnicas de
Construccin de Procesadores de
Lenguaje para Mquinas Abstractas
Orientadas a Objetos
Mara Cndida Luengo Dez
Director: Dr. Juan Manuel Cueva Lovelle

Tesis Doctoral 1

Tesis Doctoral

Contenido

Introduccin
Estudio de los Sistemas Relevantes
Objetivos
El Sistema O2C2
Diseo e Implementacin del Prototipo
Ventajas del Sistema Diseado y Aplicaciones
Conclusiones y Lneas de Investigacin Futuras
Tesis Doctoral 2

Introduccin

Generadores de Procesadores: Caractersticas

Un Procesador de Lenguaje es una funcin 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 especificacin en un procesador para el lenguaje de
programacin descrito en la especificacin [GH98]
Metalenguaje

Caractersticas

Funcionalidad

- Fcil de leer, aprender y usar


- Integrado
- Construcciones sencillas
- Robusto
- Eficiente
- Extensible

Documentacin - Permite la descripcin del sistema generador

Tesis Doctoral 3

Introduccin

Generadores de Procesadores: Estructura


Metalenguaje

Generador de
Procesadores
Tiempo de
generacin

Programa
Fuente

Procesador
Procesador
(Total/Parcial)
(Total/Parcial)

Tiempo de
ejecucin

Programa
Objeto
Tiempo de
compilacin

Tesis Doctoral 4

Introduccin

Generadores de Procesadores: Clasificacin


Metalenguajes
Expresiones
regulares

Generador de
Analizadores
Lxicos

Gramticas
libres de contexto

Gramticas
Atribuidas

Generador de
Analizadores
Sintcticos

Descripcin del
Cdigo Intermedio y
Cdigo Mquina

Generador de
Analizadores
Semnticos

Generador de
Generadores de
Cdigo

Generador Fase de Anlisis

Fase de Anlisis
Analizador
Lxico

Programa
Fuente

Analizador
Sintctico

Tokens

Analizador
Semntico

rbol
Sintctico

Optimizador
Optimizador

Generacin
Generacin de
de
cdigo
cdigo

Cdigo
Intermedio

Programa
Objeto

Tesis Doctoral 5

Tesis Doctoral

Contenido
Introduccin

Estudio de los Sistemas Relevantes


Objetivos
El Sistema O2C2
Diseo e Implementacin del Prototipo
Ventajas del Sistema Diseado y Aplicaciones
Conclusiones y Lneas de Investigacin Futuras

Tesis Doctoral 6

Estudio

Estudio de los sistemas relevantes


Nombre

Tipo
Anlisis

Leguaje
Generado

Tratamiento
de Errores

Especificaciones

Caractersticas
Destacables

Lex/Yacc

LALR(1)

Malo

BNF / C

- Falta integracin A. Lxico y Sintctico


- No genera ASTs
- Ciclo de desarrollo largo

Lemon

LALR(1)

Malo

BNF / C

- Misma estructura y modo de operar de


Yacc

Accent

AE/AP

Malo

BNF / C

- Ciclo de desarrollo largo


- No genera ASTs

Cocktail

LALR(1)
LL(1)

C
Mdulo-2

Regular

BNF / C o Mdula-2

- Ciclo de desarrollo largo


- Falta integracin A. Lxico y Sintctico
- Caractersticas de los generadores clsicos

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)

Regular

Esp. Declarativas

- Conjunto amplio de especificaciones


- Falta de uniformidad en las especificac.

Gentle

LALR(1)

Malo

Esp. Alto Nivel

- Aade una capa ms de especificaciones


- Utiliza internamente Lex/Yacc

Spirit

LL-ND

C++

Malo

Esp. en C++

- Tcnica Template metaprogramming


para generar analizadores sintcticos

Tesis Doctoral 7

Estudio

Problemtica con los sistemas actuales (I)


Mezcla de especificaciones y acciones semnticas
Dificulta la legibilidad y mantenimiento de cdigo.
Incrementa la complejidad ya que es ms difcil comprender la
estructura y el sentido de una especificacin gramatical.

Reusabilidad
El hecho de que se mezclen las especificaciones sintcticas y semnticas
(a veces tambin lxicas) hace que sean muy poco reutilizables.

Se dificulta la incorporacin de nuevas caractersticas a un determinado lenguaje.


Extenderlo requerira realizar muchas adaptaciones.

Extensibilidad
La construccin de un procesador exige casi siempre empezar de cero. No
existen mecanismos que permitan aprovechar parte de la implementaciones
existentes para extenderlas con nuevas caractersticas.

Tesis Doctoral 8

Estudio

Problemtica con los sistemas actuales (II)


Modularidad
Existen muchas interdependencias. Es necesario realizar cambios en la
especificacin aunque no cambie la gramtica.

Cualquier cambio realizado en el cdigo 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 duplicacin del cdigo 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
construccin de procesadores con el menor esfuerzo posible.

No se integran de manera sencilla en los diferentes entornos de desarrollo de


aplicaciones.

Tesis Doctoral 9

Inconvenientes Derivados

Estudio

Limitan su funcionalidad ofreciendo diferentes opciones

y aadiendo complejidad en las especificaciones de entrada.

Analizadores generados difciles de depurar.


El ciclo de desarrollo es largo.
Falta de integracin entre las herramientas y en los

denominados entornos de desarrollo.

Uso no intuitivo.

Tesis Doctoral 10

Estudio

Solucin
Construccin de un sistema en el que se apliquen los principios de
diseo e implantacin del paradigma de orientacin a objetos
integrando Frameworks y Patrones como mtodos de diseo.
El sistema tendr una estructura modular, en la cual
determinados componentes podrn ser identificados y
reutilizados.

Beneficios

El sistema podr ser configurado mediante la extensibilidad


para unas necesidades especficas, asegurando nuevas
caractersticas y servicios o para cumplir determinadas
restricciones. De esta forma se facilita el mantenimiento.

Tesis Doctoral 11

Tesis Doctoral

Contenido
Introduccin
Estudio de los Sistemas Relevantes

Objetivos
El Sistema O2C2
Diseo e Implementacin del Prototipo
Ventajas del Sistema Diseado y Aplicaciones
Conclusiones y Lneas de Investigacin Futuras

Tesis Doctoral 12

Objetivos

Objetivos Fundamentales
Descripcin de un sistema de soporte en la construccin de
procesadores de lenguaje, que facilite el desarrollo e implementacin
de los lenguajes de programacin, y la reutilizacin de diferentes tareas
relacionadas con la programacin de una forma rpida y sencilla.
Aplicacin de Tecnologas Orientadas a Objetos basadas en Frameworks
para la construccin de Generadores de Procesadores de Lenguajes.
Empleo de un modelo de objetos uniforme y homogneo, para
estructurar la funcionalidad del sistema.
Valoracin cualitativa del modelo diseado y las principales tcnicas
utilizadas para la construccin de procesadores de lenguajes.

Tesis Doctoral 13

Objetivos

Objetivos Relativos a la Construccin (I)


Incorporar Tcnicas Orientadas a Objetos
Los objetos proporcionan modularidad y encapsulacin.

Los sistemas son ms fciles de reutilizar, extender y mantener.


La comunicacin entre los distintos grupos de objetos se puede realizar
a travs de las interfaces ofrecidas por los frameworks.

Metalenguaje sencillo
Fcil de aprender y de utilizar.

Integrado con las diferentes notaciones


No permita cometer errores fcilmente.

Tratamiento y recuperacin de errores


Permitir que los usuarios puedan localizar y corregir los errores.

Incorporar cdigo especializado para el tratamiento de los errores.


Permitir que el sistema se recupere y pueda seguir su proceso.

Generacin de AST

Tesis Doctoral 14

Objetivos

Objetivos Relativos a la Construccin (II)


Usabilidad
Incorpore un nivel de abstraccin adecuado para la retencin de ideas.

Sea fcil de utilizar.


Ofrezca un buen grado de satisfaccin por parte del usuario.

Entorno visual de desarrollo


Incorpore un conjunto de herramientas para facilitar el desarrollo rpido de

aplicaciones sin demasiado esfuerzo, automatizando todo lo posible el proceso de


construccin de procesadores de lenguajes.

Permita que las distintas herramientas que integran el sistema puedan interactuar
sin la intervencin del usuario.

Plataforma de desarrollo
Soporte a la experimentacin .

Permita la portabilidad de las aplicaciones.


Sea flexible para conseguir que la funcionalidad del sistema est disponible en
forma de API.

Tesis Doctoral 15

Tesis Doctoral

Contenido

Introduccin

Estudio de los Sistemas Relevantes

Objetivos

El Sistema O2C2
Arquitectura
Funcionalidad proporcionada

Diseo e Implementacin del Prototipo

Ventajas del Sistema Diseado y Aplicaciones

Conclusiones y Lneas de Investigacin Futuras

Tesis Doctoral 16

El Sistema O2C2

Arquitectura
Entorno Visual

Metalenguaje

Acciones
Semnticas

Sistema Generador
de
Procesadores de Lenguajes

Procesador
de
Lenguaje

Tesis Doctoral 17

El Sistema O2C2

Funcionalidad proporcionada
Entorno Visual
Proporcionar una interfaz usable y completa.
Permitir una interaccin eficiente con el sistema generador.
Incorporar un conjunto de herramientas que faciliten las tareas de
desarrollo.

Sistema Generador
Transformar el metalenguaje y las acciones semnticas en un procesador de
lenguaje.
Integrar y encapsular las fases de construccin para facilitar el desarrollo de
las aplicaciones.

Tesis Doctoral 18

El Sistema O2C2. Funcionalidad

Entorno visual (I)

Caractersticas del entorno


Transparencia

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

Concisin en la representacin
Adaptabilidad y tutorialidad
Completitud funcional

En las opciones y en la informacin al usuario


En las preferencias y el contexto actual

Proporcionar toda la funcionalidad del sistema

Soporte de diferentes niveles de abstraccin

En la visualizacin

Independencia en las acciones


Integracin

Funciones y semntica coherente en cada


situacin.
Un solo entorno para el anlisis lxico, sintctico y semntico

Soporte para el desarrollo

Flexibilizar la estructura de los proyectos

Tesis Doctoral 19

El Sistema O2C2. Funcionalidad

Entorno visual (II)

Funcionalidad Bsica
Definir el conjunto de reglas de la especificacin gramatical
y comprobar su adecuacin en base al tipo de anlisis.

Editor

Definir el conjunto de tokens que conforman el lxico del lenguaje.


Establecer las acciones semnticas asociadas a las secciones gramaticales.
Incorporar un mdulo de definicin de clases de forma que una clase
descrita visualmente tenga su descripcin textual y viceversa.

Depurador
Visualizador

Permitir detectar y corregir fcilmente los errores producidos.


Conocer los datos, las estructuras internas y los objetos que
forman el AST.

Tesis Doctoral 20

El Sistema O2C2. Funcionalidad

Sistema Generador (I)


Mdulos bsicos
Anlisis Sintctico

Anlisis Lxico
Anlisis Sintctico
Anlisis Semntico
Gestor de errores
Gen. Cdigo Intermedio

Mdulos adicionales

Anlisis
Lxico

Gestor de
errores

Anlisis
Semntico

Generacin
Cdigo
Intermedio

Optimizacin de cdigo Intermedio


Generacin de Cdigo

Tesis Doctoral 21

El Sistema O2C2. Sistema Generador

Anlisis Lxico (I)


Problemtica
El uso de expresiones regulares oscurece el formato de los
smbolos tratados dificultando su entendimiento.
Algunos problemas de reconocimiento son difciles de resolver
usando expresiones regulares.
El ciclo de desarrollo edicin, generacin y compilacin debe
ser repetido para corregir, cambiar o extender el analizador lxico

Tesis Doctoral 22

El Sistema O2C2. Sistema Generador

Anlisis Lxico (II)


Modelo Orientado a Objetos

Framework Genrico

La comunicacin entre las clases del framework y las


clases de usuario se realiza a travs de la interfaz Lexer.

Los objetos pueden reconocer los distintos smbolos


del lenguaje (identificadores, cadenas, etc).

Se seleccionan los objetos para realizar un


anlisis especfico sin preocuparse del
reconocimiento llevado a cabo de forma individual.

El usuario puede extenderlos o incorporar

Lexer

Interfaz del
framework

Scanner

Input
Scan
Proporciona los
caracteres de
la entrada

Organiza los
objetos Scan
Clase abstracta
de los objetos
reconocedores

otros objetos diferentes.

Tesis Doctoral 23

El Sistema O2C2. Sistema Generador

Anlisis Lxico (III)


Reconocimiento

Objetos marcados

Objetos Scan
Caracteres
de entrada

...

El objeto Scanner invoca al mtodo yylex() del objeto


suscrito para realizar la accin correspondiente

Objeto que reconoce


la secuencia ms larga

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


Para optimizar la bsqueda del objeto ganador se indexa esta bsqueda

por el primer carcter del smbolo ya que es significativo de su tipo.

Tesis Doctoral 24

El Sistema O2C2. Sistema Generador

Anlisis Lxico (IV)


Ventajas del modelo
Los objetos encapsulan su estado simplificando el reconocimiento individual.
Permite la creacin de clases que pueden ser usadas para especializar a otras
existentes sin necesidad de acceder al cdigo fuente.
Las clases pueden ser utilizadas por diferentes analizadores lxicos.
Los objetos que representan las distintas acciones pueden ser reemplazados
en un momento determinado por otros diferentes para atender otras necesidades.

Tesis Doctoral 25

El Sistema O2C2. Sistema Generador

Anlisis Sintctico (I)


Modelo Orientado a Objetos
Framework
Clases que conforman el ncleo del framework.
Son clases comunes a todos los frameworks generados
por el sistema.
La jerarqua de clases opera con los diferentes elementos
que forman parte de la descripcin de una gramtica.

Clases que completan al ncleo e incorporan


caractersticas especficas del lenguaje.
Se genera una clase para cada elemento no terminal,
para cada produccin y elemento de tipo EBNF.
Las clases son descendientes de las interfaces y clases
que componen el ncleo del framework.

Tesis Doctoral 26

El Sistema O2C2. Sistema Generador

Anlisis Sintctico (II)


Anlisis

Error

Listener

Parser

Interfaces del
framework

La utiliza el ncleo del sistema para

manejar la clase principal del


analizador sintctico generado.

Gramtica en
notacin EBNF

Debe ser implementada por todos los


procesadores de lenguaje generados.
El mtodo parser() inicializa el proceso
de anlisis.
Tipo de anlisis
- Ascendente
- Descendente
- No determinista

Analizador sintctico

Se encarga de inicializar objetos antes

de comenzar el anlisis sintctico.

Tesis Doctoral 27

El Sistema O2C2. Sistema Generador

Anlisis Semntico (I)


Modelo Orientado a Objetos

Clases generadas por el sistema

Las clases con el cdigo semntico necesario

para completar el procesador de lenguaje


generado, estarn separadas de las clases
generadas por el sistema.

Listener

(Analizador sintctico)

La comunicacin con las clases sintcticas se

realiza a travs de la interfaz Listener.


La clases de usuario actan como listeners y se deben
suscribir ante ciertas clases sintcticas para que sean notificadas
al reconocer determinadas secciones gramaticales.

Clases de usuario

Tesis Doctoral 28

El Sistema O2C2. Sistema Generador

Anlisis Semntico (II)


Cada vez que se produce un evento,
el objeto fuente invoca un mtodo
con el objeto listener para que pueda
realizar el tratamiento correspondiente.
Una clase sintctica puede tener
varias clases de usuario suscritas y
una misma clase que acta como
listener puede estar suscrita a
eventos,
de varias clases sintcticas, el modelo
no impone restricciones en este
sentido.

Los eventos son transmitidos


solamente a los listener registrados

Objeto Fuente
Listener 1
Listener 2
Listener 3

Listener 1
Listener 2
Listener 3

Listener 4

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

Evento no transmitido al
listener 4

Tesis Doctoral 29

El Sistema O2C2. Sistema Generador

Anlisis Semntico (III)


Ventajas del modelo
Evita que las acciones semnticas estn mezcladas con los elementos
que describen la gramtica del lenguaje.
Se facilita la modularidad del sistema.
Se mejora el nivel de reconocimiento de los analizadores deterministas que
aplican el tipo de anlisis LR.

Permite la reutilizacin del cdigo semntico.


Una clase semntica puede estar asociada a varios eventos sintcticos.
Varias clases semnticas pueden ser utilizadas en diferentes analizadores sintcticos.
Un grupo de clases de usuario que opera con una estructura sintctica determinada
puede ser reutilizada en cualquier lenguaje que incluya dicha estructura.

Tesis Doctoral 30

El Sistema O2C2. Sistema Generador

Anlisis Semntico (IV)


Ventajas del modelo (Continuacin)
Una gramtica puede ser utilizada con conjuntos de clases de usuario
diferentes.
Un objeto de usuario puede activar o desactivar su suscripcin en tiempo
de ejecucin en funcin de las circunstancias del anlisis.
Cualquier cambio realizado en la especificacin sintctica no alterara el
contenido semntico de las clases.
Los compiladores que trabajan con varias pasadas pueden ser desarrollados
con facilidad activando o desactivando la suscripcin de clases.

Tesis Doctoral 31

El Sistema O2C2. Sistema Generador

Gestor de Errores (I)


Objetivos
Completo
Detectar todos los errores producidos durante el proceso de anlisis.
Proporcionar mecanismos para la recuperacin del sistema.
Adoptar un tratamiento adecuado.

Fcil 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 32

El Sistema O2C2. Sistema Generador

Gestor de Errores (II)


Implementacin del modelo

Clases generadas por el sistema

Se utiliza una jerarqua de clases para dar tratamiento


a los diferentes errores que puedan producirse
( lxico, sintctico, semntico, interno, etc).

Error

Cuando se produce una excepcin, si el usuario ha


(Analizador sintctico)
demostrado inters en tratar el error, se cede el control
a las clases suscritas para ese tipo de evento. Si no hay clases
registradas, la excepcin sera tratada en otro punto por defecto.
La comunicacin de las clases creadas por el usuario con las
clases del sistema se realiza a travs de la interfaz Error.

Clases de usuario

Tesis Doctoral 33

El Sistema O2C2. Sistema Generador

Generacin Cdigo Intermedio


Se ha optado por una solucin intermedia entre los generadores totales y
los generadores parciales.
Se permite aadir el cdigo necesario, a travs de las clases
semnticas,
para realizar cualquier tratamiento de la entrada:
Compilacin
Interpretacin
Traduccin

Tesis Doctoral 34

Tesis Doctoral

Contenido

Introduccin

Estudio de los Sistemas Relevantes

Objetivos

El Sistema O2C2

Diseo e Implementacin del Prototipo


Descripcin general
Implementacin
Creacin de clases de usuario
Incorporacin del mecanismo Listeners
Sistema de suscripciones
Tratamiento de errores
Entorno integrado de desarrollo

Ventajas del Sistema Diseado y Aplicaciones

Conclusiones y Lneas de Investigacin Futuras

Tesis Doctoral 35

Prototipo

Descripcin General (I)


O2C2rt. Integra la jerarqua principal de clases de los
frameworks generados por el prototipo. Es la base sobre

Formado por un conjunto


de subsistemas.

la que se construirn frameworks especficos.

O2C2Conv. Completa el framework genrico


proporcionado por el paquete O2C2rt y genera clases para
obtener un analizador sintctico que se integre con el lxico,
y las clases que tratan el semntico y generacin de cdigo.

O2C2rt
O2C2xml

O2C2

O2C2. Ofrece la misma funcionalidad que O2C2Conv. Se


utiliz para la construccin de la versin inicial.

O2C2ui. Integra las clases que conforman la interfaz grfica.


O2C2xml. Contiene las clases que integran el procesador
de lenguaje capaz de reconocer los proyectos usados en
O2C2ui expresados en el lenguaje XML.

O2C2Conv

O2C2ui

Tesis Doctoral 36

Prototipo

Descripcin General (II)


Node

Ncleo
del prototipo

void parse()

NodeChoice

NodeOptional

NodeSeq

void parse()

void parse()

void parse()

NodeSeqOptional
void parse()

NodeToken
void parse()

Node. auxiliares
Clase raz del framework.Todos los elementos de una gramtica derivan de esta clase y se convierten en
Clases
nodos del AST creado.

hacer
interfaz
entrepara
el tratar
ncleo
y el resto de
dependen del lenguaje
Permiten
NodeChoice
. Sede
crea
una subclase
las producciones
de las
cadaclases
smboloque
no terminal.
NodeOptional. Es la superclase de las clases que tratan elementos de la gramtica cuya aparicin en los
Parser
programas no es obligatoria.
Lexer . Las subclases representan las producciones de los diferentes smbolos no terminales.
NodeSeq
Listener
NodeSeqOptional
. Las subclases representan las repeticiones mltiples de elementos gramaticales.
ErrorListener La existencia de estos elementos es opcional.
NodeToken. No tiene subclases. Representa los tokens del AST generado.

Tesis Doctoral 37

Prototipo

Implementacin (I)

Metagramtica1

CUP

Analizador Sintctico
Generado por CUP 2

Gramtica
EBNF

Prototipo O2C2
Analizador Lxico
Generado por JFlex

Metagramtica
(Notacin EBNF)

Analizador Sintctico
Generado por CUP 2

Framework
3
Especfico
O2C2

Clases
Semnticas
1

GramticaquedescribeaotrasgramticasennotacinEBNF

ProgramaqueconvierteunagramticaennotacinEBNFenun

programa(analizadorsintctico).

3
Generador de analizadores sintcticos construido con el prototipo

Tesis Doctoral 38

Prototipo

Implementacin (II)
Prototipo

Con la informacin de la gramtica almacenada en la

Framework O2C2
Generador de
Analizadores Sintcticos

JFLEX (externo)

Gramtica
EBNF

Tabla de Smbolos, se aplican los algoritmos necesarios


para determinar si cumple la condicin LL(1) Extensible
a LL(k).
Si la gramtica cumple dicha condicin:
Se generan las clases correspondientes a los distintos
elementos gramaticales y producciones. Pueden descender de
NodeChoice, NodeSeq, NodeOptional, NodeSeqOptional.
Si el elemento es un smbolo terminal se crea una instancia
de NodeToken.
Existe un mtodo nico para crear estas clases.

Tabla de Smbolos

Se generan las clases auxiliares para dar funcionalidad al


analizador sintctico generado (Parser, Symb, etc).

Tesis Doctoral 39

Prototipo. Implementacin

Creacin de clases de usuario


Se estudi la posibilidad de incluir el cdigo para realizar cualquier tratamiento
semntico en las propias clases generadas por el sistema. Este enfoque plantea
varios inconvenientes.

No facilita la modularidad.
No permite una separacin clara entre el cdigo generado por el sistema
y el cdigo proporcionado por el usuario.

Un cambio en la especificacin sintctica obligara a regenerar las clases


de usuario.

El cdigo aadido a una clase asociada a un elemento de la gramtica


no podra utilizarse en otras diferentes.

Tesis Doctoral 40

Prototipo. Implementacin

Incorporacin del mecanismo Listener


Se basa un la utilizacin del patrn Listener (conocido tambin como
patrn Observer).
Consigue que el cdigo 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 seccin gramatical.
Los eventos son generados por las clases del sistema que representan las distintas
secciones de la gramtica.

Tesis Doctoral 41

Prototipo. Implementacin

Sistema de suscripciones (I)


Node

void parse()

NodeChoice

NodeSeq

NodeSeqOptional

NodeToken

Se debe conocer ante qu clases del sistema se tienen que registrar las clases creadas
por el usuario (clases Listeners) para tratar los eventos.
void parse()

void parse()

void parse()

void parse()

void parse()

La especificacin gramatical Sestar representada en notacin EBNF y podr incluir


Ejemplo
de una simple
calculadora
enlaces (nombres
entrecomillados)
para denotar secciones en la gramtica que puedan
operation
dar lugar a eventos que el usuario
estara interesado en escuchar.

<S>

NodeOptional

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


num

op

El usuario<op>
seala ::=
nicamente
las partes de "
la gramtica
que van a recibir tratamiento
+ "addition
| - "subtraction"
|
* "multiplication"
| / Las
"division"
semntico dando nombres
a las secciones que le interesen.
clases creadas por el
number
addition
subtraction
multiplication
division
usuario se<num>
tiene que::=
registrar
ante
las
clases
que
representan
dichos
enlaces.
DIGIT {DIGIT} "number" ;
multiplication

numberEBNF0

Tesis Doctoral 42

Prototipo. Implementacin

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 mtodo addListener()de la clase a la que se
quiere realizar la suscripcin.
Se implemente la interfaz Listener incluyendo el mtodo
performAction(Node n)

Tesis Doctoral 43

Prototipo. Implementacin

Sistema de suscripciones (III)


Diagrama de colaboracin entre una clase Listener y la clase del sistema a la que se suscribe.

:S

: SListener
PerformAction( )
getValue()
user_code( )
setValue( )

Tesis Doctoral 44

Prototipo. Implementacin

Tratamiento de errores
El mecanismo de deteccin, tratamiento y recuperacin de errores
est incluido en el subsistema O2C2rt.
El usuario puede crear clases especficas para tratar los errores. Se necesita:
Implementar la interfaz Errorlistener incluyendo el mtodo
Boolean TreatError (MismatchedTokenException e)

Jerarqua de excepciones

InternalException

ParserException

SemanticException

MismatchedTokenException

LexerException

Tesis Doctoral 45

Prototipo. Implementacin

Entorno integrado de desarrollo


Permite hacer ms fcil e intuitivo
el proceso de creacin de
procesadores de lenguaje.
Integra los procesos de anlisis
lxico, sintctico y semntico.
Crea los esqueletos de las
clases Listener de forma automtica.
Flexibiliza la estructura de los proyectos
generados permitiendo almacenar los
datos en formato XML.

Tesis Doctoral 46

Prototipo

Implementacin

Se ha utilizado el
propio prototipo para
construir cada uno
de los analizadores
que intervienen en la
implementacin

Analizador gramatical de O2C2Conv

Analizador de proyectos XML para O2C2ui

Analizador de producciones de O2C2ui

Tesis Doctoral 47

Tesis Doctoral

Contenido
Introduccin
Estudio de los Sistemas Relevantes
Objetivos
El Sistema O2C2
Diseo e Implementacin del Prototipo

Ventajas del Sistema Diseado y Aplicaciones


Conclusiones y Lneas de Investigacin Futuras

Tesis Doctoral 48

Ventajas y aplicaciones

Ventajas del sistema diseado (I)


Eficiencia
En una aplicacin

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


estrategias

- Los objetos del framework se inicializan cuando es necesario.


- El texto a analizar nunca est completamente en memoria.
- No es necesario un tratamiento semntico en todas las secciones.
- Modularidad en las aplicaciones generadas.

Eficiencia del sistema propuesto


Optimizacin del ciclo de desarrollo del software.

Tesis Doctoral 49

Ventajas y aplicaciones

Ventajas del sistema diseado (II)


Especificacin
Gramatical
+
Cdigo de Usuario

Anlisis Ascendente

Generador

Yacc

Anlisis Descendente
Gramtica (EBNF)

Prog := fun {S$..


fun := ID {$1... }
stmt := ...

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

Sistema

O2C2
Parser.Java

Framework

s,x
s,x

Ciclo

O2C2rt (class
...)

Listeners

class ...

Parser.c

Entrada
Text
(text)

Compilador C

Procesador de
Leguaje

Salida
Text
xx yyy
0100111

Entrada

Compilador
Java

Text
(text)

Salida

Ciclo

Text
xx yyy
0100111

Procesador de
Lenguaje

Tesis Doctoral 50

Ventajas y aplicaciones

Ventajas del sistema diseado (III)


Robustez
- Permite integrar la funcionalidad siguiendo el mismo modelo orientado a objetos.
- Elimina barreras adicionales que dificultan su uso.

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

Diseo abierto
Permite incorporar
nuevas capacidades

- Operar con analizadores lxicos externos al sistema.


- Modelo que permita al usuario elegir el tipo de anlisis.
- Sistema de tipos genrico extendiendo las interfaces.

Tesis Doctoral 51

Ventajas y aplicaciones

Aplicaciones
Plataforma de experimentacin
- Permite la descripcin de diferentes definiciones formales de lenguajes de
programacin usando la generacin automtica de procesadores de lenguaje
de una forma simple y rpida.
- Soporte en el plano educacional y comercial.

Lenguajes de dominio especfico


Realizar diferentes tareas relacionadas con la programacin
- Lenguajes de programacin.
Analizadores
sintcticos

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


- Formatos de ficheros y estndar comerciales (IDL, ODL, ...)
- Lenguajes de bases de datos y modelado (SQL, VRML, ...)
- Lenguajes de propsito especial, protocolos (http, ftp, ...)

Tesis Doctoral 52

Tesis Doctoral

Contenido
Introduccin
Estudio de los Sistemas Relevantes
Objetivos
El Sistema O2C2
Diseo e Implementacin del Prototipo
Ventajas del Sistema Diseado y Aplicaciones

Conclusiones y Lneas de Investigacin Futuras

Tesis Doctoral 53

Conclusiones

Caractersticas (I)
Modularidad

Al separar las especificaciones del cdigo semntico se logra


encapsular los detalles de la implementacin ayudando a
entender

y manejar mejor las aplicaciones.

Extensibilidadad

Reusabilidad
Mantenimiento

La organizacin del sistema como un conjunto de clases


permite que se puedan extender para adaptar su comportamiento
a las nuevas condiciones requeridas por una aplicacin.
Se consigue a travs de la extensibilidad, reutilizando el propio
cdigo de las clases.
Permite modificar las aplicaciones aadiendo o quitando
funcionalidad.

Tesis Doctoral 54

Conclusiones

Caractersticas (II)
Ciclo de
desarrollo corto

Permite comprender mejor la estructura y el cdigo de las


aplicaciones generadas disminuyendo su complejidad.

Entorno visual

Integra de forma sencilla e intuitiva toda la funcionalidad


proporcionada por el sistema.

Integracin flexible

La funcionalidad del sistema puede ser proporcionada en


forma de API. As las aplicaciones clientes podrn
interactuar con el sistema desde diferentes entornos de
desarrollo.

Soporte para el diseo e implementacin de lenguajes

Tesis Doctoral 55

Conclusiones

Resultados destacables (I)


Utilidad
Pensado para dar solucin a diversas tareas relacionadas con la programacin.
Genera procesadores basados en jerarquas de clases, adaptados para ser la base
de aplicaciones grandes y complejas.

Facilidad de aprendizaje
Sistema basado en un pequeo grupo de conceptos.

Eficiencia
Permite realizar de una forma cmoda y eficiente el trabajo de desarrollar
un procesador de lenguaje.

Tesis Doctoral 56

Conclusiones

Resultados destacables (II)


Errores
Permite aadir cdigo especializado para conseguir aplicaciones tolerantes a fallos.
Detecta los errores producidos facilitando su localizacin y correccin.

Satisfaccin
Las especificaciones son simples, el comportamiento del propio sistema y de los
procesadores generados en fcil de entender y los conceptos que usa son conocidos.

Retencin de ideas
La abstraccin proporcionada por el sistema es adecuada. Libera al usuario de tener
que tratar con muchos datos de forma simultnea y ocuparse de muchos detalles.

Tesis Doctoral 57

Antlr

Cocktail

Eli

Gentle

Tra
erro tamien
t
res
efic o de
az

Accent

Conclusiones

Cic
des lo de
cor arrollo
to
Ent
de d orno v
esar isua
roll l
o
Gen
erad
or to
tal

Generador de
Procesadores
de Lenguajes

Mo
dul
ari
dad
Reu
sab
ilid
ad
Ex
ten
sib
ilid
ad
Ma
nte
nin
im
ien
to

Comparacin cualitativa

JavaCC

Lemon

Lex/Yacc

ProGrammar

SableCC

Spirit

Sistema O2C2

Tesis Doctoral 58

Conclusiones

Lneas de investigacin futuras


Incorporacin del resto de funcionalidades al sistema.
Generalizacin del tipo de anlisis.
Mejora en el entorno visual de desarrollo.
Implementacin de un sistema de tipos.
Sistema de prototipado de lenguajes.

Tesis Doctoral 59

Conclusiones

Publicaciones derivadas (I)

Luengo Dez M. Cndida. Diseo y construccin de Procesadores de Lenguaje


Orientados a Objetos. II Jornadas sobre Tecnologas Orientadas a Objetos. Oviedo,
1996.

Luengo Dez M. C., Labra Gayo J. E., Dominguez Mateos F., Prez Daz A., Garca
Fernndez N., Cueva Lovelle J. M. Desarrollo de Compiladores en un Sistema
Integral Orientado a Objetos. V Congreso Internacional de Investigacin 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, Nmero 12. Pg. 41-51. Diciembre 2000.

Tesis Doctoral 60

Conclusiones

Publicaciones derivadas (II)

Luengo M.C., Labra J. E., Cueva J.M., Garca N., Basanta D. Building
Compiler Tools using Frameworks. SISOFT 2001: Simposio
Iberoamericano de Sistemas de Informacin e Ingeniera de Software
en la Sociedad del Conocimiento. Bogota Colombia, Agosto 2001.

Luengo M. C., Cueva J.M., Labra J. E., Garca N., Basanta D. Applying Frameworks
and Object-Oriented Techniques for developing Language Processors Tools.
Primeras Jornadas sobre Programacin y Lenguajes. Almagro Ciudad Real,
Noviembre 2001.

Luengo M. C., Labra J. E., Garca 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 aceptacin)
http://www.cse.unl.edu/~fayad/Books/NewBooks/scripts/user/chapters.php3

Tesis Doctoral 61

Universidad de Oviedo - Departamento de Informtica

Tesis Doctoral
Desarrollo y Evaluacin de Tcnicas de
Construccin de Procesadores de Lenguaje para
Mquinas Abstractas Orientadas a Objetos

Fin de la Exposicin
(c) Mara Cndida Luengo Dez
Junio 2002

Tesis Doctoral 62

Vous aimerez peut-être aussi